Add SimpleSpanProcessor.create and deprecate SimpleSpanProcessorBuilder (#2374)

* Deprecate SimpleSpanProcessorBuilder

* Null test
This commit is contained in:
Anuraag Agrawal 2020-12-23 12:31:02 +09:00 committed by GitHub
parent fa507d4e7c
commit 24ef29efea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 52 additions and 27 deletions

View File

@ -64,7 +64,7 @@ class JaegerThriftIntegrationTest {
return OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(jaegerExporter).build())
.addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))
.build())
.build();
}

View File

@ -66,7 +66,7 @@ class JaegerIntegrationTest {
return OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(jaegerExporter).build())
.addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))
.build())
.build();
}

View File

@ -40,7 +40,7 @@ public class SendTraceToJaeger {
return OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(jaegerExporter).build())
.addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))
.build())
.build();
}

View File

@ -67,7 +67,7 @@ class TraceInteroperabilityTest {
spanExporter = spy(SpanExporter.class);
when(spanExporter.export(anyList())).thenReturn(CompletableResultCode.ofSuccess());
SpanProcessor spanProcessor = SimpleSpanProcessor.builder(spanExporter).build();
SpanProcessor spanProcessor = SimpleSpanProcessor.create(spanExporter);
openTelemetry =
OpenTelemetrySdk.builder()
.setTracerProvider(SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build())

View File

@ -96,12 +96,11 @@ public class SpanPipelineBenchmark {
public static class SimpleSpanProcessorBenchmark extends AbstractProcessorBenchmark {
@Override
protected SpanProcessor getSpanProcessor(String collectorAddress) {
return SimpleSpanProcessor.builder(
OtlpGrpcSpanExporter.builder()
.setEndpoint(collectorAddress)
.setDeadlineMs(50000)
.build())
.build();
return SimpleSpanProcessor.create(
OtlpGrpcSpanExporter.builder()
.setEndpoint(collectorAddress)
.setDeadlineMs(50000)
.build());
}
@Override

View File

@ -158,8 +158,8 @@ class OpenTelemetrySdkTest {
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.create(mock(SpanExporter.class)))
.addSpanProcessor(SimpleSpanProcessor.create(mock(SpanExporter.class)))
.setClock(mock(Clock.class))
.setIdGenerator(mock(IdGenerator.class))
.setResource(mock(Resource.class))
@ -177,7 +177,7 @@ class OpenTelemetrySdkTest {
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.create(mock(SpanExporter.class)))
.build())
.setPropagators(ContextPropagators.create(mock(TextMapPropagator.class)))
.build();
@ -190,7 +190,7 @@ class OpenTelemetrySdkTest {
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.create(mock(SpanExporter.class)))
.setTraceConfig(
TraceConfig.getDefault().toBuilder().setSampler(mock(Sampler.class)).build())
.build())
@ -200,7 +200,7 @@ class OpenTelemetrySdkTest {
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.create(mock(SpanExporter.class)))
.setTraceConfig(
TraceConfig.getDefault().toBuilder().setSampler(mock(Sampler.class)).build())
.setIdGenerator(mock(IdGenerator.class))

View File

@ -53,7 +53,7 @@ public final class OpenTelemetryRule extends ExternalResource {
SdkTracerProvider tracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(spanExporter).build())
.addSpanProcessor(SimpleSpanProcessor.create(spanExporter))
.build();
OpenTelemetrySdk openTelemetry =

View File

@ -59,7 +59,7 @@ public final class OpenTelemetryExtension
SdkTracerProvider tracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(spanExporter).build())
.addSpanProcessor(SimpleSpanProcessor.create(spanExporter))
.build();
OpenTelemetrySdk openTelemetry =

View File

@ -32,9 +32,7 @@ class InMemorySpanExporterTest {
@BeforeEach
void setup() {
tracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(exporter).build())
.build();
SdkTracerProvider.builder().addSpanProcessor(SimpleSpanProcessor.create(exporter)).build();
tracer = tracerProvider.get("InMemorySpanExporterTest");
}

View File

@ -5,6 +5,8 @@
package io.opentelemetry.sdk.trace.export;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.trace.ReadWriteSpan;
@ -13,7 +15,6 @@ import io.opentelemetry.sdk.trace.SpanProcessor;
import io.opentelemetry.sdk.trace.data.SpanData;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -48,19 +49,30 @@ public final class SimpleSpanProcessor implements SpanProcessor {
private final boolean sampled;
private final AtomicBoolean isShutdown = new AtomicBoolean(false);
/**
* Returns a new {@link SimpleSpanProcessor} which exports spans to the {@link SpanExporter}
* synchronously.
*/
public static SpanProcessor create(SpanExporter exporter) {
requireNonNull(exporter, "exporter");
return new SimpleSpanProcessor(exporter, /* sampled= */ true);
}
/**
* Returns a new Builder for {@link SimpleSpanProcessor}.
*
* @param spanExporter the {@code SpanExporter} to where the Spans are pushed.
* @return a new {@link SimpleSpanProcessor}.
* @throws NullPointerException if the {@code spanExporter} is {@code null}.
* @deprecated Use {@link SimpleSpanProcessor#create(SpanExporter)}
*/
@Deprecated
public static SimpleSpanProcessorBuilder builder(SpanExporter spanExporter) {
return new SimpleSpanProcessorBuilder(spanExporter);
}
SimpleSpanProcessor(SpanExporter spanExporter, boolean sampled) {
this.spanExporter = Objects.requireNonNull(spanExporter, "spanExporter");
this.spanExporter = requireNonNull(spanExporter, "spanExporter");
this.sampled = sampled;
}

View File

@ -9,7 +9,12 @@ import io.opentelemetry.sdk.common.export.ConfigBuilder;
import java.util.Map;
import java.util.Objects;
/** Builder class for {@link SimpleSpanProcessor}. */
/**
* Builder class for {@link SimpleSpanProcessor}.
*
* @deprecated Use {@link SimpleSpanProcessor#create(SpanExporter)}
*/
@Deprecated
public final class SimpleSpanProcessorBuilder extends ConfigBuilder<SimpleSpanProcessorBuilder> {
private static final String KEY_SAMPLED = "otel.ssp.export.sampled";

View File

@ -6,6 +6,7 @@
package io.opentelemetry.sdk.trace.export;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;
@ -23,6 +24,7 @@ import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.trace.ReadWriteSpan;
import io.opentelemetry.sdk.trace.ReadableSpan;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SpanProcessor;
import io.opentelemetry.sdk.trace.TestUtils;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessorTest.WaitingSpanExporter;
@ -41,6 +43,8 @@ import org.mockito.quality.Strictness;
/** Unit tests for {@link SimpleSpanProcessor}. */
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
// TODO(anuraaga): Remove after builder() is removed.
@SuppressWarnings("deprecation")
class SimpleSpanProcessorTest {
private static final long MAX_SCHEDULE_DELAY_MILLIS = 500;
private static final String SPAN_NAME = "MySpanName";
@ -55,11 +59,18 @@ class SimpleSpanProcessorTest {
TraceState.builder().build());
private static final SpanContext NOT_SAMPLED_SPAN_CONTEXT = SpanContext.getInvalid();
private SimpleSpanProcessor simpleSampledSpansProcessor;
private SpanProcessor simpleSampledSpansProcessor;
@BeforeEach
void setUp() {
simpleSampledSpansProcessor = SimpleSpanProcessor.builder(spanExporter).build();
simpleSampledSpansProcessor = SimpleSpanProcessor.create(spanExporter);
}
@Test
void createNull() {
assertThatThrownBy(() -> SimpleSpanProcessor.create(null))
.isInstanceOf(NullPointerException.class)
.hasMessage("exporter");
}
@Test
@ -107,7 +118,7 @@ class SimpleSpanProcessorTest {
when(readableSpan.toSpanData())
.thenReturn(TestUtils.makeBasicSpan())
.thenThrow(new RuntimeException());
SimpleSpanProcessor simpleSpanProcessor = SimpleSpanProcessor.builder(spanExporter).build();
SpanProcessor simpleSpanProcessor = SimpleSpanProcessor.create(spanExporter);
simpleSpanProcessor.onEnd(readableSpan);
verifyNoInteractions(spanExporter);
}
@ -118,7 +129,7 @@ class SimpleSpanProcessorTest {
when(readableSpan.toSpanData())
.thenReturn(TestUtils.makeBasicSpan())
.thenThrow(new RuntimeException());
SimpleSpanProcessor simpleSpanProcessor = SimpleSpanProcessor.builder(spanExporter).build();
SpanProcessor simpleSpanProcessor = SimpleSpanProcessor.create(spanExporter);
simpleSpanProcessor.onEnd(readableSpan);
verify(spanExporter).export(Collections.singletonList(TestUtils.makeBasicSpan()));
}