From daef9c147daf836ef84c05f0d139e957c70b37bc Mon Sep 17 00:00:00 2001 From: John Watson Date: Wed, 21 Jul 2021 20:51:13 -0700 Subject: [PATCH] Provide an option to not set the autoconfigured SDK as the global. (#3419) --- .../OpenTelemetrySdkAutoConfiguration.java | 30 +++++++++++++++---- ...OpenTelemetrySdkAutoConfigurationTest.java | 12 ++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfiguration.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfiguration.java index 267837f103..549765c235 100644 --- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfiguration.java +++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfiguration.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.autoconfigure; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider; @@ -34,8 +35,11 @@ public final class OpenTelemetrySdkAutoConfiguration { /** * Returns an {@link OpenTelemetrySdk} automatically initialized through recognized system * properties and environment variables. + * + * @param setResultAsGlobal Whether to automatically set the configured SDK as the {@link + * io.opentelemetry.api.GlobalOpenTelemetry} instance. */ - public static OpenTelemetrySdk initialize() { + public static OpenTelemetrySdk initialize(boolean setResultAsGlobal) { ConfigProperties config = ConfigProperties.get(); ContextPropagators propagators = PropagatorConfiguration.configurePropagators(config); @@ -46,10 +50,26 @@ public final class OpenTelemetrySdkAutoConfiguration { SdkTracerProvider tracerProvider = TracerProviderConfiguration.configureTracerProvider(resource, config); - return OpenTelemetrySdk.builder() - .setTracerProvider(tracerProvider) - .setPropagators(propagators) - .buildAndRegisterGlobal(); + OpenTelemetrySdk openTelemetrySdk = + OpenTelemetrySdk.builder() + .setTracerProvider(tracerProvider) + .setPropagators(propagators) + .build(); + if (setResultAsGlobal) { + GlobalOpenTelemetry.set(openTelemetrySdk); + } + return openTelemetrySdk; + } + + /** + * Returns an {@link OpenTelemetrySdk} automatically initialized through recognized system + * properties and environment variables. + * + *

This will automatically set the resulting SDK as the {@link + * io.opentelemetry.api.GlobalOpenTelemetry} instance. + */ + public static OpenTelemetrySdk initialize() { + return initialize(true); } private static void configureMeterProvider(Resource resource, ConfigProperties config) { diff --git a/sdk-extensions/autoconfigure/src/testInitializeRegistersGlobal/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfigurationTest.java b/sdk-extensions/autoconfigure/src/testInitializeRegistersGlobal/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfigurationTest.java index 76b1aff997..8caea1653b 100644 --- a/sdk-extensions/autoconfigure/src/testInitializeRegistersGlobal/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testInitializeRegistersGlobal/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfigurationTest.java @@ -9,13 +9,25 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.sdk.OpenTelemetrySdk; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class OpenTelemetrySdkAutoConfigurationTest { + @BeforeEach + void setUp() { + GlobalOpenTelemetry.resetForTest(); + } + @Test void initializeAndGet() { OpenTelemetrySdk sdk = OpenTelemetrySdkAutoConfiguration.initialize(); assertThat(GlobalOpenTelemetry.get()).isSameAs(sdk); } + + @Test + void initializeAndGet_noGlobal() { + OpenTelemetrySdkAutoConfiguration.initialize(false); + assertThat(GlobalOpenTelemetry.get()).isNull(); + } }