diff --git a/sdk/all/src/jmh/java/io/opentelemetry/sdk/trace/SpanBenchmark.java b/sdk/all/src/jmh/java/io/opentelemetry/sdk/trace/SpanBenchmark.java
index fba41d225b..d1dfe0d6b5 100644
--- a/sdk/all/src/jmh/java/io/opentelemetry/sdk/trace/SpanBenchmark.java
+++ b/sdk/all/src/jmh/java/io/opentelemetry/sdk/trace/SpanBenchmark.java
@@ -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 =
diff --git a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/config/TraceConfig.java b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/config/TraceConfig.java
index 11474669a7..517606d38e 100644
--- a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/config/TraceConfig.java
+++ b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/config/TraceConfig.java
@@ -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.
*
- *
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.
+ *
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.
*
*
Configuration options for {@link TraceConfig} can be read from system properties, environment
* variables, or {@link java.util.Properties} objects.
diff --git a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkSpanBuilderTest.java b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkSpanBuilderTest.java
index 5cb4adf90f..b8e0954c7b 100644
--- a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkSpanBuilderTest.java
+++ b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkSpanBuilderTest.java
@@ -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 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 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 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 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 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 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();
diff --git a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/TestUtils.java b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/TestUtils.java
index 70824b7ab2..cbc2723912 100644
--- a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/TestUtils.java
+++ b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/TestUtils.java
@@ -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 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);
- }
- }
}
diff --git a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/export/BatchSpanProcessorTest.java b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/export/BatchSpanProcessorTest.java
index 4b55ed200e..dde9492070 100644
--- a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/export/BatchSpanProcessorTest.java
+++ b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/export/BatchSpanProcessorTest.java
@@ -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 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 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 exported1 = waitingSpanExporter.waitForExport();
List 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 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 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 =
+ 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();
diff --git a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/export/SimpleSpanProcessorTest.java b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/export/SimpleSpanProcessorTest.java
index abe466a618..a0d7f5366d 100644
--- a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/export/SimpleSpanProcessorTest.java
+++ b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/export/SimpleSpanProcessorTest.java
@@ -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 =
+ 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();