diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/GlobalConfigProvider.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/GlobalConfigProvider.java deleted file mode 100644 index b0daef4968d..00000000000 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/GlobalConfigProvider.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.api.incubator.config; - -import io.opentelemetry.api.GlobalOpenTelemetry; -import java.util.concurrent.atomic.AtomicReference; -import javax.annotation.Nullable; - -/** - * This class provides a temporary global accessor for {@link ConfigProvider} until the - * instrumentation config API is marked stable. It will eventually be merged into {@link - * GlobalOpenTelemetry}. - */ -// We intentionally assign to be used for error reporting. -@SuppressWarnings("StaticAssignmentOfThrowable") -public final class GlobalConfigProvider { - - private static final AtomicReference instance = - new AtomicReference<>(ConfigProvider.noop()); - - @SuppressWarnings("NonFinalStaticField") - @Nullable - private static volatile Throwable setInstanceCaller; - - private GlobalConfigProvider() {} - - /** Returns the globally registered {@link ConfigProvider}. */ - // instance cannot be set to null - @SuppressWarnings("NullAway") - public static ConfigProvider get() { - return instance.get(); - } - - /** - * Sets the global {@link ConfigProvider}. Future calls to {@link #get()} will return the provided - * {@link ConfigProvider} instance. This should be called once as early as possible in your - * application initialization logic. - * - * @throws IllegalStateException when called more than once - */ - public static void set(ConfigProvider configProvider) { - boolean changed = instance.compareAndSet(ConfigProvider.noop(), configProvider); - if (!changed && (configProvider != ConfigProvider.noop())) { - throw new IllegalStateException( - "GlobalConfigProvider.set has already been called. GlobalConfigProvider.set " - + "must be called only once before any calls to GlobalConfigProvider.get. " - + "Previous invocation set to cause of this exception.", - setInstanceCaller); - } - setInstanceCaller = new Throwable(); - } - - /** - * Unsets the global {@link ConfigProvider}. This is only meant to be used from tests which need - * to reconfigure {@link ConfigProvider}. - */ - public static void resetForTest() { - instance.set(ConfigProvider.noop()); - } -} diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/GlobalConfigProviderTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/GlobalConfigProviderTest.java deleted file mode 100644 index ecd837a5298..00000000000 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/GlobalConfigProviderTest.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.api.incubator.config; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -class GlobalConfigProviderTest { - - @BeforeAll - static void beforeClass() { - GlobalConfigProvider.resetForTest(); - } - - @AfterEach - void after() { - GlobalConfigProvider.resetForTest(); - } - - @Test - void setAndGet() { - assertThat(GlobalConfigProvider.get()).isEqualTo(ConfigProvider.noop()); - ConfigProvider configProvider = DeclarativeConfigProperties::empty; - GlobalConfigProvider.set(configProvider); - assertThat(GlobalConfigProvider.get()).isSameAs(configProvider); - } - - @Test - void setThenSet() { - ConfigProvider configProvider = DeclarativeConfigProperties::empty; - GlobalConfigProvider.set(configProvider); - assertThatThrownBy(() -> GlobalConfigProvider.set(configProvider)) - .isInstanceOf(IllegalStateException.class) - .hasMessageContaining("GlobalConfigProvider.set has already been called") - .hasStackTraceContaining("setThenSet"); - } -} diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdk.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdk.java index c5d9c77f4ee..d83fc3b7479 100644 --- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdk.java +++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdk.java @@ -8,7 +8,7 @@ import com.google.auto.value.AutoValue; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @@ -46,11 +46,8 @@ public static AutoConfiguredOpenTelemetrySdkBuilder builder() { } static AutoConfiguredOpenTelemetrySdk create( - OpenTelemetrySdk sdk, - Resource resource, - @Nullable ConfigProperties config, - @Nullable Object configProvider) { - return new AutoValue_AutoConfiguredOpenTelemetrySdk(sdk, resource, config, configProvider); + OpenTelemetrySdk sdk, Resource resource, @Nullable ConfigProperties config) { + return new AutoValue_AutoConfiguredOpenTelemetrySdk(sdk, resource, config); } /** @@ -73,21 +70,12 @@ static AutoConfiguredOpenTelemetrySdk create( *

This method is experimental so not public. You may reflectively call it using {@link * AutoConfigureUtil#getConfig(AutoConfiguredOpenTelemetrySdk)}. * - * @see #getConfigProvider() + *

If declarative config was used, {@link #getOpenTelemetrySdk()} will return an instance of + * {@link ExtendedOpenTelemetry} and you can use {@link ExtendedOpenTelemetry#getConfigProvider()} + * to access the configuration. */ @Nullable abstract ConfigProperties getConfig(); - /** - * Returns the {@link ConfigProvider}, or {@code null} if declarative configuration was not used. - * - *

This method is experimental so not public. You may reflectively call it using {@link - * AutoConfigureUtil#getConfigProvider(AutoConfiguredOpenTelemetrySdk)}. - * - * @see #getConfig() - */ - @Nullable - abstract Object getConfigProvider(); - AutoConfiguredOpenTelemetrySdk() {} } diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java index 29eb13a549b..8d7b7c46317 100644 --- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java +++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java @@ -453,10 +453,6 @@ private AutoConfiguredOpenTelemetrySdk buildImpl() { componentLoader); if (fromFileConfiguration != null) { maybeRegisterShutdownHook(fromFileConfiguration.getOpenTelemetrySdk()); - Object configProvider = fromFileConfiguration.getConfigProvider(); - if (setResultAsGlobal && INCUBATOR_AVAILABLE && configProvider != null) { - IncubatingUtil.setGlobalConfigProvider(configProvider); - } return fromFileConfiguration; } @@ -495,7 +491,7 @@ private AutoConfiguredOpenTelemetrySdk buildImpl() { maybeRegisterShutdownHook(openTelemetrySdk); callAutoConfigureListeners(spiHelper, openTelemetrySdk); - return AutoConfiguredOpenTelemetrySdk.create(openTelemetrySdk, resource, config, null); + return AutoConfiguredOpenTelemetrySdk.create(openTelemetrySdk, resource, config); } catch (RuntimeException e) { logger.info( "Error encountered during autoconfiguration. Closing partially configured components."); diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/IncubatingUtil.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/IncubatingUtil.java index 7596864631f..85c22c49324 100644 --- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/IncubatingUtil.java +++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/IncubatingUtil.java @@ -7,9 +7,7 @@ import static java.util.Objects.requireNonNull; -import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.GlobalConfigProvider; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; @@ -114,18 +112,11 @@ private static AutoConfiguredOpenTelemetrySdk getOpenTelemetrySdk( create.setAccessible(true); OpenTelemetrySdk sdk = (OpenTelemetrySdk) create.invoke(null, model, context); - Class providerClass = - Class.forName("io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider"); - Object provider = - providerClass - .getDeclaredMethod("create", openTelemetryConfiguration, ComponentLoader.class) - .invoke(null, model, componentLoader); - Method getResource = contextClass.getDeclaredMethod("getResource"); getResource.setAccessible(true); Resource resource = (Resource) getResource.invoke(context); - return AutoConfiguredOpenTelemetrySdk.create(sdk, resource, null, provider); + return AutoConfiguredOpenTelemetrySdk.create(sdk, resource, null); } // Visible for testing @@ -153,8 +144,4 @@ private static ConfigurationException toConfigurationException( String message = requireNonNull(exception.getMessage()); return new ConfigurationException(message, exception); } - - static void setGlobalConfigProvider(Object configProvider) { - GlobalConfigProvider.set((ConfigProvider) configProvider); - } } diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/internal/AutoConfigureUtil.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/internal/AutoConfigureUtil.java index 8bf42005ba8..c100ee20b25 100644 --- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/internal/AutoConfigureUtil.java +++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/internal/AutoConfigureUtil.java @@ -5,7 +5,6 @@ package io.opentelemetry.sdk.autoconfigure.internal; -import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @@ -40,25 +39,6 @@ public static ConfigProperties getConfig( } } - /** - * Returns the {@link ConfigProvider} resulting from auto-configuration when declarative - * configuration is used. - * - * @return the {@link ConfigProvider}, or {@code null} if declarative configuration is NOT used - */ - @Nullable - public static ConfigProvider getConfigProvider( - AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { - try { - Method method = AutoConfiguredOpenTelemetrySdk.class.getDeclaredMethod("getConfigProvider"); - method.setAccessible(true); - return (ConfigProvider) method.invoke(autoConfiguredOpenTelemetrySdk); - } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { - throw new IllegalStateException( - "Error calling getConfigProvider on AutoConfiguredOpenTelemetrySdk", e); - } - } - /** Sets the {@link ConfigProperties} customizer to be used in the auto-configuration process. */ public static AutoConfiguredOpenTelemetrySdkBuilder setConfigPropertiesCustomizer( AutoConfiguredOpenTelemetrySdkBuilder builder, diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index 3d04962237a..09038b40e6d 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -18,17 +18,15 @@ import io.github.netmikey.logunit.api.LogCapturer; import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.api.incubator.config.GlobalConfigProvider; import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.internal.testing.CleanupExtension; import io.opentelemetry.internal.testing.slf4j.SuppressLogger; import io.opentelemetry.sdk.OpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; @@ -87,7 +85,6 @@ void setup() throws IOException { configFilePath = tempDir.resolve("otel-config.yaml"); Files.write(configFilePath, yaml.getBytes(StandardCharsets.UTF_8)); GlobalOpenTelemetry.resetForTest(); - GlobalConfigProvider.resetForTest(); } @Test @@ -163,8 +160,10 @@ void configFile_setComponentLoader() { cleanup.addCloseable(autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk()); assertThat( - Optional.ofNullable(AutoConfigureUtil.getConfigProvider(autoConfiguredOpenTelemetrySdk)) - .map(ConfigProvider::getInstrumentationConfig) + Optional.ofNullable( + ((ExtendedOpenTelemetry) autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk()) + .getConfigProvider() + .getInstrumentationConfig()) .map(DeclarativeConfigProperties::getComponentLoader) .orElse(null)) .isSameAs(componentLoader); @@ -184,39 +183,6 @@ void configFile_NoShutdownHook() { verify(builder, never()).shutdownHook(any()); } - @Test - void configFile_setResultAsGlobalFalse() { - GlobalOpenTelemetry.set(OpenTelemetry.noop()); - ConfigProperties config = - DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", configFilePath.toString())); - - AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk = - AutoConfiguredOpenTelemetrySdk.builder().setConfig(config).build(); - OpenTelemetrySdk openTelemetrySdk = autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(); - cleanup.addCloseable(openTelemetrySdk); - - assertThat(GlobalOpenTelemetry.get()).extracting("delegate").isNotSameAs(openTelemetrySdk); - assertThat(GlobalConfigProvider.get()) - .isNotSameAs(autoConfiguredOpenTelemetrySdk.getConfigProvider()); - } - - @Test - void configFile_setResultAsGlobalTrue() { - ConfigProperties config = - DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", configFilePath.toString())); - - AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk = - AutoConfiguredOpenTelemetrySdk.builder().setConfig(config).setResultAsGlobal().build(); - OpenTelemetrySdk openTelemetrySdk = autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(); - cleanup.addCloseable(openTelemetrySdk); - - assertThat(GlobalOpenTelemetry.get()).extracting("delegate").isSameAs(openTelemetrySdk); - assertThat(GlobalConfigProvider.get()) - .isSameAs(autoConfiguredOpenTelemetrySdk.getConfigProvider()); - } - @Test void configFile_Error(@TempDir Path tempDir) throws IOException { String yaml = @@ -253,11 +219,8 @@ void configFile_ConfigProvider() { OpenTelemetrySdk openTelemetrySdk = autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(); cleanup.addCloseable(openTelemetrySdk); - // getConfig() should return ExtendedConfigProperties generic representation of the config file - ConfigProvider globalConfigProvider = GlobalConfigProvider.get(); - assertThat(globalConfigProvider) - .isNotNull() - .isSameAs(AutoConfigureUtil.getConfigProvider(autoConfiguredOpenTelemetrySdk)); + ConfigProvider globalConfigProvider = + ((ExtendedOpenTelemetry) GlobalOpenTelemetry.get()).getConfigProvider(); DeclarativeConfigProperties instrumentationConfig = globalConfigProvider.getInstrumentationConfig(); assertThat(instrumentationConfig).isNotNull(); diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java index ea0ad7ef2a8..a7d0a015bfd 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java @@ -32,7 +32,8 @@ static OpenTelemetryConfigurationFactory getInstance() { @Override public ExtendedOpenTelemetrySdk create( OpenTelemetryConfigurationModel model, DeclarativeConfigContext context) { - SdkConfigProvider sdkConfigProvider = SdkConfigProvider.create(model); + SdkConfigProvider sdkConfigProvider = + SdkConfigProvider.create(model, context.getSpiHelper().getComponentLoader()); OpenTelemetrySdkBuilder builder = OpenTelemetrySdk.builder(); String fileFormat = model.getFileFormat(); if (fileFormat == null || !SUPPORTED_FILE_FORMATS.matcher(fileFormat).matches()) {