Provide an option to not set the autoconfigured SDK as the global. (#3419)

This commit is contained in:
John Watson 2021-07-21 20:51:13 -07:00 committed by GitHub
parent 2cb461d4ae
commit daef9c147d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 5 deletions

View File

@ -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.
*
* <p>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) {

View File

@ -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();
}
}