diff --git a/api/src/main/java/io/opentelemetry/api/trace/EndSpanOptions.java b/api/src/main/java/io/opentelemetry/api/trace/EndSpanOptions.java deleted file mode 100644 index c6b030b275..0000000000 --- a/api/src/main/java/io/opentelemetry/api/trace/EndSpanOptions.java +++ /dev/null @@ -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. - * - *

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}. - * - *

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() {} -} diff --git a/api/src/main/java/io/opentelemetry/api/trace/PropagatedSpan.java b/api/src/main/java/io/opentelemetry/api/trace/PropagatedSpan.java index 26f624e910..a69540dd44 100644 --- a/api/src/main/java/io/opentelemetry/api/trace/PropagatedSpan.java +++ b/api/src/main/java/io/opentelemetry/api/trace/PropagatedSpan.java @@ -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() { diff --git a/api/src/main/java/io/opentelemetry/api/trace/Span.java b/api/src/main/java/io/opentelemetry/api/trace/Span.java index d276b2e4c3..1bc5aa1e9c 100644 --- a/api/src/main/java/io/opentelemetry/api/trace/Span.java +++ b/api/src/main/java/io/opentelemetry/api/trace/Span.java @@ -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. * *

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 { *

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}. diff --git a/api/src/test/java/io/opentelemetry/api/trace/PropagatedSpanTest.java b/api/src/test/java/io/opentelemetry/api/trace/PropagatedSpanTest.java index 97b40dcfe2..c6f26c3e5b 100644 --- a/api/src/test/java/io/opentelemetry/api/trace/PropagatedSpanTest.java +++ b/api/src/test/java/io/opentelemetry/api/trace/PropagatedSpanTest.java @@ -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 diff --git a/sdk-extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezZPageHandlerTest.java b/sdk-extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezZPageHandlerTest.java index d48ba4a8f2..04e9a2f120 100644 --- a/sdk-extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezZPageHandlerTest.java +++ b/sdk-extensions/zpages/src/test/java/io/opentelemetry/sdk/extensions/zpages/TracezZPageHandlerTest.java @@ -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 queryMap = ImmutableMap.of("zspanname", LATENCY_SPAN, "ztype", "1", "zsubtype", "1"); diff --git a/sdk/tracing/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java b/sdk/tracing/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java index 261331033a..03169a7448 100644 --- a/sdk/tracing/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java +++ b/sdk/tracing/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java @@ -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) { diff --git a/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java b/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java index 7c48642239..68d5d8fa35 100644 --- a/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java +++ b/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java @@ -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();