Skip to content

Commit 88ce1b2

Browse files
committed
Spec compliance: OTEL_PROPAGATORS should still work when OTEL_SDK_DISABLED=false
1 parent 045c3e6 commit 88ce1b2

File tree

2 files changed

+47
-12
lines changed

2 files changed

+47
-12
lines changed

sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,13 @@ public AutoConfiguredOpenTelemetrySdk build() {
443443
List<Closeable> closeables = new ArrayList<>();
444444

445445
try {
446-
OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder().build();
446+
OpenTelemetrySdkBuilder sdkBuilder = OpenTelemetrySdk.builder();
447+
448+
// The propagation system is part of the API and functions in the absence of an SDK.
449+
ContextPropagators propagators =
450+
PropagatorConfiguration.configurePropagators(config, spiHelper, propagatorCustomizer);
451+
sdkBuilder.setPropagators(propagators);
452+
447453
boolean sdkEnabled = !config.getBoolean("otel.sdk.disabled", false);
448454

449455
if (sdkEnabled) {
@@ -489,19 +495,14 @@ public AutoConfiguredOpenTelemetrySdk build() {
489495
SdkLoggerProvider loggerProvider = loggerProviderBuilder.build();
490496
closeables.add(loggerProvider);
491497

492-
ContextPropagators propagators =
493-
PropagatorConfiguration.configurePropagators(config, spiHelper, propagatorCustomizer);
494-
495-
OpenTelemetrySdkBuilder sdkBuilder =
496-
OpenTelemetrySdk.builder()
497-
.setTracerProvider(tracerProvider)
498-
.setLoggerProvider(loggerProvider)
499-
.setMeterProvider(meterProvider)
500-
.setPropagators(propagators);
501-
502-
openTelemetrySdk = sdkBuilder.build();
498+
sdkBuilder
499+
.setTracerProvider(tracerProvider)
500+
.setLoggerProvider(loggerProvider)
501+
.setMeterProvider(meterProvider);
503502
}
504503

504+
OpenTelemetrySdk openTelemetrySdk = sdkBuilder.build();
505+
505506
maybeRegisterShutdownHook(openTelemetrySdk);
506507
maybeSetAsGlobal(openTelemetrySdk);
507508
callAutoConfigureListeners(spiHelper, openTelemetrySdk);

sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import java.util.Properties;
6868
import java.util.concurrent.TimeUnit;
6969
import java.util.function.BiFunction;
70+
import java.util.function.Consumer;
7071
import java.util.function.Supplier;
7172
import org.junit.jupiter.api.BeforeEach;
7273
import org.junit.jupiter.api.Test;
@@ -455,6 +456,39 @@ void disableSdk() {
455456
verify(logCustomizer, never()).apply(any(), any());
456457
}
457458

459+
@Test
460+
void disableSdk_PropagatorCustomizer() {
461+
Context extracted = Context.root().with(ContextKey.named("animal"), "bear");
462+
463+
when(propagator2.extract(any(), any(), any())).thenReturn(extracted);
464+
465+
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
466+
AutoConfiguredOpenTelemetrySdk.builder()
467+
.addPropertiesSupplier(() -> singletonMap("otel.sdk.disabled", "true"))
468+
.addPropertiesSupplier(() -> singletonMap("otel.propagators", "tracecontext"))
469+
.addPropagatorCustomizer(
470+
(previous, config) -> {
471+
assertThat(previous).isSameAs(W3CTraceContextPropagator.getInstance());
472+
return propagator1;
473+
})
474+
.addPropagatorCustomizer(
475+
(previous, config) -> {
476+
assertThat(previous).isSameAs(propagator1);
477+
return propagator2;
478+
})
479+
.build();
480+
481+
// When the SDK is disabled, propagators are still configured
482+
assertThat(autoConfiguredSdk.getOpenTelemetrySdk().getPropagators()).isNotNull();
483+
Consumer<TextMapPropagator> propagatorConsumer =
484+
propagator -> {
485+
assertThat(propagator.extract(Context.root(), Collections.emptyMap(), getter))
486+
.isEqualTo(extracted);
487+
};
488+
assertThat(autoConfiguredSdk.getOpenTelemetrySdk().getPropagators().getTextMapPropagator())
489+
.isInstanceOfSatisfying(TextMapPropagator.class, propagatorConsumer);
490+
}
491+
458492
@Test
459493
void tracerProviderCustomizer() {
460494
InMemorySpanExporter spanExporter = InMemorySpanExporter.create();

0 commit comments

Comments
 (0)