Avoid using mutable addSpanProcessor when trivial to change (#2365)
* Run go mod tidy on the master * Fixes Co-authored-by: Anuraag Agrawal <aanuraag@amazon.co.jp>
This commit is contained in:
parent
8dfdce3fe9
commit
95163d71fb
|
|
@ -25,6 +25,7 @@ import io.opentelemetry.sdk.metrics.data.MetricData.Point;
|
||||||
import io.opentelemetry.sdk.metrics.export.IntervalMetricReader;
|
import io.opentelemetry.sdk.metrics.export.IntervalMetricReader;
|
||||||
import io.opentelemetry.sdk.metrics.export.MetricExporter;
|
import io.opentelemetry.sdk.metrics.export.MetricExporter;
|
||||||
import io.opentelemetry.sdk.testing.exporter.InMemoryMetricExporter;
|
import io.opentelemetry.sdk.testing.exporter.InMemoryMetricExporter;
|
||||||
|
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||||
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
|
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
@ -267,6 +268,10 @@ public class OtlpPipelineStressTest {
|
||||||
// .setMaxExportBatchSize(1024)
|
// .setMaxExportBatchSize(1024)
|
||||||
// .setScheduleDelayMillis(1000)
|
// .setScheduleDelayMillis(1000)
|
||||||
.build();
|
.build();
|
||||||
OpenTelemetrySdk.getGlobalTracerManagement().addSpanProcessor(spanProcessor);
|
|
||||||
|
GlobalOpenTelemetry.set(
|
||||||
|
OpenTelemetrySdk.builder()
|
||||||
|
.setTracerProvider(SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import io.opentelemetry.api.trace.Tracer;
|
||||||
import io.opentelemetry.context.ContextStorage;
|
import io.opentelemetry.context.ContextStorage;
|
||||||
import io.opentelemetry.context.Scope;
|
import io.opentelemetry.context.Scope;
|
||||||
import io.opentelemetry.sdk.OpenTelemetrySdk;
|
import io.opentelemetry.sdk.OpenTelemetrySdk;
|
||||||
|
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
@ -29,7 +30,11 @@ class JfrSpanProcessorTest {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
ContextStorage.addWrapper(JfrContextStorageWrapper::new);
|
ContextStorage.addWrapper(JfrContextStorageWrapper::new);
|
||||||
OpenTelemetrySdk.getGlobalTracerManagement().addSpanProcessor(new JfrSpanProcessor());
|
GlobalOpenTelemetry.set(
|
||||||
|
OpenTelemetrySdk.builder()
|
||||||
|
.setTracerProvider(
|
||||||
|
SdkTracerProvider.builder().addSpanProcessor(new JfrSpanProcessor()).build())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Simple test to validate JFR events for Span and Scope. */
|
/** Simple test to validate JFR events for Span and Scope. */
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ import io.opentelemetry.sdk.trace.data.SpanData;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
/** Unit tests for {@link TracezDataAggregator}. */
|
/** Unit tests for {@link TracezDataAggregator}. */
|
||||||
|
|
@ -25,17 +24,12 @@ public final class TracezDataAggregatorTest {
|
||||||
private static final String SPAN_NAME_ONE = "one";
|
private static final String SPAN_NAME_ONE = "one";
|
||||||
private static final String SPAN_NAME_TWO = "two";
|
private static final String SPAN_NAME_TWO = "two";
|
||||||
private final TestClock testClock = TestClock.create();
|
private final TestClock testClock = TestClock.create();
|
||||||
private final SdkTracerProvider sdkTracerProvider =
|
|
||||||
SdkTracerProvider.builder().setClock(testClock).build();
|
|
||||||
private final Tracer tracer = sdkTracerProvider.get("TracezDataAggregatorTest");
|
|
||||||
private final TracezSpanProcessor spanProcessor = TracezSpanProcessor.builder().build();
|
private final TracezSpanProcessor spanProcessor = TracezSpanProcessor.builder().build();
|
||||||
|
private final SdkTracerProvider sdkTracerProvider =
|
||||||
|
SdkTracerProvider.builder().setClock(testClock).addSpanProcessor(spanProcessor).build();
|
||||||
|
private final Tracer tracer = sdkTracerProvider.get("TracezDataAggregatorTest");
|
||||||
private final TracezDataAggregator dataAggregator = new TracezDataAggregator(spanProcessor);
|
private final TracezDataAggregator dataAggregator = new TracezDataAggregator(spanProcessor);
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
sdkTracerProvider.addSpanProcessor(spanProcessor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getSpanNames_noSpans() {
|
void getSpanNames_noSpans() {
|
||||||
assertThat(dataAggregator.getSpanNames()).isEmpty();
|
assertThat(dataAggregator.getSpanNames()).isEmpty();
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
@ -38,18 +37,13 @@ class TracezZPageHandlerTest {
|
||||||
private static final String LATENCY_SPAN = "LatencySpan";
|
private static final String LATENCY_SPAN = "LatencySpan";
|
||||||
private static final String ERROR_SPAN = "ErrorSpan";
|
private static final String ERROR_SPAN = "ErrorSpan";
|
||||||
private final TestClock testClock = TestClock.create();
|
private final TestClock testClock = TestClock.create();
|
||||||
private final SdkTracerProvider sdkTracerProvider =
|
|
||||||
SdkTracerProvider.builder().setClock(testClock).build();
|
|
||||||
private final Tracer tracer = sdkTracerProvider.get("TracezZPageHandlerTest");
|
|
||||||
private final TracezSpanProcessor spanProcessor = TracezSpanProcessor.builder().build();
|
private final TracezSpanProcessor spanProcessor = TracezSpanProcessor.builder().build();
|
||||||
|
private final SdkTracerProvider sdkTracerProvider =
|
||||||
|
SdkTracerProvider.builder().setClock(testClock).addSpanProcessor(spanProcessor).build();
|
||||||
|
private final Tracer tracer = sdkTracerProvider.get("TracezZPageHandlerTest");
|
||||||
private final TracezDataAggregator dataAggregator = new TracezDataAggregator(spanProcessor);
|
private final TracezDataAggregator dataAggregator = new TracezDataAggregator(spanProcessor);
|
||||||
private final Map<String, String> emptyQueryMap = ImmutableMap.of();
|
private final Map<String, String> emptyQueryMap = ImmutableMap.of();
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
sdkTracerProvider.addSpanProcessor(spanProcessor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void summaryTable_emitRowForEachSpan() {
|
void summaryTable_emitRowForEachSpan() {
|
||||||
OutputStream output = new ByteArrayOutputStream();
|
OutputStream output = new ByteArrayOutputStream();
|
||||||
|
|
|
||||||
|
|
@ -72,8 +72,10 @@ public class SpanPipelineBenchmark {
|
||||||
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOn()).build();
|
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOn()).build();
|
||||||
|
|
||||||
SdkTracerProvider tracerProvider =
|
SdkTracerProvider tracerProvider =
|
||||||
SdkTracerProvider.builder().setTraceConfig(alwaysOn).build();
|
SdkTracerProvider.builder()
|
||||||
tracerProvider.addSpanProcessor(getSpanProcessor(address));
|
.setTraceConfig(alwaysOn)
|
||||||
|
.addSpanProcessor(getSpanProcessor(address))
|
||||||
|
.build();
|
||||||
|
|
||||||
Tracer tracerSdk = tracerProvider.get("PipelineBenchmarkTracer");
|
Tracer tracerSdk = tracerProvider.get("PipelineBenchmarkTracer");
|
||||||
sdkSpanBuilder = (SdkSpanBuilder) tracerSdk.spanBuilder("PipelineBenchmarkSpan");
|
sdkSpanBuilder = (SdkSpanBuilder) tracerSdk.spanBuilder("PipelineBenchmarkSpan");
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ import io.opentelemetry.sdk.trace.IdGenerator;
|
||||||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||||
import io.opentelemetry.sdk.trace.SpanProcessor;
|
import io.opentelemetry.sdk.trace.SpanProcessor;
|
||||||
import io.opentelemetry.sdk.trace.config.TraceConfig;
|
import io.opentelemetry.sdk.trace.config.TraceConfig;
|
||||||
|
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
|
||||||
|
import io.opentelemetry.sdk.trace.export.SpanExporter;
|
||||||
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
@ -153,11 +155,8 @@ class OpenTelemetrySdkTest {
|
||||||
OpenTelemetrySdk.builder()
|
OpenTelemetrySdk.builder()
|
||||||
.setTracerProvider(
|
.setTracerProvider(
|
||||||
SdkTracerProvider.builder()
|
SdkTracerProvider.builder()
|
||||||
// TODO: Add support to configure SpanProcessor the builder.
|
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
|
||||||
// .addSpanProcessor(SimpleSpanProcessor.builder(
|
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
|
||||||
// mock(SpanExporter.class)).build())
|
|
||||||
// .addSpanProcessor(SimpleSpanProcessor.builder(
|
|
||||||
// mock(SpanExporter.class)).build())
|
|
||||||
.setClock(mock(Clock.class))
|
.setClock(mock(Clock.class))
|
||||||
.setIdGenerator(mock(IdGenerator.class))
|
.setIdGenerator(mock(IdGenerator.class))
|
||||||
.setResource(mock(Resource.class))
|
.setResource(mock(Resource.class))
|
||||||
|
|
@ -175,8 +174,7 @@ class OpenTelemetrySdkTest {
|
||||||
OpenTelemetrySdk.builder()
|
OpenTelemetrySdk.builder()
|
||||||
.setTracerProvider(
|
.setTracerProvider(
|
||||||
SdkTracerProvider.builder()
|
SdkTracerProvider.builder()
|
||||||
// TODO: Add support to configure SpanProcessor the builder.
|
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
|
||||||
// .addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
|
|
||||||
.build())
|
.build())
|
||||||
.setPropagators(ContextPropagators.create(mock(TextMapPropagator.class)))
|
.setPropagators(ContextPropagators.create(mock(TextMapPropagator.class)))
|
||||||
.build();
|
.build();
|
||||||
|
|
@ -189,8 +187,7 @@ class OpenTelemetrySdkTest {
|
||||||
OpenTelemetrySdk.builder()
|
OpenTelemetrySdk.builder()
|
||||||
.setTracerProvider(
|
.setTracerProvider(
|
||||||
SdkTracerProvider.builder()
|
SdkTracerProvider.builder()
|
||||||
// TODO: Add support to configure SpanProcessor the builder.
|
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
|
||||||
// .addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
|
|
||||||
.setTraceConfig(
|
.setTraceConfig(
|
||||||
TraceConfig.getDefault().toBuilder().setSampler(mock(Sampler.class)).build())
|
TraceConfig.getDefault().toBuilder().setSampler(mock(Sampler.class)).build())
|
||||||
.build())
|
.build())
|
||||||
|
|
@ -200,8 +197,7 @@ class OpenTelemetrySdkTest {
|
||||||
OpenTelemetrySdk.builder()
|
OpenTelemetrySdk.builder()
|
||||||
.setTracerProvider(
|
.setTracerProvider(
|
||||||
SdkTracerProvider.builder()
|
SdkTracerProvider.builder()
|
||||||
// TODO: Add support to configure SpanProcessor the builder.
|
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
|
||||||
// .addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
|
|
||||||
.setTraceConfig(
|
.setTraceConfig(
|
||||||
TraceConfig.getDefault().toBuilder().setSampler(mock(Sampler.class)).build())
|
TraceConfig.getDefault().toBuilder().setSampler(mock(Sampler.class)).build())
|
||||||
.setIdGenerator(mock(IdGenerator.class))
|
.setIdGenerator(mock(IdGenerator.class))
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ final class TracerSharedState {
|
||||||
private volatile boolean isStopped = false;
|
private volatile boolean isStopped = false;
|
||||||
|
|
||||||
@GuardedBy("lock")
|
@GuardedBy("lock")
|
||||||
private final List<SpanProcessor> registeredSpanProcessors = new ArrayList<>();
|
private final List<SpanProcessor> registeredSpanProcessors;
|
||||||
|
|
||||||
TracerSharedState(
|
TracerSharedState(
|
||||||
Clock clock,
|
Clock clock,
|
||||||
|
|
@ -39,7 +39,8 @@ final class TracerSharedState {
|
||||||
this.idGenerator = idGenerator;
|
this.idGenerator = idGenerator;
|
||||||
this.resource = resource;
|
this.resource = resource;
|
||||||
this.activeTraceConfig = traceConfig;
|
this.activeTraceConfig = traceConfig;
|
||||||
spanProcessors.forEach(this::addSpanProcessor);
|
this.registeredSpanProcessors = new ArrayList<>(spanProcessors);
|
||||||
|
activeSpanProcessor = SpanProcessor.composite(registeredSpanProcessors);
|
||||||
}
|
}
|
||||||
|
|
||||||
Clock getClock() {
|
Clock getClock() {
|
||||||
|
|
|
||||||
|
|
@ -58,14 +58,16 @@ class SdkSpanBuilderTest {
|
||||||
TraceState.getDefault());
|
TraceState.getDefault());
|
||||||
private final SpanProcessor mockedSpanProcessor = Mockito.mock(SpanProcessor.class);
|
private final SpanProcessor mockedSpanProcessor = Mockito.mock(SpanProcessor.class);
|
||||||
|
|
||||||
private final SdkTracerProvider tracerSdkFactory = SdkTracerProvider.builder().build();
|
private SdkTracerProvider tracerSdkFactory;
|
||||||
private final SdkTracer sdkTracer = (SdkTracer) tracerSdkFactory.get("SpanBuilderSdkTest");
|
private SdkTracer sdkTracer;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
tracerSdkFactory = SdkTracerProvider.builder().addSpanProcessor(mockedSpanProcessor).build();
|
||||||
|
sdkTracer = (SdkTracer) tracerSdkFactory.get("SpanBuilderSdkTest");
|
||||||
|
|
||||||
Mockito.when(mockedSpanProcessor.isStartRequired()).thenReturn(true);
|
Mockito.when(mockedSpanProcessor.isStartRequired()).thenReturn(true);
|
||||||
Mockito.when(mockedSpanProcessor.isEndRequired()).thenReturn(true);
|
Mockito.when(mockedSpanProcessor.isEndRequired()).thenReturn(true);
|
||||||
tracerSdkFactory.addSpanProcessor(mockedSpanProcessor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -32,13 +32,13 @@ import org.mockito.quality.Strictness;
|
||||||
@MockitoSettings(strictness = Strictness.LENIENT)
|
@MockitoSettings(strictness = Strictness.LENIENT)
|
||||||
class SdkTracerProviderTest {
|
class SdkTracerProviderTest {
|
||||||
@Mock private SpanProcessor spanProcessor;
|
@Mock private SpanProcessor spanProcessor;
|
||||||
private final SdkTracerProvider tracerFactory = SdkTracerProvider.builder().build();
|
private SdkTracerProvider tracerFactory;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() {
|
void setUp() {
|
||||||
|
tracerFactory = SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build();
|
||||||
when(spanProcessor.forceFlush()).thenReturn(CompletableResultCode.ofSuccess());
|
when(spanProcessor.forceFlush()).thenReturn(CompletableResultCode.ofSuccess());
|
||||||
when(spanProcessor.shutdown()).thenReturn(CompletableResultCode.ofSuccess());
|
when(spanProcessor.shutdown()).thenReturn(CompletableResultCode.ofSuccess());
|
||||||
tracerFactory.addSpanProcessor(spanProcessor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -63,8 +63,8 @@ class SdkTracerTest {
|
||||||
@Test
|
@Test
|
||||||
void stressTest() {
|
void stressTest() {
|
||||||
CountingSpanProcessor spanProcessor = new CountingSpanProcessor();
|
CountingSpanProcessor spanProcessor = new CountingSpanProcessor();
|
||||||
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().build();
|
SdkTracerProvider sdkTracerProvider =
|
||||||
sdkTracerProvider.addSpanProcessor(spanProcessor);
|
SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build();
|
||||||
SdkTracer tracer =
|
SdkTracer tracer =
|
||||||
(SdkTracer)
|
(SdkTracer)
|
||||||
sdkTracerProvider.get(INSTRUMENTATION_LIBRARY_NAME, INSTRUMENTATION_LIBRARY_VERSION);
|
sdkTracerProvider.get(INSTRUMENTATION_LIBRARY_NAME, INSTRUMENTATION_LIBRARY_VERSION);
|
||||||
|
|
@ -86,8 +86,8 @@ class SdkTracerTest {
|
||||||
void stressTest_withBatchSpanProcessor() {
|
void stressTest_withBatchSpanProcessor() {
|
||||||
CountingSpanExporter countingSpanExporter = new CountingSpanExporter();
|
CountingSpanExporter countingSpanExporter = new CountingSpanExporter();
|
||||||
SpanProcessor spanProcessor = BatchSpanProcessor.builder(countingSpanExporter).build();
|
SpanProcessor spanProcessor = BatchSpanProcessor.builder(countingSpanExporter).build();
|
||||||
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().build();
|
SdkTracerProvider sdkTracerProvider =
|
||||||
sdkTracerProvider.addSpanProcessor(spanProcessor);
|
SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build();
|
||||||
SdkTracer tracer =
|
SdkTracer tracer =
|
||||||
(SdkTracer)
|
(SdkTracer)
|
||||||
sdkTracerProvider.get(INSTRUMENTATION_LIBRARY_NAME, INSTRUMENTATION_LIBRARY_VERSION);
|
sdkTracerProvider.get(INSTRUMENTATION_LIBRARY_NAME, INSTRUMENTATION_LIBRARY_VERSION);
|
||||||
|
|
|
||||||
|
|
@ -42,14 +42,15 @@ class BatchSpanProcessorTest {
|
||||||
private static final String SPAN_NAME_1 = "MySpanName/1";
|
private static final String SPAN_NAME_1 = "MySpanName/1";
|
||||||
private static final String SPAN_NAME_2 = "MySpanName/2";
|
private static final String SPAN_NAME_2 = "MySpanName/2";
|
||||||
private static final long MAX_SCHEDULE_DELAY_MILLIS = 500;
|
private static final long MAX_SCHEDULE_DELAY_MILLIS = 500;
|
||||||
private final SdkTracerProvider tracerSdkFactory = SdkTracerProvider.builder().build();
|
private SdkTracerProvider sdkTracerProvider;
|
||||||
private final Tracer tracer = tracerSdkFactory.get("BatchSpanProcessorTest");
|
|
||||||
private final BlockingSpanExporter blockingSpanExporter = new BlockingSpanExporter();
|
private final BlockingSpanExporter blockingSpanExporter = new BlockingSpanExporter();
|
||||||
@Mock private SpanExporter mockServiceHandler;
|
@Mock private SpanExporter mockServiceHandler;
|
||||||
|
|
||||||
@AfterEach
|
@AfterEach
|
||||||
void cleanup() {
|
void cleanup() {
|
||||||
tracerSdkFactory.shutdown();
|
if (sdkTracerProvider != null) {
|
||||||
|
sdkTracerProvider.shutdown();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(bdrutu): Fix this when Sampler return RECORD_ONLY option.
|
// TODO(bdrutu): Fix this when Sampler return RECORD_ONLY option.
|
||||||
|
|
@ -63,15 +64,17 @@ class BatchSpanProcessorTest {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private ReadableSpan createSampledEndedSpan(String spanName) {
|
private ReadableSpan createSampledEndedSpan(String spanName) {
|
||||||
|
Tracer tracer = sdkTracerProvider.get(getClass().getName());
|
||||||
Span span =
|
Span span =
|
||||||
TestUtils.startSpanWithSampler(tracerSdkFactory, tracer, spanName, Sampler.alwaysOn())
|
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, spanName, Sampler.alwaysOn())
|
||||||
.startSpan();
|
.startSpan();
|
||||||
span.end();
|
span.end();
|
||||||
return (ReadableSpan) span;
|
return (ReadableSpan) span;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createNotSampledEndedSpan(String spanName) {
|
private void createNotSampledEndedSpan(String spanName) {
|
||||||
TestUtils.startSpanWithSampler(tracerSdkFactory, tracer, spanName, Sampler.alwaysOff())
|
Tracer tracer = sdkTracerProvider.get(getClass().getName());
|
||||||
|
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, spanName, Sampler.alwaysOff())
|
||||||
.startSpan()
|
.startSpan()
|
||||||
.end();
|
.end();
|
||||||
}
|
}
|
||||||
|
|
@ -124,10 +127,13 @@ class BatchSpanProcessorTest {
|
||||||
void exportDifferentSampledSpans() {
|
void exportDifferentSampledSpans() {
|
||||||
WaitingSpanExporter waitingSpanExporter =
|
WaitingSpanExporter waitingSpanExporter =
|
||||||
new WaitingSpanExporter(2, CompletableResultCode.ofSuccess());
|
new WaitingSpanExporter(2, CompletableResultCode.ofSuccess());
|
||||||
tracerSdkFactory.addSpanProcessor(
|
sdkTracerProvider =
|
||||||
|
SdkTracerProvider.builder()
|
||||||
|
.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(waitingSpanExporter)
|
BatchSpanProcessor.builder(waitingSpanExporter)
|
||||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||||
.build());
|
.build())
|
||||||
|
.build();
|
||||||
|
|
||||||
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
||||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
||||||
|
|
@ -138,15 +144,17 @@ class BatchSpanProcessorTest {
|
||||||
@Test
|
@Test
|
||||||
void exportMoreSpansThanTheBufferSize() {
|
void exportMoreSpansThanTheBufferSize() {
|
||||||
CompletableSpanExporter spanExporter = new CompletableSpanExporter();
|
CompletableSpanExporter spanExporter = new CompletableSpanExporter();
|
||||||
BatchSpanProcessor batchSpanProcessor =
|
|
||||||
|
sdkTracerProvider =
|
||||||
|
SdkTracerProvider.builder()
|
||||||
|
.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(spanExporter)
|
BatchSpanProcessor.builder(spanExporter)
|
||||||
.setMaxQueueSize(6)
|
.setMaxQueueSize(6)
|
||||||
.setMaxExportBatchSize(2)
|
.setMaxExportBatchSize(2)
|
||||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
|
|
||||||
|
|
||||||
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
||||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_1);
|
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_1);
|
||||||
ReadableSpan span3 = createSampledEndedSpan(SPAN_NAME_1);
|
ReadableSpan span3 = createSampledEndedSpan(SPAN_NAME_1);
|
||||||
|
|
@ -182,7 +190,7 @@ class BatchSpanProcessorTest {
|
||||||
.setScheduleDelayMillis(10_000) // 10s
|
.setScheduleDelayMillis(10_000) // 10s
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
|
sdkTracerProvider = SdkTracerProvider.builder().addSpanProcessor(batchSpanProcessor).build();
|
||||||
for (int i = 0; i < 100; i++) {
|
for (int i = 0; i < 100; i++) {
|
||||||
createSampledEndedSpan("notExported");
|
createSampledEndedSpan("notExported");
|
||||||
}
|
}
|
||||||
|
|
@ -202,11 +210,15 @@ class BatchSpanProcessorTest {
|
||||||
new WaitingSpanExporter(2, CompletableResultCode.ofSuccess());
|
new WaitingSpanExporter(2, CompletableResultCode.ofSuccess());
|
||||||
WaitingSpanExporter waitingSpanExporter2 =
|
WaitingSpanExporter waitingSpanExporter2 =
|
||||||
new WaitingSpanExporter(2, CompletableResultCode.ofSuccess());
|
new WaitingSpanExporter(2, CompletableResultCode.ofSuccess());
|
||||||
tracerSdkFactory.addSpanProcessor(
|
sdkTracerProvider =
|
||||||
|
SdkTracerProvider.builder()
|
||||||
|
.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(
|
BatchSpanProcessor.builder(
|
||||||
SpanExporter.composite(Arrays.asList(waitingSpanExporter, waitingSpanExporter2)))
|
SpanExporter.composite(
|
||||||
|
Arrays.asList(waitingSpanExporter, waitingSpanExporter2)))
|
||||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||||
.build());
|
.build())
|
||||||
|
.build();
|
||||||
|
|
||||||
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
||||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
||||||
|
|
@ -221,14 +233,17 @@ class BatchSpanProcessorTest {
|
||||||
final int maxQueuedSpans = 8;
|
final int maxQueuedSpans = 8;
|
||||||
WaitingSpanExporter waitingSpanExporter =
|
WaitingSpanExporter waitingSpanExporter =
|
||||||
new WaitingSpanExporter(maxQueuedSpans, CompletableResultCode.ofSuccess());
|
new WaitingSpanExporter(maxQueuedSpans, CompletableResultCode.ofSuccess());
|
||||||
BatchSpanProcessor batchSpanProcessor =
|
sdkTracerProvider =
|
||||||
|
SdkTracerProvider.builder()
|
||||||
|
.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(
|
BatchSpanProcessor.builder(
|
||||||
SpanExporter.composite(Arrays.asList(blockingSpanExporter, waitingSpanExporter)))
|
SpanExporter.composite(
|
||||||
|
Arrays.asList(blockingSpanExporter, waitingSpanExporter)))
|
||||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||||
.setMaxQueueSize(maxQueuedSpans)
|
.setMaxQueueSize(maxQueuedSpans)
|
||||||
.setMaxExportBatchSize(maxQueuedSpans / 2)
|
.setMaxExportBatchSize(maxQueuedSpans / 2)
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
|
|
||||||
|
|
||||||
List<SpanData> spansToExport = new ArrayList<>(maxQueuedSpans + 1);
|
List<SpanData> spansToExport = new ArrayList<>(maxQueuedSpans + 1);
|
||||||
// Wait to block the worker thread in the BatchSampledSpansProcessor. This ensures that no items
|
// Wait to block the worker thread in the BatchSampledSpansProcessor. This ensures that no items
|
||||||
|
|
@ -286,11 +301,15 @@ class BatchSpanProcessorTest {
|
||||||
doThrow(new IllegalArgumentException("No export for you."))
|
doThrow(new IllegalArgumentException("No export for you."))
|
||||||
.when(mockServiceHandler)
|
.when(mockServiceHandler)
|
||||||
.export(ArgumentMatchers.anyList());
|
.export(ArgumentMatchers.anyList());
|
||||||
tracerSdkFactory.addSpanProcessor(
|
sdkTracerProvider =
|
||||||
|
SdkTracerProvider.builder()
|
||||||
|
.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(
|
BatchSpanProcessor.builder(
|
||||||
SpanExporter.composite(Arrays.asList(mockServiceHandler, waitingSpanExporter)))
|
SpanExporter.composite(
|
||||||
|
Arrays.asList(mockServiceHandler, waitingSpanExporter)))
|
||||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||||
.build());
|
.build())
|
||||||
|
.build();
|
||||||
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
||||||
List<SpanData> exported = waitingSpanExporter.waitForExport();
|
List<SpanData> exported = waitingSpanExporter.waitForExport();
|
||||||
assertThat(exported).containsExactly(span1.toSpanData());
|
assertThat(exported).containsExactly(span1.toSpanData());
|
||||||
|
|
@ -332,15 +351,16 @@ class BatchSpanProcessorTest {
|
||||||
};
|
};
|
||||||
|
|
||||||
int exporterTimeoutMillis = 100;
|
int exporterTimeoutMillis = 100;
|
||||||
BatchSpanProcessor batchSpanProcessor =
|
sdkTracerProvider =
|
||||||
|
SdkTracerProvider.builder()
|
||||||
|
.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(waitingSpanExporter)
|
BatchSpanProcessor.builder(waitingSpanExporter)
|
||||||
.setExporterTimeoutMillis(exporterTimeoutMillis)
|
.setExporterTimeoutMillis(exporterTimeoutMillis)
|
||||||
.setScheduleDelayMillis(1)
|
.setScheduleDelayMillis(1)
|
||||||
.setMaxQueueSize(1)
|
.setMaxQueueSize(1)
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
|
|
||||||
|
|
||||||
ReadableSpan span = createSampledEndedSpan(SPAN_NAME_1);
|
ReadableSpan span = createSampledEndedSpan(SPAN_NAME_1);
|
||||||
List<SpanData> exported = waitingSpanExporter.waitForExport();
|
List<SpanData> exported = waitingSpanExporter.waitForExport();
|
||||||
assertThat(exported).containsExactly(span.toSpanData());
|
assertThat(exported).containsExactly(span.toSpanData());
|
||||||
|
|
@ -354,11 +374,13 @@ class BatchSpanProcessorTest {
|
||||||
void exportNotSampledSpans() {
|
void exportNotSampledSpans() {
|
||||||
WaitingSpanExporter waitingSpanExporter =
|
WaitingSpanExporter waitingSpanExporter =
|
||||||
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
|
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
|
||||||
BatchSpanProcessor batchSpanProcessor =
|
sdkTracerProvider =
|
||||||
|
SdkTracerProvider.builder()
|
||||||
|
.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(waitingSpanExporter)
|
BatchSpanProcessor.builder(waitingSpanExporter)
|
||||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
|
|
||||||
|
|
||||||
createNotSampledEndedSpan(SPAN_NAME_1);
|
createNotSampledEndedSpan(SPAN_NAME_1);
|
||||||
createNotSampledEndedSpan(SPAN_NAME_2);
|
createNotSampledEndedSpan(SPAN_NAME_2);
|
||||||
|
|
@ -377,7 +399,7 @@ class BatchSpanProcessorTest {
|
||||||
void exportNotSampledSpans_recordingEvents() {
|
void exportNotSampledSpans_recordingEvents() {
|
||||||
// TODO(bdrutu): Fix this when Sampler return RECORD_ONLY option.
|
// TODO(bdrutu): Fix this when Sampler return RECORD_ONLY option.
|
||||||
/*
|
/*
|
||||||
tracerSdkFactory.addSpanProcessor(
|
sdkTracerProvider.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(waitingSpanExporter)
|
BatchSpanProcessor.builder(waitingSpanExporter)
|
||||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||||
.reportOnlySampled(false)
|
.reportOnlySampled(false)
|
||||||
|
|
@ -393,7 +415,7 @@ class BatchSpanProcessorTest {
|
||||||
void exportNotSampledSpans_reportOnlySampled() {
|
void exportNotSampledSpans_reportOnlySampled() {
|
||||||
// TODO(bdrutu): Fix this when Sampler return RECORD_ONLY option.
|
// TODO(bdrutu): Fix this when Sampler return RECORD_ONLY option.
|
||||||
/*
|
/*
|
||||||
tracerSdkFactory.addSpanProcessor(
|
sdkTracerProvider.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(waitingSpanExporter)
|
BatchSpanProcessor.builder(waitingSpanExporter)
|
||||||
.reportOnlySampled(true)
|
.reportOnlySampled(true)
|
||||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||||
|
|
@ -413,13 +435,18 @@ class BatchSpanProcessorTest {
|
||||||
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
|
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
|
||||||
// Set the export delay to large value, in order to confirm the #flush() below works
|
// Set the export delay to large value, in order to confirm the #flush() below works
|
||||||
|
|
||||||
tracerSdkFactory.addSpanProcessor(
|
sdkTracerProvider =
|
||||||
BatchSpanProcessor.builder(waitingSpanExporter).setScheduleDelayMillis(10_000).build());
|
SdkTracerProvider.builder()
|
||||||
|
.addSpanProcessor(
|
||||||
|
BatchSpanProcessor.builder(waitingSpanExporter)
|
||||||
|
.setScheduleDelayMillis(10_000)
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
|
||||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
||||||
|
|
||||||
// Force a shutdown, which forces processing of all remaining spans.
|
// Force a shutdown, which forces processing of all remaining spans.
|
||||||
tracerSdkFactory.shutdown();
|
sdkTracerProvider.shutdown();
|
||||||
|
|
||||||
List<SpanData> exported = waitingSpanExporter.getExported();
|
List<SpanData> exported = waitingSpanExporter.getExported();
|
||||||
assertThat(exported).containsExactly(span2.toSpanData());
|
assertThat(exported).containsExactly(span2.toSpanData());
|
||||||
|
|
|
||||||
|
|
@ -47,8 +47,6 @@ class SimpleSpanProcessorTest {
|
||||||
@Mock private ReadableSpan readableSpan;
|
@Mock private ReadableSpan readableSpan;
|
||||||
@Mock private ReadWriteSpan readWriteSpan;
|
@Mock private ReadWriteSpan readWriteSpan;
|
||||||
@Mock private SpanExporter spanExporter;
|
@Mock private SpanExporter spanExporter;
|
||||||
private final SdkTracerProvider tracerSdkFactory = SdkTracerProvider.builder().build();
|
|
||||||
private final Tracer tracer = tracerSdkFactory.get("SimpleSpanProcessor");
|
|
||||||
private static final SpanContext SAMPLED_SPAN_CONTEXT =
|
private static final SpanContext SAMPLED_SPAN_CONTEXT =
|
||||||
SpanContext.create(
|
SpanContext.create(
|
||||||
TraceId.getInvalid(),
|
TraceId.getInvalid(),
|
||||||
|
|
@ -129,16 +127,20 @@ class SimpleSpanProcessorTest {
|
||||||
void tracerSdk_NotSampled_Span() {
|
void tracerSdk_NotSampled_Span() {
|
||||||
WaitingSpanExporter waitingSpanExporter =
|
WaitingSpanExporter waitingSpanExporter =
|
||||||
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
|
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
|
||||||
|
SdkTracerProvider sdkTracerProvider =
|
||||||
tracerSdkFactory.addSpanProcessor(
|
SdkTracerProvider.builder()
|
||||||
|
.addSpanProcessor(
|
||||||
BatchSpanProcessor.builder(waitingSpanExporter)
|
BatchSpanProcessor.builder(waitingSpanExporter)
|
||||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||||
.build());
|
.build())
|
||||||
|
.build();
|
||||||
|
|
||||||
TestUtils.startSpanWithSampler(tracerSdkFactory, tracer, SPAN_NAME, Sampler.alwaysOff())
|
try {
|
||||||
|
Tracer tracer = sdkTracerProvider.get(getClass().getName());
|
||||||
|
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, SPAN_NAME, Sampler.alwaysOff())
|
||||||
.startSpan()
|
.startSpan()
|
||||||
.end();
|
.end();
|
||||||
TestUtils.startSpanWithSampler(tracerSdkFactory, tracer, SPAN_NAME, Sampler.alwaysOff())
|
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, SPAN_NAME, Sampler.alwaysOff())
|
||||||
.startSpan()
|
.startSpan()
|
||||||
.end();
|
.end();
|
||||||
|
|
||||||
|
|
@ -153,6 +155,9 @@ class SimpleSpanProcessorTest {
|
||||||
// Need to check this because otherwise the variable span1 is unused, other option is to not
|
// Need to check this because otherwise the variable span1 is unused, other option is to not
|
||||||
// have a span1 variable.
|
// have a span1 variable.
|
||||||
assertThat(exported).containsExactly(((ReadableSpan) span).toSpanData());
|
assertThat(exported).containsExactly(((ReadableSpan) span).toSpanData());
|
||||||
|
} finally {
|
||||||
|
sdkTracerProvider.shutdown();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue