diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetry.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetry.java
new file mode 100644
index 00000000000..73514616cb3
--- /dev/null
+++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetry.java
@@ -0,0 +1,17 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.api.incubator;
+
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.api.incubator.config.ConfigProvider;
+
+/** Extension to {@link OpenTelemetry} that supports getting {@link ConfigProvider}. */
+public interface ExtendedOpenTelemetry extends OpenTelemetry {
+ /** Returns the {@link ConfigProvider} for this {@link OpenTelemetry}. */
+ default ConfigProvider getConfigProvider() {
+ return ConfigProvider.noop();
+ }
+}
diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk.txt
index 407cc500462..0126773a2c9 100644
--- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk.txt
+++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk.txt
@@ -1,2 +1,3 @@
Comparing source compatibility of opentelemetry-sdk-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-1.52.0.jar
-No changes.
\ No newline at end of file
+*** MODIFIED CLASS: PUBLIC NON_FINAL (<- FINAL) io.opentelemetry.sdk.OpenTelemetrySdk (not serializable)
+ === CLASS FILE FORMAT VERSION: 52.0 <- 52.0
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/ExtendedOpenTelemetrySdk.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/ExtendedOpenTelemetrySdk.java
new file mode 100644
index 00000000000..4a3307cd901
--- /dev/null
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/ExtendedOpenTelemetrySdk.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.sdk.extension.incubator;
+
+import io.opentelemetry.api.incubator.ExtendedOpenTelemetry;
+import io.opentelemetry.api.incubator.config.ConfigProvider;
+import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
+import io.opentelemetry.context.propagation.ContextPropagators;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
+import io.opentelemetry.sdk.logs.SdkLoggerProvider;
+import io.opentelemetry.sdk.metrics.SdkMeterProvider;
+import io.opentelemetry.sdk.trace.SdkTracerProvider;
+import java.io.Closeable;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.ThreadSafe;
+
+/** A new interface for creating OpenTelemetrySdk that supports getting {@link ConfigProvider}. */
+public class ExtendedOpenTelemetrySdk extends OpenTelemetrySdk
+ implements ExtendedOpenTelemetry, Closeable {
+
+ private final ObfuscatedConfigProvider configProvider;
+
+ public ExtendedOpenTelemetrySdk(
+ SdkTracerProvider tracerProvider,
+ SdkMeterProvider meterProvider,
+ SdkLoggerProvider loggerProvider,
+ ContextPropagators propagators,
+ SdkConfigProvider configProvider) {
+ super(tracerProvider, meterProvider, loggerProvider, propagators);
+ this.configProvider = new ObfuscatedConfigProvider(configProvider);
+ }
+
+ @Override
+ public ConfigProvider getConfigProvider() {
+ return configProvider.unobfuscate();
+ }
+
+ /**
+ * This class allows the SDK to unobfuscate an obfuscated static global provider.
+ *
+ *
Static global providers are obfuscated when they are returned from the API to prevent users
+ * from casting them to their SDK specific implementation. For example, we do not want users to
+ * use patterns like {@code (SdkMeterProvider) openTelemetry.getMeterProvider()}.
+ */
+ @ThreadSafe
+ // Visible for testing
+ static class ObfuscatedConfigProvider implements ConfigProvider {
+
+ private final SdkConfigProvider delegate;
+
+ ObfuscatedConfigProvider(SdkConfigProvider delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override
+ @Nullable
+ public DeclarativeConfigProperties getInstrumentationConfig() {
+ if (delegate == null) {
+ return null;
+ }
+ return delegate.getInstrumentationConfig();
+ }
+
+ public SdkConfigProvider unobfuscate() {
+ return delegate;
+ }
+ }
+}
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/ExtendedOpenTelemetrySdkBuilder.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/ExtendedOpenTelemetrySdkBuilder.java
new file mode 100644
index 00000000000..f18ba80e533
--- /dev/null
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/ExtendedOpenTelemetrySdkBuilder.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.sdk.extension.incubator;
+
+import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.api.incubator.config.ConfigProvider;
+import io.opentelemetry.context.propagation.ContextPropagators;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+import io.opentelemetry.sdk.OpenTelemetrySdkBuilder;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
+import io.opentelemetry.sdk.logs.SdkLoggerProvider;
+import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
+import io.opentelemetry.sdk.metrics.SdkMeterProvider;
+import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
+import io.opentelemetry.sdk.trace.SdkTracerProvider;
+import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
+import java.io.Closeable;
+import java.util.Objects;
+import java.util.function.Consumer;
+
+/** An builder for creating an {@link ExtendedOpenTelemetrySdk} instance. */
+public final class ExtendedOpenTelemetrySdkBuilder {
+ private final SdkTracerProviderBuilder tracerProviderBuilder = SdkTracerProvider.builder();
+ private final SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder();
+ private final SdkLoggerProviderBuilder loggerProviderBuilder = SdkLoggerProvider.builder();
+ private ContextPropagators propagators = ContextPropagators.noop();
+ private SdkConfigProvider configProvider =
+ SdkConfigProvider.create(new OpenTelemetryConfigurationModel());
+ private Consumer closeableConsumer =
+ closeable -> {
+ // Default no-op closeable consumer
+ };
+
+ /** Sets the {@link ContextPropagators} to use. */
+ public ExtendedOpenTelemetrySdkBuilder setPropagators(ContextPropagators propagators) {
+ this.propagators = Objects.requireNonNull(propagators, "propagators must not be null");
+ return this;
+ }
+
+ /** Sets the {@link ConfigProvider} to use. */
+ public ExtendedOpenTelemetrySdkBuilder setConfigProvider(SdkConfigProvider configProvider) {
+ this.configProvider = Objects.requireNonNull(configProvider, "configProvider must not be null");
+ return this;
+ }
+
+ public ExtendedOpenTelemetrySdkBuilder setCloseableConsumer(Consumer configurator) {
+ this.closeableConsumer = Objects.requireNonNull(configurator, "configurator must not be null");
+ return this;
+ }
+
+ /**
+ * Applies a consumer callback to configure the TracerProvider being built for this OpenTelemetry.
+ *
+ * @param configurator A callback fleshing out tracers.
+ * @return this
+ */
+ public ExtendedOpenTelemetrySdkBuilder withTracerProvider(
+ Consumer configurator) {
+ configurator.accept(this.tracerProviderBuilder);
+ return this;
+ }
+
+ /**
+ * Applies a consumer callback to configure the MeterProvider being built for this OpenTelemetry.
+ *
+ * @param configurator A callback fleshing out meters.
+ * @return this
+ */
+ public ExtendedOpenTelemetrySdkBuilder withMeterProvider(
+ Consumer configurator) {
+ configurator.accept(this.meterProviderBuilder);
+ return this;
+ }
+
+ /**
+ * Applies a consumer callback to configure the LoggerProvider being built for this OpenTelemetry.
+ *
+ * @param configurator A callback fleshing out meters.
+ * @return this
+ */
+ public ExtendedOpenTelemetrySdkBuilder withLoggerProvider(
+ Consumer configurator) {
+ configurator.accept(this.loggerProviderBuilder);
+ return this;
+ }
+
+ /**
+ * Returns a new {@link OpenTelemetrySdk} built with the configuration of this {@link
+ * OpenTelemetrySdkBuilder}. This SDK is not registered as the global {@link
+ * io.opentelemetry.api.OpenTelemetry}. It is recommended that you register one SDK using {@link
+ * OpenTelemetrySdkBuilder#buildAndRegisterGlobal()} for use by instrumentation that requires
+ * access to a global instance of {@link io.opentelemetry.api.OpenTelemetry}.
+ *
+ * @see GlobalOpenTelemetry
+ */
+ public ExtendedOpenTelemetrySdk build() {
+ SdkTracerProvider tracerProvider = tracerProviderBuilder.build();
+ SdkMeterProvider meterProvider = meterProviderBuilder.build();
+ SdkLoggerProvider loggerProvider = loggerProviderBuilder.build();
+ closeableConsumer.accept(tracerProvider);
+ closeableConsumer.accept(meterProvider);
+ closeableConsumer.accept(loggerProvider);
+ ExtendedOpenTelemetrySdk sdk =
+ new ExtendedOpenTelemetrySdk(
+ tracerProvider, meterProvider, loggerProvider, propagators, configProvider);
+ closeableConsumer.accept(sdk);
+ return sdk;
+ }
+
+ /**
+ * Returns a new {@link OpenTelemetrySdk} built with the configuration of this {@link
+ * OpenTelemetrySdkBuilder} and registers it as the global {@link
+ * io.opentelemetry.api.OpenTelemetry}. An exception will be thrown if this method is attempted to
+ * be called multiple times in the lifecycle of an application - ensure you have only one SDK for
+ * use as the global instance. If you need to configure multiple SDKs for tests, use {@link
+ * GlobalOpenTelemetry#resetForTest()} between them.
+ *
+ * @see GlobalOpenTelemetry
+ */
+ public ExtendedOpenTelemetrySdk buildAndRegisterGlobal() {
+ ExtendedOpenTelemetrySdk sdk = build();
+ GlobalOpenTelemetry.set(sdk);
+ return sdk;
+ }
+}
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java
index 9cc697ecaea..8f69f77a205 100644
--- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java
@@ -7,6 +7,7 @@
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
+import io.opentelemetry.common.ComponentLoader;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
import java.io.Closeable;
@@ -39,6 +40,10 @@ List getCloseables() {
return Collections.unmodifiableList(closeables);
}
+ ComponentLoader getComponentLoader() {
+ return spiHelper.getComponentLoader();
+ }
+
/**
* Find a registered {@link ComponentProvider} with {@link ComponentProvider#getType()} matching
* {@code type}, {@link ComponentProvider#getName()} matching {@code name}, and call {@link
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java
index 494138bdaa4..ba15984357d 100644
--- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java
@@ -15,6 +15,7 @@
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
+import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdk;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SamplerModel;
import io.opentelemetry.sdk.trace.samplers.Sampler;
@@ -82,7 +83,7 @@ private DeclarativeConfiguration() {}
*
* @throws DeclarativeConfigException if unable to parse or interpret
*/
- public static OpenTelemetrySdk parseAndCreate(InputStream inputStream) {
+ public static ExtendedOpenTelemetrySdk parseAndCreate(InputStream inputStream) {
OpenTelemetryConfigurationModel configurationModel = parse(inputStream);
return create(configurationModel);
}
@@ -95,7 +96,8 @@ public static OpenTelemetrySdk parseAndCreate(InputStream inputStream) {
* @return the {@link OpenTelemetrySdk}
* @throws DeclarativeConfigException if unable to interpret
*/
- public static OpenTelemetrySdk create(OpenTelemetryConfigurationModel configurationModel) {
+ public static ExtendedOpenTelemetrySdk create(
+ OpenTelemetryConfigurationModel configurationModel) {
return create(configurationModel, DEFAULT_COMPONENT_LOADER);
}
@@ -109,7 +111,7 @@ public static OpenTelemetrySdk create(OpenTelemetryConfigurationModel configurat
* @return the {@link OpenTelemetrySdk}
* @throws DeclarativeConfigException if unable to interpret
*/
- public static OpenTelemetrySdk create(
+ public static ExtendedOpenTelemetrySdk create(
OpenTelemetryConfigurationModel configurationModel, ComponentLoader componentLoader) {
SpiHelper spiHelper = SpiHelper.create(componentLoader);
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java
index 98b06f4700e..638170498bb 100644
--- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java
@@ -15,14 +15,12 @@
import io.opentelemetry.sdk.internal.ScopeConfigurator;
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
import io.opentelemetry.sdk.logs.LogLimits;
-import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
import io.opentelemetry.sdk.logs.internal.LoggerConfig;
import io.opentelemetry.sdk.logs.internal.SdkLoggerProviderUtil;
import java.util.List;
-final class LoggerProviderFactory
- implements Factory {
+final class LoggerProviderFactory {
private static final LoggerProviderFactory INSTANCE = new LoggerProviderFactory();
@@ -32,14 +30,13 @@ static LoggerProviderFactory getInstance() {
return INSTANCE;
}
- @Override
- public SdkLoggerProviderBuilder create(
- LoggerProviderAndAttributeLimits model, DeclarativeConfigContext context) {
- SdkLoggerProviderBuilder builder = SdkLoggerProvider.builder();
-
+ public void configure(
+ SdkLoggerProviderBuilder builder,
+ LoggerProviderAndAttributeLimits model,
+ DeclarativeConfigContext context) {
LoggerProviderModel loggerProviderModel = model.getLoggerProvider();
if (loggerProviderModel == null) {
- return builder;
+ return;
}
LogLimits logLimits =
@@ -84,8 +81,6 @@ public SdkLoggerProviderBuilder create(
}
SdkLoggerProviderUtil.setLoggerConfigurator(builder, configuratorBuilder.build());
}
-
- return builder;
}
private static class LoggerConfigFactory
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactory.java
index a19ab7e5c99..6accc4544bf 100644
--- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactory.java
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactory.java
@@ -17,15 +17,13 @@
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ViewStreamModel;
import io.opentelemetry.sdk.internal.ScopeConfigurator;
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
-import io.opentelemetry.sdk.metrics.SdkMeterProvider;
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
import io.opentelemetry.sdk.metrics.export.CardinalityLimitSelector;
import io.opentelemetry.sdk.metrics.internal.MeterConfig;
import io.opentelemetry.sdk.metrics.internal.SdkMeterProviderUtil;
import java.util.List;
-final class MeterProviderFactory implements Factory {
-
+final class MeterProviderFactory {
private static final MeterProviderFactory INSTANCE = new MeterProviderFactory();
private MeterProviderFactory() {}
@@ -34,11 +32,8 @@ static MeterProviderFactory getInstance() {
return INSTANCE;
}
- @Override
- public SdkMeterProviderBuilder create(
- MeterProviderModel model, DeclarativeConfigContext context) {
- SdkMeterProviderBuilder builder = SdkMeterProvider.builder();
-
+ public void configure(
+ SdkMeterProviderBuilder builder, MeterProviderModel model, DeclarativeConfigContext context) {
List readerModels = model.getReaders();
if (readerModels != null) {
readerModels.forEach(
@@ -94,8 +89,6 @@ public SdkMeterProviderBuilder create(
}
SdkMeterProviderUtil.setMeterConfigurator(builder, configuratorBuilder.build());
}
-
- return builder;
}
private static class MeterConfigFactory
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 c61ecd432b8..f07a0d14c99 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
@@ -6,15 +6,18 @@
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
-import io.opentelemetry.sdk.OpenTelemetrySdk;
-import io.opentelemetry.sdk.OpenTelemetrySdkBuilder;
+import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdk;
+import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdkBuilder;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LoggerProviderModel;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MeterProviderModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
import io.opentelemetry.sdk.resources.Resource;
import java.util.Objects;
import java.util.regex.Pattern;
final class OpenTelemetryConfigurationFactory
- implements Factory {
+ implements Factory {
private static final Pattern SUPPORTED_FILE_FORMATS = Pattern.compile("^(0.4)|(1.0(-rc.\\d*)?)$");
@@ -28,9 +31,9 @@ static OpenTelemetryConfigurationFactory getInstance() {
}
@Override
- public OpenTelemetrySdk create(
+ public ExtendedOpenTelemetrySdk create(
OpenTelemetryConfigurationModel model, DeclarativeConfigContext context) {
- OpenTelemetrySdkBuilder builder = OpenTelemetrySdk.builder();
+ ExtendedOpenTelemetrySdkBuilder builder = new ExtendedOpenTelemetrySdkBuilder();
String fileFormat = model.getFileFormat();
if (fileFormat == null || !SUPPORTED_FILE_FORMATS.matcher(fileFormat).matches()) {
throw new DeclarativeConfigException(
@@ -43,49 +46,54 @@ public OpenTelemetrySdk create(
return builder.build();
}
+ builder.setCloseableConsumer(context::addCloseable);
+ builder.setConfigProvider(SdkConfigProvider.create(model, context.getComponentLoader()));
+
if (model.getPropagator() != null) {
builder.setPropagators(
PropagatorFactory.getInstance().create(model.getPropagator(), context));
}
- Resource resource = Resource.getDefault();
+ Resource resource;
if (model.getResource() != null) {
resource = ResourceFactory.getInstance().create(model.getResource(), context);
+ } else {
+ resource = Resource.getDefault();
}
- if (model.getLoggerProvider() != null) {
- builder.setLoggerProvider(
- context.addCloseable(
+ LoggerProviderModel loggerProvider = model.getLoggerProvider();
+ if (loggerProvider != null) {
+ builder.withLoggerProvider(
+ sdkLoggerProviderBuilder ->
LoggerProviderFactory.getInstance()
- .create(
+ .configure(
+ sdkLoggerProviderBuilder.setResource(resource),
LoggerProviderAndAttributeLimits.create(
- model.getAttributeLimits(), model.getLoggerProvider()),
- context)
- .setResource(resource)
- .build()));
+ model.getAttributeLimits(), loggerProvider),
+ context));
}
- if (model.getTracerProvider() != null) {
- builder.setTracerProvider(
- context.addCloseable(
+ TracerProviderModel tracerProvider = model.getTracerProvider();
+ if (tracerProvider != null) {
+ builder.withTracerProvider(
+ sdkTracerProviderBuilder ->
TracerProviderFactory.getInstance()
- .create(
+ .configure(
+ sdkTracerProviderBuilder.setResource(resource),
TracerProviderAndAttributeLimits.create(
- model.getAttributeLimits(), model.getTracerProvider()),
- context)
- .setResource(resource)
- .build()));
+ model.getAttributeLimits(), tracerProvider),
+ context));
}
- if (model.getMeterProvider() != null) {
- builder.setMeterProvider(
- context.addCloseable(
+ MeterProviderModel meterProvider = model.getMeterProvider();
+ if (meterProvider != null) {
+ builder.withMeterProvider(
+ sdkMeterProviderBuilder ->
MeterProviderFactory.getInstance()
- .create(model.getMeterProvider(), context)
- .setResource(resource)
- .build()));
+ .configure(
+ sdkMeterProviderBuilder.setResource(resource), meterProvider, context));
}
- return context.addCloseable(builder.build());
+ return builder.build();
}
}
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SdkConfigProvider.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SdkConfigProvider.java
index 9bc5192a787..561800d9949 100644
--- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SdkConfigProvider.java
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SdkConfigProvider.java
@@ -50,4 +50,9 @@ public static SdkConfigProvider create(
public DeclarativeConfigProperties getInstrumentationConfig() {
return instrumentationConfig;
}
+
+ @Override
+ public String toString() {
+ return "SdkConfigProvider{" + "instrumentationConfig=" + instrumentationConfig + '}';
+ }
}
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactory.java
index 68210f92b07..d25d602461d 100644
--- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactory.java
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactory.java
@@ -14,7 +14,6 @@
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
import io.opentelemetry.sdk.internal.ScopeConfigurator;
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
-import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
import io.opentelemetry.sdk.trace.SpanLimits;
import io.opentelemetry.sdk.trace.internal.SdkTracerProviderUtil;
@@ -22,8 +21,7 @@
import io.opentelemetry.sdk.trace.samplers.Sampler;
import java.util.List;
-final class TracerProviderFactory
- implements Factory {
+final class TracerProviderFactory {
private static final TracerProviderFactory INSTANCE = new TracerProviderFactory();
@@ -33,13 +31,13 @@ static TracerProviderFactory getInstance() {
return INSTANCE;
}
- @Override
- public SdkTracerProviderBuilder create(
- TracerProviderAndAttributeLimits model, DeclarativeConfigContext context) {
- SdkTracerProviderBuilder builder = SdkTracerProvider.builder();
+ public void configure(
+ SdkTracerProviderBuilder builder,
+ TracerProviderAndAttributeLimits model,
+ DeclarativeConfigContext context) {
TracerProviderModel tracerProviderModel = model.getTracerProvider();
if (tracerProviderModel == null) {
- return builder;
+ return;
}
SpanLimits spanLimits =
@@ -90,8 +88,6 @@ public SdkTracerProviderBuilder create(
}
SdkTracerProviderUtil.setTracerConfigurator(builder, configuratorBuilder.build());
}
-
- return builder;
}
private static class TracerConfigFactory
diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java
index b72c0bc8ebe..6c7a01022ba 100644
--- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java
+++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java
@@ -15,7 +15,7 @@
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
import io.opentelemetry.common.ComponentLoader;
import io.opentelemetry.internal.testing.CleanupExtension;
-import io.opentelemetry.sdk.OpenTelemetrySdk;
+import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdk;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
@@ -157,7 +157,7 @@ void create_ModelCustomizer() {
.withProcessors(
Collections.singletonList(
new SpanProcessorModel().withAdditionalProperty("test", null))));
- OpenTelemetrySdk sdk =
+ ExtendedOpenTelemetrySdk sdk =
DeclarativeConfiguration.create(
model,
// customizer is TestDeclarativeConfigurationCustomizerProvider
diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java
index 65761fd5c9c..5a67b746eee 100644
--- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java
+++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java
@@ -25,6 +25,7 @@
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
import io.opentelemetry.sdk.logs.LogLimits;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
+import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
import io.opentelemetry.sdk.logs.internal.LoggerConfig;
import java.io.Closeable;
import java.util.ArrayList;
@@ -50,11 +51,13 @@ void create(LoggerProviderAndAttributeLimits model, SdkLoggerProvider expectedPr
List closeables = new ArrayList<>();
cleanup.addCloseable(expectedProvider);
- SdkLoggerProvider provider = LoggerProviderFactory.getInstance().create(model, context).build();
+ SdkLoggerProviderBuilder builder = SdkLoggerProvider.builder();
+ LoggerProviderFactory.getInstance().configure(builder, model, context);
+ SdkLoggerProvider provider = builder.build();
cleanup.addCloseable(provider);
cleanup.addCloseables(closeables);
- assertThat(provider.toString()).isEqualTo(expectedProvider.toString());
+ assertThat(provider).hasToString(expectedProvider.toString());
}
private static Stream createArguments() {
diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactoryTest.java
index 93abfd7615b..f06a4f755da 100644
--- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactoryTest.java
+++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactoryTest.java
@@ -26,6 +26,7 @@
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
import io.opentelemetry.sdk.metrics.InstrumentSelector;
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
+import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
import io.opentelemetry.sdk.metrics.View;
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader;
import io.opentelemetry.sdk.metrics.internal.MeterConfig;
@@ -53,11 +54,13 @@ void create(MeterProviderModel model, SdkMeterProvider expectedProvider) {
List closeables = new ArrayList<>();
cleanup.addCloseable(expectedProvider);
- SdkMeterProvider provider = MeterProviderFactory.getInstance().create(model, context).build();
+ SdkMeterProviderBuilder builder = SdkMeterProvider.builder();
+ MeterProviderFactory.getInstance().configure(builder, model, context);
+ SdkMeterProvider provider = builder.build();
cleanup.addCloseable(provider);
cleanup.addCloseables(closeables);
- assertThat(provider.toString()).isEqualTo(expectedProvider.toString());
+ assertThat(provider).hasToString(expectedProvider.toString());
}
private static Stream createArguments() {
diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java
index ba535627c0a..1a6d6483812 100644
--- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java
+++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java
@@ -22,8 +22,9 @@
import io.opentelemetry.extension.trace.propagation.JaegerPropagator;
import io.opentelemetry.extension.trace.propagation.OtTracePropagator;
import io.opentelemetry.internal.testing.CleanupExtension;
-import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
+import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdk;
+import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdkBuilder;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AlwaysOnSamplerModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeNameValueModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessorModel;
@@ -53,11 +54,8 @@
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ViewSelectorModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ViewStreamModel;
import io.opentelemetry.sdk.logs.LogLimits;
-import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.metrics.InstrumentSelector;
-import io.opentelemetry.sdk.metrics.SdkMeterProvider;
import io.opentelemetry.sdk.metrics.View;
-import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SpanLimits;
import java.io.Closeable;
import java.util.ArrayList;
@@ -117,25 +115,29 @@ private static Stream fileFormatArgs() {
@Test
void create_Defaults() {
List closeables = new ArrayList<>();
- OpenTelemetrySdk expectedSdk = OpenTelemetrySdk.builder().build();
+ OpenTelemetryConfigurationModel model =
+ new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.1");
+ ExtendedOpenTelemetrySdk expectedSdk =
+ new ExtendedOpenTelemetrySdkBuilder()
+ .setConfigProvider(SdkConfigProvider.create(model))
+ .build();
cleanup.addCloseable(expectedSdk);
- OpenTelemetrySdk sdk =
- OpenTelemetryConfigurationFactory.getInstance()
- .create(new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.1"), context);
+ ExtendedOpenTelemetrySdk sdk =
+ OpenTelemetryConfigurationFactory.getInstance().create(model, context);
cleanup.addCloseable(sdk);
cleanup.addCloseables(closeables);
- assertThat(sdk.toString()).isEqualTo(expectedSdk.toString());
+ assertThat(sdk).hasToString(expectedSdk.toString());
}
@Test
void create_Disabled() {
List closeables = new ArrayList<>();
- OpenTelemetrySdk expectedSdk = OpenTelemetrySdk.builder().build();
+ ExtendedOpenTelemetrySdk expectedSdk = new ExtendedOpenTelemetrySdkBuilder().build();
cleanup.addCloseable(expectedSdk);
- OpenTelemetrySdk sdk =
+ ExtendedOpenTelemetrySdk sdk =
OpenTelemetryConfigurationFactory.getInstance()
.create(
new OpenTelemetryConfigurationModel()
@@ -157,7 +159,7 @@ void create_Disabled() {
cleanup.addCloseable(sdk);
cleanup.addCloseables(closeables);
- assertThat(sdk.toString()).isEqualTo(expectedSdk.toString());
+ assertThat(sdk).hasToString(expectedSdk.toString());
}
@Test
@@ -172,8 +174,87 @@ void create_Configured() {
.put("shape", "square")
.put("order", "second")
.build();
- OpenTelemetrySdk expectedSdk =
- OpenTelemetrySdk.builder()
+
+ OpenTelemetryConfigurationModel model =
+ new OpenTelemetryConfigurationModel()
+ .withFileFormat("1.0-rc.1")
+ .withPropagator(
+ new PropagatorModel()
+ .withCompositeList("tracecontext,baggage,ottrace,b3multi,b3,jaeger"))
+ .withResource(
+ new ResourceModel()
+ .withDetectionDevelopment(
+ new ExperimentalResourceDetectionModel()
+ .withDetectors(
+ Arrays.asList(
+ new ExperimentalResourceDetectorModel()
+ .withAdditionalProperty("order_first", null),
+ new ExperimentalResourceDetectorModel()
+ .withAdditionalProperty("order_second", null),
+ new ExperimentalResourceDetectorModel()
+ .withAdditionalProperty("shape_color", null))))
+ .withAttributes(
+ Arrays.asList(
+ new AttributeNameValueModel()
+ .withName("service.name")
+ .withValue("my-service"),
+ new AttributeNameValueModel().withName("key").withValue("val"))))
+ .withLoggerProvider(
+ new LoggerProviderModel()
+ .withLimits(
+ new LogRecordLimitsModel()
+ .withAttributeValueLengthLimit(1)
+ .withAttributeCountLimit(2))
+ .withProcessors(
+ Collections.singletonList(
+ new LogRecordProcessorModel()
+ .withBatch(
+ new BatchLogRecordProcessorModel()
+ .withExporter(
+ new LogRecordExporterModel()
+ .withOtlpHttp(new OtlpHttpExporterModel()))))))
+ .withTracerProvider(
+ new TracerProviderModel()
+ .withLimits(
+ new SpanLimitsModel()
+ .withAttributeCountLimit(1)
+ .withAttributeValueLengthLimit(2)
+ .withEventCountLimit(3)
+ .withLinkCountLimit(4)
+ .withEventAttributeCountLimit(5)
+ .withLinkAttributeCountLimit(6))
+ .withSampler(new SamplerModel().withAlwaysOn(new AlwaysOnSamplerModel()))
+ .withProcessors(
+ Collections.singletonList(
+ new SpanProcessorModel()
+ .withBatch(
+ new BatchSpanProcessorModel()
+ .withExporter(
+ new SpanExporterModel()
+ .withOtlpHttp(new OtlpHttpExporterModel()))))))
+ .withMeterProvider(
+ new MeterProviderModel()
+ .withReaders(
+ Collections.singletonList(
+ new MetricReaderModel()
+ .withPeriodic(
+ new PeriodicMetricReaderModel()
+ .withExporter(
+ new PushMetricExporterModel()
+ .withOtlpHttp(new OtlpHttpMetricExporterModel())))))
+ .withViews(
+ Collections.singletonList(
+ new ViewModel()
+ .withSelector(
+ new ViewSelectorModel().withInstrumentName("instrument-name"))
+ .withStream(
+ new ViewStreamModel()
+ .withName("stream-name")
+ .withAttributeKeys(null)))));
+
+ ExtendedOpenTelemetrySdk expectedSdk =
+ new ExtendedOpenTelemetrySdkBuilder()
+ .setConfigProvider(SdkConfigProvider.create(model))
.setPropagators(
ContextPropagators.create(
TextMapPropagator.composite(
@@ -183,141 +264,57 @@ void create_Configured() {
B3Propagator.injectingMultiHeaders(),
B3Propagator.injectingSingleHeader(),
JaegerPropagator.getInstance())))
- .setLoggerProvider(
- SdkLoggerProvider.builder()
- .setResource(expectedResource)
- .setLogLimits(
- () ->
- LogLimits.builder()
- .setMaxAttributeValueLength(1)
- .setMaxNumberOfAttributes(2)
+ .withLoggerProvider(
+ sdkLoggerProviderBuilder ->
+ sdkLoggerProviderBuilder
+ .setResource(expectedResource)
+ .setLogLimits(
+ () ->
+ LogLimits.builder()
+ .setMaxAttributeValueLength(1)
+ .setMaxNumberOfAttributes(2)
+ .build())
+ .addLogRecordProcessor(
+ io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor.builder(
+ OtlpHttpLogRecordExporter.getDefault())
+ .build()))
+ .withTracerProvider(
+ sdkTracerProviderBuilder ->
+ sdkTracerProviderBuilder
+ .setResource(expectedResource)
+ .setSpanLimits(
+ SpanLimits.builder()
+ .setMaxNumberOfAttributes(1)
+ .setMaxAttributeValueLength(2)
+ .setMaxNumberOfEvents(3)
+ .setMaxNumberOfLinks(4)
+ .setMaxNumberOfAttributesPerEvent(5)
+ .setMaxNumberOfAttributesPerLink(6)
+ .build())
+ .setSampler(alwaysOn())
+ .addSpanProcessor(
+ io.opentelemetry.sdk.trace.export.BatchSpanProcessor.builder(
+ OtlpHttpSpanExporter.getDefault())
+ .build()))
+ .withMeterProvider(
+ sdkMeterProviderBuilder ->
+ sdkMeterProviderBuilder
+ .setResource(expectedResource)
+ .registerMetricReader(
+ io.opentelemetry.sdk.metrics.export.PeriodicMetricReader.builder(
+ OtlpHttpMetricExporter.getDefault())
.build())
- .addLogRecordProcessor(
- io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor.builder(
- OtlpHttpLogRecordExporter.getDefault())
- .build())
- .build())
- .setTracerProvider(
- SdkTracerProvider.builder()
- .setResource(expectedResource)
- .setSpanLimits(
- SpanLimits.builder()
- .setMaxNumberOfAttributes(1)
- .setMaxAttributeValueLength(2)
- .setMaxNumberOfEvents(3)
- .setMaxNumberOfLinks(4)
- .setMaxNumberOfAttributesPerEvent(5)
- .setMaxNumberOfAttributesPerLink(6)
- .build())
- .setSampler(alwaysOn())
- .addSpanProcessor(
- io.opentelemetry.sdk.trace.export.BatchSpanProcessor.builder(
- OtlpHttpSpanExporter.getDefault())
- .build())
- .build())
- .setMeterProvider(
- SdkMeterProvider.builder()
- .setResource(expectedResource)
- .registerMetricReader(
- io.opentelemetry.sdk.metrics.export.PeriodicMetricReader.builder(
- OtlpHttpMetricExporter.getDefault())
- .build())
- .registerView(
- InstrumentSelector.builder().setName("instrument-name").build(),
- View.builder().setName("stream-name").build())
- .build())
+ .registerView(
+ InstrumentSelector.builder().setName("instrument-name").build(),
+ View.builder().setName("stream-name").build()))
.build();
cleanup.addCloseable(expectedSdk);
- OpenTelemetrySdk sdk =
- OpenTelemetryConfigurationFactory.getInstance()
- .create(
- new OpenTelemetryConfigurationModel()
- .withFileFormat("1.0-rc.1")
- .withPropagator(
- new PropagatorModel()
- .withCompositeList("tracecontext,baggage,ottrace,b3multi,b3,jaeger"))
- .withResource(
- new ResourceModel()
- .withDetectionDevelopment(
- new ExperimentalResourceDetectionModel()
- .withDetectors(
- Arrays.asList(
- new ExperimentalResourceDetectorModel()
- .withAdditionalProperty("order_first", null),
- new ExperimentalResourceDetectorModel()
- .withAdditionalProperty("order_second", null),
- new ExperimentalResourceDetectorModel()
- .withAdditionalProperty("shape_color", null))))
- .withAttributes(
- Arrays.asList(
- new AttributeNameValueModel()
- .withName("service.name")
- .withValue("my-service"),
- new AttributeNameValueModel()
- .withName("key")
- .withValue("val"))))
- .withLoggerProvider(
- new LoggerProviderModel()
- .withLimits(
- new LogRecordLimitsModel()
- .withAttributeValueLengthLimit(1)
- .withAttributeCountLimit(2))
- .withProcessors(
- Collections.singletonList(
- new LogRecordProcessorModel()
- .withBatch(
- new BatchLogRecordProcessorModel()
- .withExporter(
- new LogRecordExporterModel()
- .withOtlpHttp(
- new OtlpHttpExporterModel()))))))
- .withTracerProvider(
- new TracerProviderModel()
- .withLimits(
- new SpanLimitsModel()
- .withAttributeCountLimit(1)
- .withAttributeValueLengthLimit(2)
- .withEventCountLimit(3)
- .withLinkCountLimit(4)
- .withEventAttributeCountLimit(5)
- .withLinkAttributeCountLimit(6))
- .withSampler(
- new SamplerModel().withAlwaysOn(new AlwaysOnSamplerModel()))
- .withProcessors(
- Collections.singletonList(
- new SpanProcessorModel()
- .withBatch(
- new BatchSpanProcessorModel()
- .withExporter(
- new SpanExporterModel()
- .withOtlpHttp(
- new OtlpHttpExporterModel()))))))
- .withMeterProvider(
- new MeterProviderModel()
- .withReaders(
- Collections.singletonList(
- new MetricReaderModel()
- .withPeriodic(
- new PeriodicMetricReaderModel()
- .withExporter(
- new PushMetricExporterModel()
- .withOtlpHttp(
- new OtlpHttpMetricExporterModel())))))
- .withViews(
- Collections.singletonList(
- new ViewModel()
- .withSelector(
- new ViewSelectorModel()
- .withInstrumentName("instrument-name"))
- .withStream(
- new ViewStreamModel()
- .withName("stream-name")
- .withAttributeKeys(null))))),
- context);
+ ExtendedOpenTelemetrySdk sdk =
+ OpenTelemetryConfigurationFactory.getInstance().create(model, context);
cleanup.addCloseable(sdk);
cleanup.addCloseables(closeables);
- assertThat(sdk.toString()).isEqualTo(expectedSdk.toString());
+ assertThat(sdk).hasToString(expectedSdk.toString());
}
}
diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactoryTest.java
index d565b408baa..19e59443c53 100644
--- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactoryTest.java
+++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactoryTest.java
@@ -54,11 +54,13 @@ void create(TracerProviderAndAttributeLimits model, SdkTracerProvider expectedPr
List closeables = new ArrayList<>();
cleanup.addCloseable(expectedProvider);
- SdkTracerProvider provider = TracerProviderFactory.getInstance().create(model, context).build();
+ SdkTracerProviderBuilder builder = SdkTracerProvider.builder();
+ TracerProviderFactory.getInstance().configure(builder, model, context);
+ SdkTracerProvider provider = builder.build();
cleanup.addCloseable(provider);
cleanup.addCloseables(closeables);
- assertThat(provider.toString()).isEqualTo(expectedProvider.toString());
+ assertThat(provider).hasToString(expectedProvider.toString());
}
private static Stream createArguments() {
diff --git a/sdk/all/src/main/java/io/opentelemetry/sdk/IncubatingUtil.java b/sdk/all/src/main/java/io/opentelemetry/sdk/IncubatingUtil.java
new file mode 100644
index 00000000000..0ada6e9f55d
--- /dev/null
+++ b/sdk/all/src/main/java/io/opentelemetry/sdk/IncubatingUtil.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.sdk;
+
+import javax.annotation.Nullable;
+
+/**
+ * Utilities for interacting with {@code io.opentelemetry:opentelemetry-api-incubator}, which is not
+ * guaranteed to be present on the classpath. For all methods, callers MUST first separately
+ * reflectively confirm that the incubator is available on the classpath.
+ */
+final class IncubatingUtil {
+ private IncubatingUtil() {}
+
+ @Nullable
+ static OpenTelemetrySdk createExtendedOpenTelemetrySdk() {
+ return null;
+ }
+}
diff --git a/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java b/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java
index 81c1c3dd8c1..225972a09c3 100644
--- a/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java
+++ b/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java
@@ -28,7 +28,7 @@
/** The SDK implementation of {@link OpenTelemetry}. */
@ThreadSafe
-public final class OpenTelemetrySdk implements OpenTelemetry, Closeable {
+public class OpenTelemetrySdk implements OpenTelemetry, Closeable {
private static final Logger LOGGER = Logger.getLogger(OpenTelemetrySdk.class.getName());
@@ -38,7 +38,7 @@ public final class OpenTelemetrySdk implements OpenTelemetry, Closeable {
private final ObfuscatedLoggerProvider loggerProvider;
private final ContextPropagators propagators;
- OpenTelemetrySdk(
+ protected OpenTelemetrySdk(
SdkTracerProvider tracerProvider,
SdkMeterProvider meterProvider,
SdkLoggerProvider loggerProvider,
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 8fb5eafdf47..c6a48a0dbad 100644
--- a/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java
+++ b/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java
@@ -406,34 +406,13 @@ void stringRepresentation() {
.setPropagators(ContextPropagators.create(propagator))
.build();
+ // Test that toString delegates to underlying classes, and make sure their toString is also
+ // nice.
assertThat(sdk.toString())
- .isEqualTo(
- "OpenTelemetrySdk{"
- + "tracerProvider=SdkTracerProvider{"
- + "clock=SystemClock{}, "
- + "idGenerator=RandomIdGenerator{}, "
- + "resource=Resource{schemaUrl=null, attributes={service.name=\"otel-test\"}}, "
- + "spanLimitsSupplier=SpanLimitsValue{maxNumberOfAttributes=128, maxNumberOfEvents=128, maxNumberOfLinks=128, maxNumberOfAttributesPerEvent=128, maxNumberOfAttributesPerLink=128, maxAttributeValueLength=2147483647}, "
- + "sampler=ParentBased{root:AlwaysOnSampler,remoteParentSampled:AlwaysOnSampler,remoteParentNotSampled:AlwaysOffSampler,localParentSampled:AlwaysOnSampler,localParentNotSampled:AlwaysOffSampler}, "
- + "spanProcessor=SimpleSpanProcessor{spanExporter=MultiSpanExporter{spanExporters=[MockSpanExporter{}, MockSpanExporter{}]}, exportUnsampledSpans=false}, "
- + "tracerConfigurator=ScopeConfiguratorImpl{conditions=[]}"
- + "}, "
- + "meterProvider=SdkMeterProvider{"
- + "clock=SystemClock{}, "
- + "resource=Resource{schemaUrl=null, attributes={service.name=\"otel-test\"}}, "
- + "metricReaders=[PeriodicMetricReader{exporter=MockMetricExporter{}, intervalNanos=60000000000}], "
- + "metricProducers=[], "
- + "views=[RegisteredView{instrumentSelector=InstrumentSelector{instrumentName=instrument}, view=View{name=new-instrument, aggregation=DefaultAggregation, attributesProcessor=NoopAttributesProcessor{}, cardinalityLimit=2000}}], "
- + "meterConfigurator=ScopeConfiguratorImpl{conditions=[]}"
- + "}, "
- + "loggerProvider=SdkLoggerProvider{"
- + "clock=SystemClock{}, "
- + "resource=Resource{schemaUrl=null, attributes={service.name=\"otel-test\"}}, "
- + "logLimits=LogLimits{maxNumberOfAttributes=128, maxAttributeValueLength=2147483647}, "
- + "logRecordProcessor=SimpleLogRecordProcessor{logRecordExporter=MultiLogRecordExporter{logRecordExporters=[MockLogRecordExporter{}, MockLogRecordExporter{}]}}, "
- + "loggerConfigurator=ScopeConfiguratorImpl{conditions=[]}"
- + "}, "
- + "propagators=DefaultContextPropagators{textMapPropagator=MockTextMapPropagator{}}"
- + "}");
+ .matches("OpenTelemetrySdk\\{.*}")
+ .matches("OpenTelemetrySdk\\{tracerProvider=SdkTracerProvider\\{.*}.*}")
+ .matches("OpenTelemetrySdk\\{.*, meterProvider=SdkMeterProvider\\{.*}.*}")
+ .matches("OpenTelemetrySdk\\{.*, loggerProvider=SdkLoggerProvider\\{.*}.*}")
+ .matches("OpenTelemetrySdk\\{.*, propagators=DefaultContextPropagators\\{.*}}");
}
}