Remove usage of updateTraceConfig in tests. (#2402)

* Remove usage of updateTraceConfig in tests.

* Clean
This commit is contained in:
Anuraag Agrawal 2020-12-24 01:15:50 +09:00 committed by GitHub
parent bf3c50cd02
commit 9f675da85a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 158 additions and 194 deletions

View File

@ -36,12 +36,11 @@ public class SpanBenchmark {
@Setup(Level.Trial)
public final void setup() {
SdkTracerProvider tracerProvider =
SdkTracerProvider.builder().setResource(serviceResource).build();
TraceConfig alwaysOn =
tracerProvider.getActiveTraceConfig().toBuilder().setSampler(Sampler.alwaysOn()).build();
tracerProvider.updateActiveTraceConfig(alwaysOn);
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOn()).build();
SdkTracerProvider tracerProvider =
SdkTracerProvider.builder().setResource(serviceResource).setTraceConfig(alwaysOn).build();
Tracer tracerSdk = tracerProvider.get("benchmarkTracer");
sdkSpanBuilder =

View File

@ -7,18 +7,16 @@ package io.opentelemetry.sdk.trace.config;
import com.google.auto.value.AutoValue;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.sdk.trace.SdkTracerManagement;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import javax.annotation.concurrent.Immutable;
/**
* Class that holds global trace parameters.
*
* <p>Note: To update the TraceConfig associated with a {@link SdkTracerManagement}, you should use
* the {@link #toBuilder()} method on the TraceConfig currently assigned to the provider, make the
* changes desired to the {@link TraceConfigBuilder} instance, then use the {@link
* SdkTracerManagement#updateActiveTraceConfig(TraceConfig)} with the resulting TraceConfig
* instance.
* <p>Note: To allow dynamic updates of {@link TraceConfig} you should register a {@link
* java.util.function.Supplier} with {@link
* io.opentelemetry.sdk.trace.SdkTracerProviderBuilder#setTraceConfig(java.util.function.Supplier)}
* which supplies dynamic configs when queried.
*
* <p>Configuration options for {@link TraceConfig} can be read from system properties, environment
* variables, or {@link java.util.Properties} objects.

View File

@ -28,6 +28,7 @@ import io.opentelemetry.api.trace.StatusCode;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.sdk.trace.config.TraceConfig;
@ -37,7 +38,6 @@ import io.opentelemetry.sdk.trace.samplers.Sampler;
import io.opentelemetry.sdk.trace.samplers.SamplingResult;
import java.time.Instant;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
@ -58,12 +58,12 @@ class SdkSpanBuilderTest {
TraceState.getDefault());
private final SpanProcessor mockedSpanProcessor = Mockito.mock(SpanProcessor.class);
private SdkTracerProvider tracerSdkFactory;
private SdkTracer sdkTracer;
@BeforeEach
public void setUp() {
tracerSdkFactory = SdkTracerProvider.builder().addSpanProcessor(mockedSpanProcessor).build();
SdkTracerProvider tracerSdkFactory =
SdkTracerProvider.builder().addSpanProcessor(mockedSpanProcessor).build();
sdkTracer = (SdkTracer) tracerSdkFactory.get("SpanBuilderSdkTest");
Mockito.when(mockedSpanProcessor.isStartRequired()).thenReturn(true);
@ -101,12 +101,10 @@ class SdkSpanBuilderTest {
void truncateLink() {
final int maxNumberOfLinks = 8;
TraceConfig traceConfig =
tracerSdkFactory.getActiveTraceConfig().toBuilder()
.setMaxNumberOfLinks(maxNumberOfLinks)
.build();
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
TraceConfig.getDefault().toBuilder().setMaxNumberOfLinks(maxNumberOfLinks).build();
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
// Verify methods do not crash.
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
for (int i = 0; i < 2 * maxNumberOfLinks; i++) {
spanBuilder.addLink(sampledSpanContext);
}
@ -121,18 +119,16 @@ class SdkSpanBuilderTest {
}
} finally {
span.end();
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
}
}
@Test
void truncateLinkAttributes() {
TraceConfig traceConfig =
tracerSdkFactory.getActiveTraceConfig().toBuilder()
.setMaxNumberOfAttributesPerLink(1)
.build();
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
TraceConfig.getDefault().toBuilder().setMaxNumberOfAttributesPerLink(1).build();
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
// Verify methods do not crash.
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
Attributes attributes =
Attributes.of(
stringKey("key0"), "str",
@ -146,7 +142,6 @@ class SdkSpanBuilderTest {
Link.create(sampledSpanContext, Attributes.of(stringKey("key0"), "str"), 3));
} finally {
span.end();
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
}
}
@ -356,11 +351,10 @@ class SdkSpanBuilderTest {
void droppingAttributes() {
final int maxNumberOfAttrs = 8;
TraceConfig traceConfig =
tracerSdkFactory.getActiveTraceConfig().toBuilder()
.setMaxNumberOfAttributes(maxNumberOfAttrs)
.build();
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
TraceConfig.getDefault().toBuilder().setMaxNumberOfAttributes(maxNumberOfAttrs).build();
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
// Verify methods do not crash.
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
for (int i = 0; i < 2 * maxNumberOfAttrs; i++) {
spanBuilder.setAttribute("key" + i, i);
}
@ -373,18 +367,16 @@ class SdkSpanBuilderTest {
}
} finally {
span.end();
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
}
}
@Test
public void tooLargeAttributeValuesAreTruncated() {
TraceConfig traceConfig =
tracerSdkFactory.getActiveTraceConfig().toBuilder()
.setMaxLengthOfAttributeValues(10)
.build();
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
TraceConfig.getDefault().toBuilder().setMaxLengthOfAttributeValues(10).build();
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
// Verify methods do not crash.
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
spanBuilder.setAttribute("builderStringNull", null);
spanBuilder.setAttribute("builderStringSmall", "small");
spanBuilder.setAttribute("builderStringLarge", "very large string that we have to cut");
@ -422,18 +414,16 @@ class SdkSpanBuilderTest {
.isEqualTo(Arrays.asList("small", null, "very large"));
} finally {
span.end();
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
}
}
@Test
void addAttributes_OnlyViaSampler() {
TraceConfig traceConfig =
tracerSdkFactory.getActiveTraceConfig().toBuilder()
.setSampler(Sampler.traceIdRatioBased(1))
.build();
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
TraceConfig.getDefault().toBuilder().setSampler(Sampler.traceIdRatioBased(1)).build();
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
// Verify methods do not crash.
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
RecordEventsReadableSpan span = (RecordEventsReadableSpan) spanBuilder.startSpan();
try {
assertThat(span.toSpanData().getAttributes().size()).isEqualTo(1);
@ -443,7 +433,6 @@ class SdkSpanBuilderTest {
.isEqualTo(1);
} finally {
span.end();
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
}
}
@ -483,7 +472,12 @@ class SdkSpanBuilderTest {
@Test
void sampler() {
Span span =
TestUtils.startSpanWithSampler(tracerSdkFactory, sdkTracer, SPAN_NAME, Sampler.alwaysOff())
SdkTracerProvider.builder()
.setTraceConfig(
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOff()).build())
.build()
.get("test")
.spanBuilder(SPAN_NAME)
.startSpan();
try {
assertThat(span.getSpanContext().isSampled()).isFalse();
@ -498,38 +492,43 @@ class SdkSpanBuilderTest {
AttributeKey<String> samplerAttributeKey = stringKey(samplerAttributeName);
RecordEventsReadableSpan span =
(RecordEventsReadableSpan)
TestUtils.startSpanWithSampler(
tracerSdkFactory,
sdkTracer,
SPAN_NAME,
new Sampler() {
@Override
public SamplingResult shouldSample(
@Nullable Context parentContext,
String traceId,
String name,
Kind spanKind,
Attributes attributes,
List<Link> parentLinks) {
return new SamplingResult() {
@Override
public Decision getDecision() {
return Decision.RECORD_AND_SAMPLE;
}
SdkTracerProvider.builder()
.setTraceConfig(
TraceConfig.getDefault().toBuilder()
.setSampler(
new Sampler() {
@Override
public SamplingResult shouldSample(
@Nullable Context parentContext,
String traceId,
String name,
Kind spanKind,
Attributes attributes,
List<Link> parentLinks) {
return new SamplingResult() {
@Override
public Decision getDecision() {
return Decision.RECORD_AND_SAMPLE;
}
@Override
public Attributes getAttributes() {
return Attributes.of(samplerAttributeKey, "bar");
}
};
}
@Override
public Attributes getAttributes() {
return Attributes.of(samplerAttributeKey, "bar");
}
};
}
@Override
public String getDescription() {
return "test sampler";
}
},
Collections.singletonMap(samplerAttributeKey.getKey(), "none"))
@Override
public String getDescription() {
return "test sampler";
}
})
.build())
.addSpanProcessor(mockedSpanProcessor)
.build()
.get("test")
.spanBuilder(SPAN_NAME)
.setAttribute(samplerAttributeKey, "none")
.startSpan();
try {
assertThat(span.getSpanContext().isSampled()).isTrue();
@ -546,43 +545,50 @@ class SdkSpanBuilderTest {
AttributeKey<String> samplerAttributeKey = stringKey(samplerAttributeName);
RecordEventsReadableSpan span =
(RecordEventsReadableSpan)
TestUtils.startSpanWithSampler(
tracerSdkFactory,
sdkTracer,
SPAN_NAME,
new Sampler() {
@Override
public SamplingResult shouldSample(
Context parentContext,
String traceId,
String name,
Kind spanKind,
Attributes attributes,
List<Link> parentLinks) {
return new SamplingResult() {
@Override
public Decision getDecision() {
return Decision.RECORD_AND_SAMPLE;
}
SdkTracerProvider.builder()
.setTraceConfig(
TraceConfig.getDefault().toBuilder()
.setSampler(
new Sampler() {
@Override
public SamplingResult shouldSample(
Context parentContext,
String traceId,
String name,
Kind spanKind,
Attributes attributes,
List<Link> parentLinks) {
return new SamplingResult() {
@Override
public Decision getDecision() {
return Decision.RECORD_AND_SAMPLE;
}
@Override
public Attributes getAttributes() {
return Attributes.empty();
}
@Override
public Attributes getAttributes() {
return Attributes.empty();
}
@Override
public TraceState getUpdatedTraceState(TraceState parentTraceState) {
return parentTraceState.toBuilder().set("newkey", "newValue").build();
}
};
}
@Override
public TraceState getUpdatedTraceState(
TraceState parentTraceState) {
return parentTraceState.toBuilder()
.set("newkey", "newValue")
.build();
}
};
}
@Override
public String getDescription() {
return "test sampler";
}
},
Collections.singletonMap(samplerAttributeKey.getKey(), "none"))
@Override
public String getDescription() {
return "test sampler";
}
})
.build())
.build()
.get("test")
.spanBuilder(SPAN_NAME)
.setAttribute(samplerAttributeKey, "none")
.startSpan();
try {
assertThat(span.getSpanContext().isSampled()).isTrue();
@ -594,12 +600,16 @@ class SdkSpanBuilderTest {
}
}
// TODO(anuraaga): Is this test correct? It's not sampled
@Test
void sampledViaParentLinks() {
Span span =
TestUtils.startSpanWithSampler(
tracerSdkFactory, sdkTracer, SPAN_NAME, Sampler.traceIdRatioBased(0.0))
.addLink(sampledSpanContext)
SdkTracerProvider.builder()
.setTraceConfig(
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOff()).build())
.build()
.get("test")
.spanBuilder(SPAN_NAME)
.startSpan();
try {
assertThat(span.getSpanContext().isSampled()).isFalse();

View File

@ -9,17 +9,11 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.Span.Kind;
import io.opentelemetry.api.trace.SpanBuilder;
import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.sdk.testing.trace.TestSpanData;
import io.opentelemetry.sdk.trace.config.TraceConfig;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.data.SpanData.Status;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import java.util.Collections;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@ -57,41 +51,4 @@ public final class TestUtils {
.setTotalRecordedEvents(0)
.build();
}
/**
* Create a very basic SpanData instance, suitable for testing. It has the bare minimum viable
* data.
*
* @return A SpanData instance.
*/
public static SpanBuilder startSpanWithSampler(
SdkTracerManagement sdkTracerManagement, Tracer tracer, String spanName, Sampler sampler) {
return startSpanWithSampler(
sdkTracerManagement, tracer, spanName, sampler, Collections.emptyMap());
}
/**
* Create a very basic SpanData instance, suitable for testing. It has the bare minimum viable
* data.
*
* @return A SpanData instance.
*/
public static SpanBuilder startSpanWithSampler(
SdkTracerManagement sdkTracerManagement,
Tracer tracer,
String spanName,
Sampler sampler,
Map<String, String> attributes) {
TraceConfig originalConfig = sdkTracerManagement.getActiveTraceConfig();
sdkTracerManagement.updateActiveTraceConfig(
originalConfig.toBuilder().setSampler(sampler).build());
try {
SpanBuilder builder = tracer.spanBuilder(spanName);
attributes.forEach(builder::setAttribute);
return builder;
} finally {
sdkTracerManagement.updateActiveTraceConfig(originalConfig);
}
}
}

View File

@ -15,7 +15,7 @@ import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.trace.ReadableSpan;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.TestUtils;
import io.opentelemetry.sdk.trace.config.TraceConfig;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import java.util.ArrayList;
@ -26,6 +26,7 @@ import java.util.Properties;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
import javax.annotation.concurrent.GuardedBy;
import org.junit.jupiter.api.AfterEach;
@ -63,22 +64,13 @@ class BatchSpanProcessorTest {
}
*/
private ReadableSpan createSampledEndedSpan(String spanName) {
private ReadableSpan createEndedSpan(String spanName) {
Tracer tracer = sdkTracerProvider.get(getClass().getName());
Span span =
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, spanName, Sampler.alwaysOn())
.startSpan();
Span span = tracer.spanBuilder(spanName).startSpan();
span.end();
return (ReadableSpan) span;
}
private void createNotSampledEndedSpan(String spanName) {
Tracer tracer = sdkTracerProvider.get(getClass().getName());
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, spanName, Sampler.alwaysOff())
.startSpan()
.end();
}
@Test
void configTest() {
Properties options = new Properties();
@ -135,8 +127,8 @@ class BatchSpanProcessorTest {
.build())
.build();
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
ReadableSpan span1 = createEndedSpan(SPAN_NAME_1);
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
List<SpanData> exported = waitingSpanExporter.waitForExport();
assertThat(exported).containsExactly(span1.toSpanData(), span2.toSpanData());
}
@ -155,12 +147,12 @@ class BatchSpanProcessorTest {
.build())
.build();
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span3 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span4 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span5 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span6 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span1 = createEndedSpan(SPAN_NAME_1);
ReadableSpan span2 = createEndedSpan(SPAN_NAME_1);
ReadableSpan span3 = createEndedSpan(SPAN_NAME_1);
ReadableSpan span4 = createEndedSpan(SPAN_NAME_1);
ReadableSpan span5 = createEndedSpan(SPAN_NAME_1);
ReadableSpan span6 = createEndedSpan(SPAN_NAME_1);
spanExporter.succeed();
@ -192,7 +184,7 @@ class BatchSpanProcessorTest {
sdkTracerProvider = SdkTracerProvider.builder().addSpanProcessor(batchSpanProcessor).build();
for (int i = 0; i < 100; i++) {
createSampledEndedSpan("notExported");
createEndedSpan("notExported");
}
List<SpanData> exported = waitingSpanExporter.waitForExport();
assertThat(exported).isNotNull();
@ -220,8 +212,8 @@ class BatchSpanProcessorTest {
.build())
.build();
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
ReadableSpan span1 = createEndedSpan(SPAN_NAME_1);
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
List<SpanData> exported1 = waitingSpanExporter.waitForExport();
List<SpanData> exported2 = waitingSpanExporter2.waitForExport();
assertThat(exported1).containsExactly(span1.toSpanData(), span2.toSpanData());
@ -249,19 +241,19 @@ class BatchSpanProcessorTest {
// Wait to block the worker thread in the BatchSampledSpansProcessor. This ensures that no items
// can be removed from the queue. Need to add a span to trigger the export otherwise the
// pipeline is never called.
spansToExport.add(createSampledEndedSpan("blocking_span").toSpanData());
spansToExport.add(createEndedSpan("blocking_span").toSpanData());
blockingSpanExporter.waitUntilIsBlocked();
for (int i = 0; i < maxQueuedSpans; i++) {
// First export maxQueuedSpans, the worker thread is blocked so all items should be queued.
spansToExport.add(createSampledEndedSpan("span_1_" + i).toSpanData());
spansToExport.add(createEndedSpan("span_1_" + i).toSpanData());
}
// TODO: assertThat(spanExporter.getReferencedSpans()).isEqualTo(maxQueuedSpans);
// Now we should start dropping.
for (int i = 0; i < 7; i++) {
createSampledEndedSpan("span_2_" + i);
createEndedSpan("span_2_" + i);
// TODO: assertThat(getDroppedSpans()).isEqualTo(i + 1);
}
@ -284,7 +276,7 @@ class BatchSpanProcessorTest {
// TODO: assertThat(getPushedSpans()).isAtLeast((long) maxQueuedSpans - maxBatchSize);
for (int i = 0; i < maxQueuedSpans; i++) {
spansToExport.add(createSampledEndedSpan("span_3_" + i).toSpanData());
spansToExport.add(createEndedSpan("span_3_" + i).toSpanData());
// No more dropped spans.
// TODO: assertThat(getDroppedSpans()).isEqualTo(7);
}
@ -310,12 +302,12 @@ class BatchSpanProcessorTest {
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.build())
.build();
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span1 = createEndedSpan(SPAN_NAME_1);
List<SpanData> exported = waitingSpanExporter.waitForExport();
assertThat(exported).containsExactly(span1.toSpanData());
waitingSpanExporter.reset();
// Continue to export after the exception was received.
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
exported = waitingSpanExporter.waitForExport();
assertThat(exported).containsExactly(span2.toSpanData());
}
@ -361,7 +353,7 @@ class BatchSpanProcessorTest {
.build())
.build();
ReadableSpan span = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span = createEndedSpan(SPAN_NAME_1);
List<SpanData> exported = waitingSpanExporter.waitForExport();
assertThat(exported).containsExactly(span.toSpanData());
@ -374,17 +366,22 @@ class BatchSpanProcessorTest {
void exportNotSampledSpans() {
WaitingSpanExporter waitingSpanExporter =
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
AtomicReference<TraceConfig> traceConfig =
new AtomicReference<>(
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOff()).build());
sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter)
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.build())
.setTraceConfig(traceConfig::get)
.build();
createNotSampledEndedSpan(SPAN_NAME_1);
createNotSampledEndedSpan(SPAN_NAME_2);
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
sdkTracerProvider.get("test").spanBuilder(SPAN_NAME_1).startSpan().end();
sdkTracerProvider.get("test").spanBuilder(SPAN_NAME_2).startSpan().end();
traceConfig.set(traceConfig.get().toBuilder().setSampler(Sampler.alwaysOn()).build());
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
// Spans are recorded and exported in the same order as they are ended, we test that a non
// sampled span is not exported by creating and ending a sampled span after a non sampled span
// and checking that the first exported span is the sampled span (the non sampled did not get
@ -443,7 +440,7 @@ class BatchSpanProcessorTest {
.build())
.build();
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
// Force a shutdown, which forces processing of all remaining spans.
sdkTracerProvider.shutdown();

View File

@ -26,12 +26,14 @@ 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.config.TraceConfig;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessorTest.WaitingSpanExporter;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ -138,23 +140,24 @@ class SimpleSpanProcessorTest {
void tracerSdk_NotSampled_Span() {
WaitingSpanExporter waitingSpanExporter =
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
AtomicReference<TraceConfig> traceConfig =
new AtomicReference<>(
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOff()).build());
SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter)
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.build())
.setTraceConfig(traceConfig::get)
.build();
try {
Tracer tracer = sdkTracerProvider.get(getClass().getName());
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, SPAN_NAME, Sampler.alwaysOff())
.startSpan()
.end();
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, SPAN_NAME, Sampler.alwaysOff())
.startSpan()
.end();
tracer.spanBuilder(SPAN_NAME).startSpan();
tracer.spanBuilder(SPAN_NAME).startSpan();
traceConfig.set(traceConfig.get().toBuilder().setSampler(Sampler.alwaysOn()).build());
Span span = tracer.spanBuilder(SPAN_NAME).startSpan();
span.end();