Replace EndSpanOptions.Builder with factory. (#1934)
* Replace EndSpanOptions.Builder with factory. * create * Remove class completely
This commit is contained in:
parent
94fcaaed77
commit
5be613a3f0
|
|
@ -1,67 +0,0 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.api.trace;
|
||||
|
||||
import com.google.auto.value.AutoValue;
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
|
||||
/**
|
||||
* A class that enables overriding the default values used when ending a {@link Span}. Allows
|
||||
* overriding the endTimestamp.
|
||||
*/
|
||||
@Immutable
|
||||
@AutoValue
|
||||
public abstract class EndSpanOptions {
|
||||
private static final EndSpanOptions DEFAULT = builder().build();
|
||||
|
||||
/** The default {@code EndSpanOptions}. */
|
||||
static EndSpanOptions getDefault() {
|
||||
return DEFAULT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link Builder} with default options.
|
||||
*
|
||||
* @return a new {@code Builder} with default options.
|
||||
*/
|
||||
public static Builder builder() {
|
||||
return new AutoValue_EndSpanOptions.Builder().setEndTimestamp(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the end timestamp.
|
||||
*
|
||||
* <p>Important this is NOT equivalent with System.nanoTime().
|
||||
*
|
||||
* @return the end timestamp.
|
||||
*/
|
||||
public abstract long getEndTimestamp();
|
||||
|
||||
/** Builder class for {@link EndSpanOptions}. */
|
||||
@AutoValue.Builder
|
||||
public abstract static class Builder {
|
||||
/**
|
||||
* Sets the end timestamp for the {@link Span}.
|
||||
*
|
||||
* <p>Important this is NOT equivalent with System.nanoTime().
|
||||
*
|
||||
* @param endTimestamp the end timestamp in nanos since epoch.
|
||||
* @return this.
|
||||
*/
|
||||
public abstract Builder setEndTimestamp(long endTimestamp);
|
||||
|
||||
/**
|
||||
* Builds and returns a {@code EndSpanOptions} with the desired settings.
|
||||
*
|
||||
* @return a {@code EndSpanOptions} with the desired settings.
|
||||
*/
|
||||
public abstract EndSpanOptions build();
|
||||
|
||||
Builder() {}
|
||||
}
|
||||
|
||||
EndSpanOptions() {}
|
||||
}
|
||||
|
|
@ -114,7 +114,7 @@ final class PropagatedSpan implements Span {
|
|||
public void end() {}
|
||||
|
||||
@Override
|
||||
public void end(EndSpanOptions endOptions) {}
|
||||
public void end(long timestamp) {}
|
||||
|
||||
@Override
|
||||
public SpanContext getSpanContext() {
|
||||
|
|
|
|||
|
|
@ -304,7 +304,7 @@ public interface Span extends ImplicitContextKeyed {
|
|||
void end();
|
||||
|
||||
/**
|
||||
* Marks the end of {@code Span} execution with the specified {@link EndSpanOptions}.
|
||||
* Marks the end of {@code Span} execution with the specified timestamp.
|
||||
*
|
||||
* <p>Only the timing of the first end call for a given {@code Span} will be recorded, and
|
||||
* implementations are free to ignore all further calls.
|
||||
|
|
@ -312,9 +312,10 @@ public interface Span extends ImplicitContextKeyed {
|
|||
* <p>Use this method for specifying explicit end options, such as end {@code Timestamp}. When no
|
||||
* explicit values are required, use {@link #end()}.
|
||||
*
|
||||
* @param endOptions the explicit {@link EndSpanOptions} for this {@code Span}.
|
||||
* @param timestamp the explicit timestamp, as nanos from the epoch, for this {@code Span}. {@code
|
||||
* 0} indicates current time should be used.
|
||||
*/
|
||||
void end(EndSpanOptions endOptions);
|
||||
void end(long timestamp);
|
||||
|
||||
/**
|
||||
* Returns the {@code SpanContext} associated with this {@code Span}.
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@ class PropagatedSpanTest {
|
|||
span.recordException(new IllegalStateException());
|
||||
span.recordException(new IllegalStateException(), Attributes.empty());
|
||||
span.end();
|
||||
span.end(EndSpanOptions.getDefault());
|
||||
span.end(null);
|
||||
span.end(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import static com.google.common.net.UrlEscapers.urlFormParameterEscaper;
|
|||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import io.opentelemetry.api.trace.EndSpanOptions;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.StatusCode;
|
||||
import io.opentelemetry.api.trace.Tracer;
|
||||
|
|
@ -61,8 +60,7 @@ class TracezZPageHandlerTest {
|
|||
Span runningSpan = tracer.spanBuilder(RUNNING_SPAN).startSpan();
|
||||
|
||||
Span latencySpan = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions = EndSpanOptions.builder().setEndTimestamp(10002L).build();
|
||||
latencySpan.end(endOptions);
|
||||
latencySpan.end(10002);
|
||||
|
||||
Span errorSpan = tracer.spanBuilder(ERROR_SPAN).startSpan();
|
||||
errorSpan.setStatus(StatusCode.ERROR);
|
||||
|
|
@ -145,40 +143,31 @@ class TracezZPageHandlerTest {
|
|||
OutputStream output = new ByteArrayOutputStream();
|
||||
// Boundary 0, >1us
|
||||
Span latencySpanSubtype0 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions0 = EndSpanOptions.builder().setEndTimestamp(1002L).build();
|
||||
latencySpanSubtype0.end(endOptions0);
|
||||
latencySpanSubtype0.end(1002);
|
||||
// Boundary 1, >10us
|
||||
Span latencySpanSubtype1 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions1 = EndSpanOptions.builder().setEndTimestamp(10002L).build();
|
||||
latencySpanSubtype1.end(endOptions1);
|
||||
latencySpanSubtype1.end(10002);
|
||||
// Boundary 2, >100us
|
||||
Span latencySpanSubtype2 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions2 = EndSpanOptions.builder().setEndTimestamp(100002L).build();
|
||||
latencySpanSubtype2.end(endOptions2);
|
||||
latencySpanSubtype2.end(100002);
|
||||
// Boundary 3, >1ms
|
||||
Span latencySpanSubtype3 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions3 = EndSpanOptions.builder().setEndTimestamp(1000002L).build();
|
||||
latencySpanSubtype3.end(endOptions3);
|
||||
latencySpanSubtype3.end(1000002);
|
||||
// Boundary 4, >10ms
|
||||
Span latencySpanSubtype4 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions4 = EndSpanOptions.builder().setEndTimestamp(10000002L).build();
|
||||
latencySpanSubtype4.end(endOptions4);
|
||||
latencySpanSubtype4.end(10000002);
|
||||
// Boundary 5, >100ms
|
||||
Span latencySpanSubtype5 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions5 = EndSpanOptions.builder().setEndTimestamp(100000002L).build();
|
||||
latencySpanSubtype5.end(endOptions5);
|
||||
latencySpanSubtype5.end(100000002);
|
||||
// Boundary 6, >1s
|
||||
Span latencySpanSubtype6 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions6 = EndSpanOptions.builder().setEndTimestamp(1000000002L).build();
|
||||
latencySpanSubtype6.end(endOptions6);
|
||||
latencySpanSubtype6.end(1000000002);
|
||||
// Boundary 7, >10s
|
||||
Span latencySpanSubtype7 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions7 = EndSpanOptions.builder().setEndTimestamp(10000000002L).build();
|
||||
latencySpanSubtype7.end(endOptions7);
|
||||
latencySpanSubtype7.end(10000000002L);
|
||||
// Boundary 8, >100s
|
||||
Span latencySpanSubtype8 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions8 = EndSpanOptions.builder().setEndTimestamp(100000000002L).build();
|
||||
latencySpanSubtype8.end(endOptions8);
|
||||
latencySpanSubtype8.end(100000000002L);
|
||||
|
||||
TracezZPageHandler tracezZPageHandler = new TracezZPageHandler(dataAggregator);
|
||||
tracezZPageHandler.emitHtml(emptyQueryMap, output);
|
||||
|
|
@ -217,17 +206,13 @@ class TracezZPageHandlerTest {
|
|||
OutputStream output = new ByteArrayOutputStream();
|
||||
// 4 samples in boundary 5, >100ms
|
||||
Span latencySpan100ms1 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions1 = EndSpanOptions.builder().setEndTimestamp(112931232L).build();
|
||||
latencySpan100ms1.end(endOptions1);
|
||||
latencySpan100ms1.end(112931232L);
|
||||
Span latencySpan100ms2 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions2 = EndSpanOptions.builder().setEndTimestamp(138694322L).build();
|
||||
latencySpan100ms2.end(endOptions2);
|
||||
latencySpan100ms2.end(138694322L);
|
||||
Span latencySpan100ms3 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions3 = EndSpanOptions.builder().setEndTimestamp(154486482L).build();
|
||||
latencySpan100ms3.end(endOptions3);
|
||||
latencySpan100ms3.end(154486482L);
|
||||
Span latencySpan100ms4 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions4 = EndSpanOptions.builder().setEndTimestamp(194892582L).build();
|
||||
latencySpan100ms4.end(endOptions4);
|
||||
latencySpan100ms4.end(194892582L);
|
||||
|
||||
TracezZPageHandler tracezZPageHandler = new TracezZPageHandler(dataAggregator);
|
||||
tracezZPageHandler.emitHtml(emptyQueryMap, output);
|
||||
|
|
@ -286,11 +271,9 @@ class TracezZPageHandlerTest {
|
|||
void spanDetails_emitLatencySpanDetailsCorrectly() {
|
||||
OutputStream output = new ByteArrayOutputStream();
|
||||
Span latencySpan1 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions1 = EndSpanOptions.builder().setEndTimestamp(10002L).build();
|
||||
latencySpan1.end(endOptions1);
|
||||
latencySpan1.end(10002);
|
||||
Span latencySpan2 = tracer.spanBuilder(LATENCY_SPAN).setStartTimestamp(1L).startSpan();
|
||||
EndSpanOptions endOptions2 = EndSpanOptions.builder().setEndTimestamp(10002L).build();
|
||||
latencySpan2.end(endOptions2);
|
||||
latencySpan2.end(10002);
|
||||
Map<String, String> queryMap =
|
||||
ImmutableMap.of("zspanname", LATENCY_SPAN, "ztype", "1", "zsubtype", "1");
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import io.opentelemetry.api.common.AttributeConsumer;
|
|||
import io.opentelemetry.api.common.AttributeKey;
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.common.ReadableAttributes;
|
||||
import io.opentelemetry.api.trace.EndSpanOptions;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.SpanContext;
|
||||
import io.opentelemetry.api.trace.StatusCode;
|
||||
|
|
@ -449,12 +448,8 @@ final class RecordEventsReadableSpan implements ReadWriteSpan {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void end(EndSpanOptions endOptions) {
|
||||
if (endOptions == null) {
|
||||
end();
|
||||
return;
|
||||
}
|
||||
endInternal(endOptions.getEndTimestamp() == 0 ? clock.now() : endOptions.getEndTimestamp());
|
||||
public void end(long timestamp) {
|
||||
endInternal(timestamp == 0 ? clock.now() : timestamp);
|
||||
}
|
||||
|
||||
private void endInternal(long endEpochNanos) {
|
||||
|
|
|
|||
|
|
@ -694,7 +694,7 @@ class RecordEventsReadableSpanTest {
|
|||
span.addEvent(null, null);
|
||||
span.addEvent(null, null, 0);
|
||||
span.recordException(null);
|
||||
span.end(null);
|
||||
span.end(0);
|
||||
|
||||
// Ignored the bad calls
|
||||
SpanData data = span.toSpanData();
|
||||
|
|
|
|||
Loading…
Reference in New Issue