Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}

/**
Expand All @@ -73,21 +70,12 @@ static AutoConfiguredOpenTelemetrySdk create(
* <p>This method is experimental so not public. You may reflectively call it using {@link
* AutoConfigureUtil#getConfig(AutoConfiguredOpenTelemetrySdk)}.
*
* @see #getConfigProvider()
* <p>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.
*
* <p>This method is experimental so not public. You may reflectively call it using {@link
* AutoConfigureUtil#getConfigProvider(AutoConfiguredOpenTelemetrySdk)}.
*
* @see #getConfig()
*/
@Nullable
abstract Object getConfigProvider();

AutoConfiguredOpenTelemetrySdk() {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand All @@ -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 =
Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was a bug! The SdkConfigProvider instance was not being created with the component loader specified in DeclarativeConfigContext.

OpenTelemetrySdkBuilder builder = OpenTelemetrySdk.builder();
String fileFormat = model.getFileFormat();
if (fileFormat == null || !SUPPORTED_FILE_FORMATS.matcher(fileFormat).matches()) {
Expand Down
Loading