Replace EndSpanOptions.Builder with factory. (#1934)

* Replace EndSpanOptions.Builder with factory.

* create

* Remove class completely
This commit is contained in:
Anuraag Agrawal 2020-11-04 13:33:10 +09:00 committed by GitHub
parent 94fcaaed77
commit 5be613a3f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 25 additions and 114 deletions

View File

@ -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() {}
}

View File

@ -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() {

View File

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

View File

@ -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

View File

@ -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");

View File

@ -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) {

View File

@ -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();