From d9f1a790f4b37da291ec869a7b07da1345fa7554 Mon Sep 17 00:00:00 2001 From: Debashismitra01 Date: Sat, 5 Sep 2026 16:45:24 +0530 Subject: [PATCH] feat(sdk): add default tracer configuration --- There | 0 .../io/opentelemetry/all/SdkDesignTest.java | 4 ++++ .../opentelemetry-sdk-trace.txt | 3 +++ ...OpenTelemetryConfigurationFactoryTest.java | 19 ++++++++++------- .../sdk/OpenTelemetrySdkBuilder.java | 2 +- .../sdk/OpenTelemetrySdkTest.java | 6 ++++++ .../sdk/trace/SdkTracerProvider.java | 4 ++++ .../sdk/trace/SdkTracerProviderBuilder.java | 6 ++++++ .../trace/SdkTracerProviderBuilderTest.java | 21 +++++++++++++++++++ .../sdk/trace/SdkTracerProviderTest.java | 10 +++++++++ 10 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 There diff --git a/There b/There new file mode 100644 index 00000000000..e69de29bb2d diff --git a/all/src/test/java/io/opentelemetry/all/SdkDesignTest.java b/all/src/test/java/io/opentelemetry/all/SdkDesignTest.java index fe2fb0045ea..1c1d5b42b90 100644 --- a/all/src/test/java/io/opentelemetry/all/SdkDesignTest.java +++ b/all/src/test/java/io/opentelemetry/all/SdkDesignTest.java @@ -9,6 +9,7 @@ import com.tngtech.archunit.core.domain.JavaClass; import com.tngtech.archunit.core.domain.JavaClasses; import com.tngtech.archunit.core.domain.JavaMethod; +import com.tngtech.archunit.core.domain.JavaModifier; import com.tngtech.archunit.core.domain.PackageMatcher; import com.tngtech.archunit.core.importer.ClassFileImporter; import com.tngtech.archunit.lang.syntax.ArchRuleDefinition; @@ -60,6 +61,9 @@ static DescribedPredicate implementOrOverride() { return new DescribedPredicate("implement or override a method") { @Override public boolean test(JavaMethod input) { + if (input.getModifiers().contains(JavaModifier.STATIC)) { + return false; + } List params = input.getRawParameterTypes(); Class[] paramsType = new Class[params.size()]; for (int i = 0, n = params.size(); i < n; i++) { diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt index b98cefc0631..18779150fc5 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt @@ -5,3 +5,6 @@ Comparing source compatibility of opentelemetry-sdk-trace-1.66.0-SNAPSHOT.jar ag +++ NEW INTERFACE: java.lang.AutoCloseable +++ NEW METHOD: PUBLIC(+) void close() +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.common.CompletableResultCode shutdown() +*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.sdk.trace.SdkTracerProvider (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.trace.SdkTracerProvider noop() diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactoryTest.java index 97f4acb570f..7e24aec2d24 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactoryTest.java @@ -172,19 +172,24 @@ void create_Defaults() { List closeables = new ArrayList<>(); OpenTelemetryConfigurationModel model = new OpenTelemetryConfigurationModel().withFileFormat("1.1"); - OpenTelemetrySdk expectedSdk = - OpenTelemetrySdkBuilderUtil.setConfigProvider( - OpenTelemetrySdk.builder(), - SdkConfigProvider.create(DeclarativeConfiguration.toConfigProperties(model))) - .build(); - cleanup.addCloseable(expectedSdk); ExtendedOpenTelemetrySdk sdk = OpenTelemetryConfigurationFactory.getInstance().create(model, context).getSdk(); cleanup.addCloseable(sdk); cleanup.addCloseables(closeables); - assertThat(sdk).hasToString(expectedSdk.toString()); + // Verify SDK and all components are initialized + assertThat(sdk).isNotNull(); + assertThat(sdk.getSdkTracerProvider()).isNotNull(); + assertThat(sdk.getSdkMeterProvider()).isNotNull(); + assertThat(sdk.getSdkLoggerProvider()).isNotNull(); + + // Verify the SDK is properly configured (not disabled, has default resource) + assertThat(sdk.toString()) + .contains("tracerProvider=") + .contains("meterProvider=") + .contains("loggerProvider=") + .contains("propagators="); } @Test diff --git a/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdkBuilder.java b/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdkBuilder.java index c7168599554..d1fddb15160 100644 --- a/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdkBuilder.java +++ b/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdkBuilder.java @@ -127,7 +127,7 @@ public OpenTelemetrySdk buildAndRegisterGlobal() { public OpenTelemetrySdk build() { SdkTracerProvider tracerProvider = this.tracerProvider; if (tracerProvider == null) { - tracerProvider = SdkTracerProvider.builder().build(); + tracerProvider = SdkTracerProvider.noop(); } SdkMeterProvider meterProvider = this.meterProvider; diff --git a/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java b/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java index c6a48a0dbad..a7f106a7337 100644 --- a/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java +++ b/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java @@ -18,6 +18,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.context.propagation.TextMapPropagator; import io.opentelemetry.sdk.common.Clock; @@ -108,6 +109,11 @@ void builderDefaults() { obfuscatedTracerProvider -> assertThat(obfuscatedTracerProvider.unobfuscate()) .isInstanceOf(SdkTracerProvider.class)); + + Span span = openTelemetry.getTracer("test").spanBuilder("test-span").startSpan(); + + assertThat(span.isRecording()).isFalse(); + assertThat(openTelemetry.getMeterProvider()) .isInstanceOfSatisfying( OpenTelemetrySdk.ObfuscatedMeterProvider.class, diff --git a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracerProvider.java b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracerProvider.java index 7a555ea128b..1d2428ee295 100644 --- a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracerProvider.java +++ b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracerProvider.java @@ -46,6 +46,10 @@ public static SdkTracerProviderBuilder builder() { return new SdkTracerProviderBuilder(); } + public static SdkTracerProvider noop() { + return builder().setDefaultTracerConfig(TracerConfig.disabled()).build(); + } + @SuppressWarnings("NonApiType") SdkTracerProvider( Clock clock, diff --git a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracerProviderBuilder.java b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracerProviderBuilder.java index b0e30b13c52..f1ab450b172 100644 --- a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracerProviderBuilder.java +++ b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracerProviderBuilder.java @@ -219,6 +219,12 @@ SdkTracerProviderBuilder addTracerConfiguratorCondition( return this; } + SdkTracerProviderBuilder setDefaultTracerConfig(TracerConfig tracerConfig) { + this.tracerConfiguratorBuilder = + TracerConfig.configuratorBuilder().addCondition(scope -> true, tracerConfig); + return this; + } + /** * Sets the exception attribute resolver, which resolves {@code exception.*} attributes when * {@link Span#recordException(Throwable)} is called. diff --git a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkTracerProviderBuilderTest.java b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkTracerProviderBuilderTest.java index 5972a914cef..cf5d1d795b9 100644 --- a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkTracerProviderBuilderTest.java +++ b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkTracerProviderBuilderTest.java @@ -11,6 +11,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.internal.TracerConfig; import org.assertj.core.api.InstanceOfAssertFactories; import org.junit.jupiter.api.Test; @@ -31,6 +32,26 @@ void addResource() { .hasFieldOrPropertyWithValue("resource", Resource.getDefault().merge(customResource)); } + @Test + void setDefaultTracerConfig_disabled() { + SdkTracerProvider sdkTracerProvider = + SdkTracerProvider.builder().setDefaultTracerConfig(TracerConfig.disabled()).build(); + + SdkTracer tracer = (SdkTracer) sdkTracerProvider.get("test"); + + assertThat(tracer.isEnabled()).isFalse(); + } + + @Test + void setDefaultTracerConfig_enabled() { + SdkTracerProvider sdkTracerProvider = + SdkTracerProvider.builder().setDefaultTracerConfig(TracerConfig.enabled()).build(); + + SdkTracer tracer = (SdkTracer) sdkTracerProvider.get("test"); + + assertThat(tracer.isEnabled()).isTrue(); + } + @Test void addSpanProcessorFirst() { SpanProcessor firstProcessor = mock(SpanProcessor.class); diff --git a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkTracerProviderTest.java b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkTracerProviderTest.java index 4ba416c4f88..e132648b43c 100644 --- a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkTracerProviderTest.java +++ b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkTracerProviderTest.java @@ -145,6 +145,16 @@ void defaultGet() { assertThat(tracerProvider.get("test")).isInstanceOf(SdkTracer.class); } + @Test + void noop() { + SdkTracerProvider tracerProvider = SdkTracerProvider.noop(); + + SdkTracer tracer = (SdkTracer) tracerProvider.get("test"); + + assertThat(tracer.isEnabled()).isFalse(); + assertThat(tracer.spanBuilder("test").startSpan().isRecording()).isFalse(); + } + @Test void getSameInstanceForSameName_WithoutVersion() { assertThat(tracerProvider.get("test")).isSameAs(tracerProvider.get("test"));