From 6a9d67c672f9e890c7f4f0a276cb919dac32d97f Mon Sep 17 00:00:00 2001 From: navneet singh Date: Wed, 28 Oct 2026 09:30:45 +0530 Subject: [PATCH 1/3] Avoid shared internal ComponentProvider (#6970) - Atomically promote DeclarativeConfigProperties and DeclarativeConfigException to io.opentelemetry.api.config in opentelemetry-api. - Retain deprecated backward-compatibility shims for DeclarativeConfigProperties and DeclarativeConfigException in opentelemetry-api-incubator. - Promote ComponentProvider interface to io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig in opentelemetry-sdk-extension-autoconfigure-spi. - Retain deprecated io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider extending the new interface with bidirectional default bridge methods for backward compatibility with external plugins. - Update DeclarativeConfigContext to discover both modern and legacy providers with (type, name) deduplication. - Migrate all repository providers, META-INF/services/ descriptors, and OSGi service loader manifests across exporters, extensions, and declarative config. - Unexempt opentelemetry-exporter-logging from NoSharedInternalCodeTest. - Update opentelemetry-api and autoconfigure-spi jApiCmp baseline diffs. --- .../all/NoSharedInternalCodeTest.java | 1 - .../config/DeclarativeConfigException.java | 22 ++ .../config/DeclarativeConfigProperties.java | 288 ++++++++++++++++++ .../config/DeclarativeConfigPropertyUtil.java | 2 +- .../EmptyDeclarativeConfigProperties.java | 2 +- .../api/incubator/ExtendedOpenTelemetry.java | 2 +- .../api/incubator/config/ConfigProvider.java | 1 + .../config/DeclarativeConfigException.java | 10 +- .../config/DeclarativeConfigProperties.java | 284 ++--------------- .../config/InstrumentationConfigUtil.java | 2 + .../incubator/ExtendedOpenTelemetryTest.java | 2 +- .../DeclarativeConfigPropertiesShimTest.java | 31 ++ .../DeclarativeConfigPropertyUtilTest.java | 1 + .../config/InstrumentationConfigUtilTest.java | 1 + .../InstrumentationConfigUtilTest.java | 2 +- .../current_vs_latest/opentelemetry-api.txt | 45 +++ ...emetry-sdk-extension-autoconfigure-spi.txt | 7 +- .../IncubatingExporterBuilderUtil.java | 2 +- exporters/logging-otlp/build.gradle.kts | 2 +- .../otlp/internal/OutputStreamConfigUtil.java | 2 +- ...outLogRecordExporterComponentProvider.java | 4 +- ...StdoutMetricExporterComponentProvider.java | 4 +- ...lpStdoutSpanExporterComponentProvider.java | 4 +- ...e.spi.declarativeconfig.ComponentProvider} | 1 + .../otlp/AbstractOtlpStdoutExporterTest.java | 4 +- .../otlp/OtlpStdoutMetricExporterTest.java | 2 +- exporters/logging/build.gradle.kts | 2 +- ...oleLogRecordExporterComponentProvider.java | 4 +- ...onsoleMetricExporterComponentProvider.java | 4 +- .../ConsoleSpanExporterComponentProvider.java | 4 +- ...e.spi.declarativeconfig.ComponentProvider} | 1 + exporters/otlp/all/build.gradle.kts | 2 +- .../internal/OtlpDeclarativeConfigUtil.java | 4 +- ...rpcLogRecordExporterComponentProvider.java | 4 +- ...lpGrpcMetricExporterComponentProvider.java | 4 +- ...OtlpGrpcSpanExporterComponentProvider.java | 4 +- ...ttpLogRecordExporterComponentProvider.java | 4 +- ...lpHttpMetricExporterComponentProvider.java | 4 +- ...OtlpHttpSpanExporterComponentProvider.java | 4 +- ...e.spi.declarativeconfig.ComponentProvider} | 9 +- exporters/prometheus/build.gradle.kts | 2 +- .../internal/PrometheusComponentProvider.java | 6 +- ...e.spi.declarativeconfig.ComponentProvider} | 1 + extensions/trace-propagators/build.gradle.kts | 2 +- .../internal/B3ComponentProvider.java | 4 +- .../internal/B3MultiComponentProvider.java | 4 +- ...e.spi.declarativeconfig.ComponentProvider} | 1 + .../AutoconfigureDeclarativeConfigTest.java | 2 +- .../autoconfigure-spi/build.gradle.kts | 1 + .../declarativeconfig/ComponentProvider.java | 62 ++++ .../spi/internal/ComponentProvider.java | 62 ++-- .../ExtendedDeclarativeConfigProperties.java | 2 +- ...torDeclarativeConfigPropertiesAdapter.java | 121 ++++++++ .../internal/ComponentProviderBridgeTest.java | 105 +++++++ ...eclarativeConfigPropertiesAdapterTest.java | 83 +++++ .../autoconfigure/DeclarativeConfigUtil.java | 2 +- .../DeclarativeConfigurationSpiTest.java | 2 +- .../autoconfigure/TestResourceDetector.java | 4 +- ...e.spi.declarativeconfig.ComponentProvider} | 1 + sdk-extensions/declarative-config/README.md | 2 +- .../declarative-config/build.gradle.kts | 2 +- .../declarativeconfig/AggregationFactory.java | 2 +- .../AttributeListFactory.java | 2 +- .../ComposableRuleBasedSamplerFactory.java | 2 +- .../declarativeconfig/ConfigKeyValue.java | 2 +- .../DeclarativeConfigContext.java | 27 +- .../DeclarativeConfiguration.java | 6 +- .../DeclarativeConfigurationBuilder.java | 4 +- .../DeclarativeConfigurationCustomizer.java | 2 +- .../EntitiesEnvResourceDetector.java | 4 +- .../ExemplarFilterFactory.java | 2 +- .../declarativeconfig/FileConfigUtil.java | 4 +- .../IncludeExcludeFactory.java | 2 +- .../InstrumentSelectorFactory.java | 2 +- .../MetricReaderFactory.java | 2 +- .../OpenTelemetryConfigurationFactory.java | 4 +- .../declarativeconfig/PropagatorFactory.java | 2 +- .../declarativeconfig/SamplerFactory.java | 2 +- .../ServiceResourceDetector.java | 4 +- .../YamlDeclarativeConfigProperties.java | 4 +- ...e.spi.declarativeconfig.ComponentProvider} | 1 + .../AttributeListFactoryTest.java | 2 +- ...ComposableRuleBasedSamplerFactoryTest.java | 2 +- .../DeclarativeConfigContextTest.java | 104 ++++++- .../DeclarativeConfigurationBuilderTest.java | 2 +- .../DeclarativeConfigurationCreateTest.java | 2 +- .../DeclarativeConfigurationParseTest.java | 2 +- .../EntitiesEnvResourceDetectorTest.java | 2 +- .../IdGeneratorFactoryTest.java | 2 +- .../IncludeExcludeFactoryTest.java | 2 +- .../InstrumentSelectorFactoryTest.java | 2 +- .../LogRecordExporterFactoryTest.java | 2 +- .../LogRecordProcessorFactoryTest.java | 2 +- .../MetricExporterFactoryTest.java | 2 +- .../MetricReaderFactoryTest.java | 2 +- ...OpenTelemetryConfigurationFactoryTest.java | 2 +- .../PropagatorFactoryTest.java | 4 +- .../ResourceFactoryTest.java | 4 +- .../declarativeconfig/SamplerFactoryTest.java | 2 +- .../ServiceResourceDetectorTest.java | 2 +- .../SpanExporterFactoryTest.java | 2 +- .../SpanProcessorFactoryTest.java | 2 +- .../YamlDeclarativeConfigPropertiesTest.java | 4 +- .../IdGeneratorComponentProvider.java | 4 +- .../LogRecordExporterComponentProvider.java | 4 +- .../LogRecordProcessorComponentProvider.java | 4 +- .../MetricExporterComponentProvider.java | 4 +- .../component/ResourceComponentProvider.java | 4 +- .../ResourceFirstComponentProvider.java | 4 +- .../ResourceSecondComponentProvider.java | 4 +- .../component/SamplerComponentProvider.java | 4 +- .../SpanExporterComponentProvider.java | 4 +- .../SpanProcessorComponentProvider.java | 4 +- .../TextMapPropagatorComponentProvider.java | 4 +- ...e.spi.declarativeconfig.ComponentProvider} | 1 + .../jaeger-remote-sampler/build.gradle.kts | 2 +- .../JaegerRemoteSamplerComponentProvider.java | 6 +- ...e.spi.declarativeconfig.ComponentProvider} | 1 + .../io/opentelemetry/sdk/IncubatingUtil.java | 2 +- .../internal/ExtendedOpenTelemetrySdk.java | 2 +- .../sdk/internal/SdkConfigProvider.java | 2 +- 121 files changed, 1085 insertions(+), 460 deletions(-) create mode 100644 api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigException.java create mode 100644 api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigProperties.java rename api/{incubator/src/main/java/io/opentelemetry/api/incubator => all/src/main/java/io/opentelemetry/api}/config/DeclarativeConfigPropertyUtil.java (98%) rename api/{incubator/src/main/java/io/opentelemetry/api/incubator => all/src/main/java/io/opentelemetry/api}/config/EmptyDeclarativeConfigProperties.java (97%) create mode 100644 api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesShimTest.java rename exporters/logging-otlp/src/main/resources/META-INF/services/{io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider => io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} (99%) rename exporters/logging/src/main/resources/META-INF/services/{io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider => io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} (99%) rename exporters/otlp/all/src/main/resources/META-INF/services/{io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider => io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} (99%) rename exporters/prometheus/src/main/resources/META-INF/services/{io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider => io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} (98%) rename extensions/trace-propagators/src/main/resources/META-INF/services/{io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider => io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} (99%) create mode 100644 sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/ComponentProvider.java create mode 100644 sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapter.java create mode 100644 sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProviderBridgeTest.java create mode 100644 sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapterTest.java rename sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/resources/META-INF/services/{io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider => io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} (98%) rename sdk-extensions/declarative-config/src/main/resources/META-INF/services/{io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider => io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} (99%) rename sdk-extensions/declarative-config/src/test/resources/META-INF/services/{io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider => io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} (99%) rename sdk-extensions/jaeger-remote-sampler/src/main/resources/META-INF/services/{io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider => io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} (98%) diff --git a/all/src/test/java/io/opentelemetry/all/NoSharedInternalCodeTest.java b/all/src/test/java/io/opentelemetry/all/NoSharedInternalCodeTest.java index 58f276b290e..2e2137e3a9b 100644 --- a/all/src/test/java/io/opentelemetry/all/NoSharedInternalCodeTest.java +++ b/all/src/test/java/io/opentelemetry/all/NoSharedInternalCodeTest.java @@ -34,7 +34,6 @@ class NoSharedInternalCodeTest { private static final Set exemptions = Set.of( "opentelemetry-exporter-common", - "opentelemetry-exporter-logging", "opentelemetry-exporter-logging-otlp", "opentelemetry-exporter-prometheus", "opentelemetry-extension-trace-propagators", diff --git a/api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigException.java b/api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigException.java new file mode 100644 index 00000000000..2a9f221d59e --- /dev/null +++ b/api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigException.java @@ -0,0 +1,22 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.api.config; + +/** An exception that is thrown when errors occur with declarative configuration. */ +public class DeclarativeConfigException extends RuntimeException { + + private static final long serialVersionUID = 3036584181551130522L; + + /** Create a new configuration exception with specified {@code message} and without a cause. */ + public DeclarativeConfigException(String message) { + super(message); + } + + /** Create a new configuration exception with specified {@code message} and {@code cause}. */ + public DeclarativeConfigException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigProperties.java b/api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigProperties.java new file mode 100644 index 00000000000..bcd17a98d9b --- /dev/null +++ b/api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigProperties.java @@ -0,0 +1,288 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.api.config; + +import io.opentelemetry.common.ComponentLoader; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +/** + * An interface for accessing declarative configuration data. + * + *

An instance of {@link DeclarativeConfigProperties} is equivalent to a YAML mapping node. It has accessors for + * reading scalar properties, {@link #getStructured(String)} for reading children which are + * themselves mappings, and {@link #getStructuredList(String)} for reading children which are + * sequences of mappings. + */ +public interface DeclarativeConfigProperties { + + /** + * Return an empty {@link DeclarativeConfigProperties} instance. + * + *

Useful for walking the tree without checking for null. For example, to access a string key + * nested at .foo.bar.baz, call: {@code config.getStructured("foo", empty()).getStructured("bar", + * empty()).getString("baz")}. + */ + static DeclarativeConfigProperties empty() { + return EmptyDeclarativeConfigProperties.getInstance(); + } + + /** Return a map representation of the {@code declarativeConfigProperties}. */ + static Map toMap(DeclarativeConfigProperties declarativeConfigProperties) { + return DeclarativeConfigPropertyUtil.toMap(declarativeConfigProperties); + } + + /** + * Returns a {@link String} configuration property. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * string + */ + @Nullable + String getString(String name); + + /** + * Returns a {@link String} configuration property. + * + * @return a {@link String} configuration property or {@code defaultValue} if a property with + * {@code name} has not been configured or is not a valid scalar string + */ + default String getString(String name, String defaultValue) { + String value = getString(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link Boolean} configuration property. Implementations should use the same rules as + * {@link Boolean#parseBoolean(String)} for handling the values. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * boolean + */ + @Nullable + Boolean getBoolean(String name); + + /** + * Returns a {@link Boolean} configuration property. + * + * @return a {@link Boolean} configuration property or {@code defaultValue} if a property with + * {@code name} has not been configured or is not a valid scalar boolean + */ + default boolean getBoolean(String name, boolean defaultValue) { + Boolean value = getBoolean(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link Integer} configuration property. + * + *

If the underlying config property is {@link Long}, it is converted to {@link Integer} with + * {@link Long#intValue()} which may result in loss of precision. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * integer + */ + @Nullable + Integer getInt(String name); + + /** + * Returns a {@link Integer} configuration property. + * + *

If the underlying config property is {@link Long}, it is converted to {@link Integer} with + * {@link Long#intValue()} which may result in loss of precision. + * + * @return a {@link Integer} configuration property or {@code defaultValue} if a property with + * {@code name} has not been configured or is not a valid scalar integer + */ + default int getInt(String name, int defaultValue) { + Integer value = getInt(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link Long} configuration property. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * long + */ + @Nullable + Long getLong(String name); + + /** + * Returns a {@link Long} configuration property. + * + * @return a {@link Long} configuration property or {@code defaultValue} if a property with {@code + * name} has not been configured or is not a valid scalar long + */ + default long getLong(String name, long defaultValue) { + Long value = getLong(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link Double} configuration property. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * double + */ + @Nullable + Double getDouble(String name); + + /** + * Returns a {@link Double} configuration property. + * + * @return a {@link Double} configuration property or {@code defaultValue} if a property with + * {@code name} has not been configured or is not a valid scalar double + */ + default double getDouble(String name, double defaultValue) { + Double value = getDouble(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link List} configuration property. Empty values and values which do not map to the + * {@code scalarType} will be removed. + * + * @param name the property name + * @param scalarType the scalar type, one of {@link String}, {@link Boolean}, {@link Long} or + * {@link Double} + * @return a {@link List} configuration property, or null if the property has not been configured + * or if the property is not a valid sequence of scalars + * @throws DeclarativeConfigException if {@code scalarType} is not supported + */ + @Nullable + List getScalarList(String name, Class scalarType); + + /** + * Returns a {@link List} configuration property. Empty values and values which do not map to the + * {@code scalarType} will be removed. + * + * @param name the property name + * @param scalarType the scalar type, one of {@link String}, {@link Boolean}, {@link Long} or + * {@link Double} + * @return a {@link List} configuration property or {@code defaultValue} if a property with {@code + * name} has not been configured or is not a valid sequence of scalars + */ + default List getScalarList(String name, Class scalarType, List defaultValue) { + List value = getScalarList(name, scalarType); + return value == null ? defaultValue : value; + } + + /** + * Returns whether the property with {@code name} holds a value which {@link #getString(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar string, + * false otherwise, including when the property is null + */ + boolean isString(String name); + + /** + * Returns whether the property with {@code name} holds a value which {@link #getBoolean(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar boolean, + * false otherwise, including when the property is null + */ + boolean isBoolean(String name); + + /** + * Returns whether the property with {@code name} holds a value which {@link #getInt(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar integer, + * false otherwise, including when the property is null + */ + boolean isInt(String name); + + /** + * Returns whether the property with {@code name} holds a value which {@link #getLong(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar long, + * false otherwise, including when the property is null + */ + boolean isLong(String name); + + /** + * Returns whether the property with {@code name} holds a value which {@link #getDouble(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar double, + * false otherwise, including when the property is null + */ + boolean isDouble(String name); + + /** + * Returns a {@link DeclarativeConfigProperties} configuration property. + * + * @return a map-valued configuration property, or {@code null} if {@code name} has not been + * configured or is not a mapping + */ + @Nullable + DeclarativeConfigProperties getStructured(String name); + + /** + * Returns a {@link DeclarativeConfigProperties} configuration property. + * + * @return a map-valued configuration property, or {@code defaultValue} if {@code name} has not + * been configured or is not a mapping + */ + default DeclarativeConfigProperties getStructured( + String name, DeclarativeConfigProperties defaultValue) { + DeclarativeConfigProperties value = getStructured(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link DeclarativeConfigProperties} configuration property, or {@link #empty()} if a + * property with {@code name} has not been configured. + * + *

This is syntactic sugar for the common operation of calling {@code + * config.getStructured(name, empty())}. If you need to distinguish between a property being set + * but empty vs. not set, use {@link #getStructured(String)}. + * + * @return a map-valued configuration property, or an empty {@link DeclarativeConfigProperties} + * instance if {@code name} has not been configured or is not a mapping + */ + default DeclarativeConfigProperties get(String name) { + return getStructured(name, empty()); + } + + /** + * Returns a list of {@link DeclarativeConfigProperties} configuration property. + * + * @return a list of map-valued configuration property, or {@code null} if {@code name} has not + * been configured or is not a sequence of mappings + */ + @Nullable + List getStructuredList(String name); + + /** + * Returns a list of {@link DeclarativeConfigProperties} configuration property. + * + * @return a list of map-valued configuration property, or {@code defaultValue} if {@code name} + * has not been configured or is not a sequence of mappings + */ + default List getStructuredList( + String name, List defaultValue) { + List value = getStructuredList(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a set of all configuration property keys. + * + * @return the configuration property keys + */ + Set getPropertyKeys(); + + /** Return a {@link ComponentLoader} that should be used to load SPIs. */ + ComponentLoader getComponentLoader(); +} diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtil.java b/api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigPropertyUtil.java similarity index 98% rename from api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtil.java rename to api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigPropertyUtil.java index 2fbcc17cb99..f736e65ac13 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtil.java +++ b/api/all/src/main/java/io/opentelemetry/api/config/DeclarativeConfigPropertyUtil.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.api.incubator.config; +package io.opentelemetry.api.config; import static java.util.stream.Collectors.toList; diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/EmptyDeclarativeConfigProperties.java b/api/all/src/main/java/io/opentelemetry/api/config/EmptyDeclarativeConfigProperties.java similarity index 97% rename from api/incubator/src/main/java/io/opentelemetry/api/incubator/config/EmptyDeclarativeConfigProperties.java rename to api/all/src/main/java/io/opentelemetry/api/config/EmptyDeclarativeConfigProperties.java index 012800a131b..4f4945c3c11 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/EmptyDeclarativeConfigProperties.java +++ b/api/all/src/main/java/io/opentelemetry/api/config/EmptyDeclarativeConfigProperties.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.api.incubator.config; +package io.opentelemetry.api.config; import io.opentelemetry.common.ComponentLoader; import java.util.Collections; 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 index 74883fa2302..35730917f23 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetry.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetry.java @@ -6,8 +6,8 @@ package io.opentelemetry.api.incubator; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; /** Extension to {@link OpenTelemetry} with experimental APIs. */ public interface ExtendedOpenTelemetry extends OpenTelemetry { diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java index 8a5f9800869..a51b2eaea3b 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java @@ -5,6 +5,7 @@ package io.opentelemetry.api.incubator.config; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import javax.annotation.concurrent.ThreadSafe; /** diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigException.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigException.java index 3ce49c6454d..c4be13c8e1c 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigException.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigException.java @@ -5,8 +5,14 @@ package io.opentelemetry.api.incubator.config; -/** An exception that is thrown when errors occur with declarative configuration. */ -public final class DeclarativeConfigException extends RuntimeException { +/** + * An exception that is thrown when errors occur with declarative configuration. + * + * @deprecated Use {@link io.opentelemetry.api.config.DeclarativeConfigException} instead. + */ +@Deprecated +public class DeclarativeConfigException + extends io.opentelemetry.api.config.DeclarativeConfigException { private static final long serialVersionUID = 3036584181551130522L; diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigProperties.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigProperties.java index 09c69a0c490..27c1e6bbbde 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigProperties.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigProperties.java @@ -5,287 +5,39 @@ package io.opentelemetry.api.incubator.config; -import io.opentelemetry.common.ComponentLoader; -import java.util.List; import java.util.Map; -import java.util.Set; -import javax.annotation.Nullable; /** * An interface for accessing declarative configuration data. * - *

An instance of {@link DeclarativeConfigProperties} is equivalent to a YAML mapping node. It has accessors for - * reading scalar properties, {@link #getStructured(String)} for reading children which are - * themselves mappings, and {@link #getStructuredList(String)} for reading children which are - * sequences of mappings. - * - *

This class is internal and is hence not for public use. Its APIs are unstable and can change - * at any time. + * @deprecated Use {@link io.opentelemetry.api.config.DeclarativeConfigProperties} instead. */ -public interface DeclarativeConfigProperties { +@Deprecated +public interface DeclarativeConfigProperties + extends io.opentelemetry.api.config.DeclarativeConfigProperties { /** * Return an empty {@link DeclarativeConfigProperties} instance. * - *

Useful for walking the tree without checking for null. For example, to access a string key - * nested at .foo.bar.baz, call: {@code config.getStructured("foo", empty()).getStructured("bar", - * empty()).getString("baz")}. - */ - static DeclarativeConfigProperties empty() { - return EmptyDeclarativeConfigProperties.getInstance(); - } - - /** Return a map representation of the {@code declarativeConfigProperties}. */ - static Map toMap(DeclarativeConfigProperties declarativeConfigProperties) { - return DeclarativeConfigPropertyUtil.toMap(declarativeConfigProperties); - } - - /** - * Returns a {@link String} configuration property. - * - * @return null if the property has not been configured or if the property is not a valid scalar - * string - */ - @Nullable - String getString(String name); - - /** - * Returns a {@link String} configuration property. - * - * @return a {@link String} configuration property or {@code defaultValue} if a property with - * {@code name} has not been configured or is not a valid scalar string - */ - default String getString(String name, String defaultValue) { - String value = getString(name); - return value == null ? defaultValue : value; - } - - /** - * Returns a {@link Boolean} configuration property. Implementations should use the same rules as - * {@link Boolean#parseBoolean(String)} for handling the values. - * - * @return null if the property has not been configured or if the property is not a valid scalar - * boolean - */ - @Nullable - Boolean getBoolean(String name); - - /** - * Returns a {@link Boolean} configuration property. - * - * @return a {@link Boolean} configuration property or {@code defaultValue} if a property with - * {@code name} has not been configured or is not a valid scalar boolean - */ - default boolean getBoolean(String name, boolean defaultValue) { - Boolean value = getBoolean(name); - return value == null ? defaultValue : value; - } - - /** - * Returns a {@link Integer} configuration property. - * - *

If the underlying config property is {@link Long}, it is converted to {@link Integer} with - * {@link Long#intValue()} which may result in loss of precision. - * - * @return null if the property has not been configured or if the property is not a valid scalar - * integer - */ - @Nullable - Integer getInt(String name); - - /** - * Returns a {@link Integer} configuration property. - * - *

If the underlying config property is {@link Long}, it is converted to {@link Integer} with - * {@link Long#intValue()} which may result in loss of precision. - * - * @return a {@link Integer} configuration property or {@code defaultValue} if a property with - * {@code name} has not been configured or is not a valid scalar integer - */ - default int getInt(String name, int defaultValue) { - Integer value = getInt(name); - return value == null ? defaultValue : value; - } - - /** - * Returns a {@link Long} configuration property. - * - * @return null if the property has not been configured or if the property is not a valid scalar - * long - */ - @Nullable - Long getLong(String name); - - /** - * Returns a {@link Long} configuration property. - * - * @return a {@link Long} configuration property or {@code defaultValue} if a property with {@code - * name} has not been configured or is not a valid scalar long + * @deprecated Use {@link io.opentelemetry.api.config.DeclarativeConfigProperties#empty()} + * instead. */ - default long getLong(String name, long defaultValue) { - Long value = getLong(name); - return value == null ? defaultValue : value; + @Deprecated + static io.opentelemetry.api.config.DeclarativeConfigProperties empty() { + return io.opentelemetry.api.config.DeclarativeConfigProperties.empty(); } /** - * Returns a {@link Double} configuration property. + * Return a map representation of the {@code declarativeConfigProperties}. * - * @return null if the property has not been configured or if the property is not a valid scalar - * double + * @deprecated Use {@link + * io.opentelemetry.api.config.DeclarativeConfigProperties#toMap(io.opentelemetry.api.config.DeclarativeConfigProperties)} + * instead. */ - @Nullable - Double getDouble(String name); - - /** - * Returns a {@link Double} configuration property. - * - * @return a {@link Double} configuration property or {@code defaultValue} if a property with - * {@code name} has not been configured or is not a valid scalar double - */ - default double getDouble(String name, double defaultValue) { - Double value = getDouble(name); - return value == null ? defaultValue : value; + @Deprecated + static Map toMap( + io.opentelemetry.api.config.DeclarativeConfigProperties declarativeConfigProperties) { + return io.opentelemetry.api.config.DeclarativeConfigProperties.toMap( + declarativeConfigProperties); } - - /** - * Returns a {@link List} configuration property. Empty values and values which do not map to the - * {@code scalarType} will be removed. - * - * @param name the property name - * @param scalarType the scalar type, one of {@link String}, {@link Boolean}, {@link Long} or - * {@link Double} - * @return a {@link List} configuration property, or null if the property has not been configured - * or if the property is not a valid sequence of scalars - * @throws DeclarativeConfigException if {@code scalarType} is not supported - */ - @Nullable - List getScalarList(String name, Class scalarType); - - /** - * Returns a {@link List} configuration property. Empty values and values which do not map to the - * {@code scalarType} will be removed. - * - * @param name the property name - * @param scalarType the scalar type, one of {@link String}, {@link Boolean}, {@link Long} or - * {@link Double} - * @return a {@link List} configuration property or {@code defaultValue} if a property with {@code - * name} has not been configured or is not a valid sequence of scalars - */ - default List getScalarList(String name, Class scalarType, List defaultValue) { - List value = getScalarList(name, scalarType); - return value == null ? defaultValue : value; - } - - /** - * Returns whether the property with {@code name} holds a value which {@link #getString(String)} - * accepts. - * - * @return true if a property with {@code name} has been configured and is a valid scalar string, - * false otherwise, including when the property is null - */ - boolean isString(String name); - - /** - * Returns whether the property with {@code name} holds a value which {@link #getBoolean(String)} - * accepts. - * - * @return true if a property with {@code name} has been configured and is a valid scalar boolean, - * false otherwise, including when the property is null - */ - boolean isBoolean(String name); - - /** - * Returns whether the property with {@code name} holds a value which {@link #getInt(String)} - * accepts. - * - * @return true if a property with {@code name} has been configured and is a valid scalar integer, - * false otherwise, including when the property is null - */ - boolean isInt(String name); - - /** - * Returns whether the property with {@code name} holds a value which {@link #getLong(String)} - * accepts. - * - * @return true if a property with {@code name} has been configured and is a valid scalar long, - * false otherwise, including when the property is null - */ - boolean isLong(String name); - - /** - * Returns whether the property with {@code name} holds a value which {@link #getDouble(String)} - * accepts. - * - * @return true if a property with {@code name} has been configured and is a valid scalar double, - * false otherwise, including when the property is null - */ - boolean isDouble(String name); - - /** - * Returns a {@link DeclarativeConfigProperties} configuration property. - * - * @return a map-valued configuration property, or {@code null} if {@code name} has not been - * configured or is not a mapping - */ - @Nullable - DeclarativeConfigProperties getStructured(String name); - - /** - * Returns a {@link DeclarativeConfigProperties} configuration property. - * - * @return a map-valued configuration property, or {@code defaultValue} if {@code name} has not - * been configured or is not a mapping - */ - default DeclarativeConfigProperties getStructured( - String name, DeclarativeConfigProperties defaultValue) { - DeclarativeConfigProperties value = getStructured(name); - return value == null ? defaultValue : value; - } - - /** - * Returns a {@link DeclarativeConfigProperties} configuration property, or {@link #empty()} if a - * property with {@code name} has not been configured. - * - *

This is syntactic sugar for the common operation of calling {@code - * config.getStructured(name, empty())}. If you need to distinguish between a property being set - * but empty vs. not set, use {@link #getStructured(String)}. - * - * @return a map-valued configuration property, or an empty {@link DeclarativeConfigProperties} - * instance if {@code name} has not been configured or is not a mapping - */ - default DeclarativeConfigProperties get(String name) { - return getStructured(name, empty()); - } - - /** - * Returns a list of {@link DeclarativeConfigProperties} configuration property. - * - * @return a list of map-valued configuration property, or {@code null} if {@code name} has not - * been configured or is not a sequence of mappings - */ - @Nullable - List getStructuredList(String name); - - /** - * Returns a list of {@link DeclarativeConfigProperties} configuration property. - * - * @return a list of map-valued configuration property, or {@code defaultValue} if {@code name} - * has not been configured or is not a sequence of mappings - */ - default List getStructuredList( - String name, List defaultValue) { - List value = getStructuredList(name); - return value == null ? defaultValue : value; - } - - /** - * Returns a set of all configuration property keys. - * - * @return the configuration property keys - */ - Set getPropertyKeys(); - - /** Return a {@link ComponentLoader} that should be used to load SPIs. */ - ComponentLoader getComponentLoader(); } diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtil.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtil.java index 3003448d5c5..0cb2e31fc44 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtil.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtil.java @@ -6,6 +6,8 @@ package io.opentelemetry.api.incubator.config; import com.fasterxml.jackson.databind.ObjectMapper; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import java.util.List; import java.util.Map; import java.util.function.Function; diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetryTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetryTest.java index 5907cc41166..94bc73dabc1 100644 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetryTest.java +++ b/api/incubator/src/test/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetryTest.java @@ -11,8 +11,8 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.logs.ExtendedDefaultLoggerProvider; import io.opentelemetry.api.incubator.logs.ExtendedLogger; import io.opentelemetry.api.incubator.metrics.ExtendedDefaultMeterProvider; diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesShimTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesShimTest.java new file mode 100644 index 00000000000..b78fb1c94bb --- /dev/null +++ b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesShimTest.java @@ -0,0 +1,31 @@ +/* + * 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 java.util.Map; +import org.junit.jupiter.api.Test; + +@SuppressWarnings("deprecation") +class DeclarativeConfigPropertiesShimTest { + + @Test + void empty() { + io.opentelemetry.api.config.DeclarativeConfigProperties empty = + DeclarativeConfigProperties.empty(); + assertThat(empty).isNotNull(); + assertThat(empty.getPropertyKeys()).isEmpty(); + } + + @Test + void toMap() { + io.opentelemetry.api.config.DeclarativeConfigProperties empty = + DeclarativeConfigProperties.empty(); + Map map = DeclarativeConfigProperties.toMap(empty); + assertThat(map).isNotNull().isEmpty(); + } +} diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtilTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtilTest.java index ab69ba0781c..c452061fcc2 100644 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtilTest.java +++ b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtilTest.java @@ -9,6 +9,7 @@ import com.google.common.collect.ImmutableMap; import io.github.netmikey.logunit.api.LogCapturer; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.YamlDeclarativeConfigProperties; import java.util.Arrays; diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtilTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtilTest.java index 1c9b8340a4b..5556bfb8d4d 100644 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtilTest.java +++ b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtilTest.java @@ -8,6 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import com.google.common.collect.ImmutableMap; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.DeclarativeConfiguration; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.YamlDeclarativeConfigProperties; import io.opentelemetry.sdk.internal.SdkConfigProvider; diff --git a/api/incubator/src/testConvertToModel/java/io/opentelemetry/api/incubator/InstrumentationConfigUtilTest.java b/api/incubator/src/testConvertToModel/java/io/opentelemetry/api/incubator/InstrumentationConfigUtilTest.java index 088bb42bf20..67892d0ca58 100644 --- a/api/incubator/src/testConvertToModel/java/io/opentelemetry/api/incubator/InstrumentationConfigUtilTest.java +++ b/api/incubator/src/testConvertToModel/java/io/opentelemetry/api/incubator/InstrumentationConfigUtilTest.java @@ -11,8 +11,8 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableMap; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil; import io.opentelemetry.internal.testing.slf4j.SuppressLogger; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.DeclarativeConfiguration; diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt index 0d0f8ba2b1b..1c429c4f7c7 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt @@ -1,4 +1,49 @@ Comparing source compatibility of opentelemetry-api-1.68.0-SNAPSHOT.jar against opentelemetry-api-1.67.0.jar ++++ NEW CLASS: PUBLIC(+) io.opentelemetry.api.config.DeclarativeConfigException (compatible) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW INTERFACE: java.io.Serializable + +++ NEW SUPERCLASS: java.lang.RuntimeException + +++ NEW CONSTRUCTOR: PUBLIC(+) DeclarativeConfigException(java.lang.String) + +++ NEW CONSTRUCTOR: PUBLIC(+) DeclarativeConfigException(java.lang.String, java.lang.Throwable) ++++ NEW INTERFACE: PUBLIC(+) ABSTRACT(+) io.opentelemetry.api.config.DeclarativeConfigProperties (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.api.config.DeclarativeConfigProperties empty() + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.api.config.DeclarativeConfigProperties get(java.lang.String) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.Boolean getBoolean(java.lang.String) + +++ NEW ANNOTATION: javax.annotation.Nullable + +++ NEW METHOD: PUBLIC(+) boolean getBoolean(java.lang.String, boolean) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.common.ComponentLoader getComponentLoader() + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.Double getDouble(java.lang.String) + +++ NEW ANNOTATION: javax.annotation.Nullable + +++ NEW METHOD: PUBLIC(+) double getDouble(java.lang.String, double) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.Integer getInt(java.lang.String) + +++ NEW ANNOTATION: javax.annotation.Nullable + +++ NEW METHOD: PUBLIC(+) int getInt(java.lang.String, int) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.Long getLong(java.lang.String) + +++ NEW ANNOTATION: javax.annotation.Nullable + +++ NEW METHOD: PUBLIC(+) long getLong(java.lang.String, long) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.util.Set getPropertyKeys() + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.util.List getScalarList(java.lang.String, java.lang.Class) + +++ NEW ANNOTATION: javax.annotation.Nullable + GENERIC TEMPLATES: +++ T:java.lang.Object + +++ NEW METHOD: PUBLIC(+) java.util.List getScalarList(java.lang.String, java.lang.Class, java.util.List) + GENERIC TEMPLATES: +++ T:java.lang.Object + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String getString(java.lang.String) + +++ NEW ANNOTATION: javax.annotation.Nullable + +++ NEW METHOD: PUBLIC(+) java.lang.String getString(java.lang.String, java.lang.String) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.api.config.DeclarativeConfigProperties getStructured(java.lang.String) + +++ NEW ANNOTATION: javax.annotation.Nullable + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.api.config.DeclarativeConfigProperties getStructured(java.lang.String, io.opentelemetry.api.config.DeclarativeConfigProperties) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.util.List getStructuredList(java.lang.String) + +++ NEW ANNOTATION: javax.annotation.Nullable + +++ NEW METHOD: PUBLIC(+) java.util.List getStructuredList(java.lang.String, java.util.List) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) boolean isBoolean(java.lang.String) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) boolean isDouble(java.lang.String) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) boolean isInt(java.lang.String) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) boolean isLong(java.lang.String) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) boolean isString(java.lang.String) + +++ NEW METHOD: PUBLIC(+) STATIC(+) java.util.Map toMap(io.opentelemetry.api.config.DeclarativeConfigProperties) +++ NEW CLASS: PUBLIC(+) FINAL(+) io.opentelemetry.api.impl.Base16EncodingUtils (not serializable) +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. +++ NEW SUPERCLASS: java.lang.Object diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure-spi.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure-spi.txt index fa166d14326..ea679a8b06a 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure-spi.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure-spi.txt @@ -1,2 +1,7 @@ Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-spi-1.68.0-SNAPSHOT.jar against opentelemetry-sdk-extension-autoconfigure-spi-1.67.0.jar -No changes. \ No newline at end of file ++++ NEW INTERFACE: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.Object create(io.opentelemetry.api.config.DeclarativeConfigProperties) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String getName() + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.Class getType() diff --git a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/IncubatingExporterBuilderUtil.java b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/IncubatingExporterBuilderUtil.java index 86d2e01d1c1..8d8ec8d83a6 100644 --- a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/IncubatingExporterBuilderUtil.java +++ b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/IncubatingExporterBuilderUtil.java @@ -7,7 +7,7 @@ import static io.opentelemetry.sdk.metrics.Aggregation.explicitBucketHistogram; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; import io.opentelemetry.sdk.common.export.MemoryMode; import io.opentelemetry.sdk.metrics.Aggregation; diff --git a/exporters/logging-otlp/build.gradle.kts b/exporters/logging-otlp/build.gradle.kts index 55219c9daee..185268ea71c 100644 --- a/exporters/logging-otlp/build.gradle.kts +++ b/exporters/logging-otlp/build.gradle.kts @@ -12,7 +12,7 @@ otelJava.osgiServiceLoaderProvides.set(listOf( "io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider", "io.opentelemetry.sdk.autoconfigure.spi.metrics.ConfigurableMetricExporterProvider", "io.opentelemetry.sdk.autoconfigure.spi.logs.ConfigurableLogRecordExporterProvider", - "io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider", + "io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider", )) dependencies { diff --git a/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/OutputStreamConfigUtil.java b/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/OutputStreamConfigUtil.java index ed0b8a3d707..327d79ec7a8 100644 --- a/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/OutputStreamConfigUtil.java +++ b/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/OutputStreamConfigUtil.java @@ -5,7 +5,7 @@ package io.opentelemetry.exporter.logging.otlp.internal; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; import java.io.BufferedOutputStream; import java.io.IOException; diff --git a/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/logs/OtlpStdoutLogRecordExporterComponentProvider.java b/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/logs/OtlpStdoutLogRecordExporterComponentProvider.java index c2a943f2f17..6786db9cef7 100644 --- a/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/logs/OtlpStdoutLogRecordExporterComponentProvider.java +++ b/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/logs/OtlpStdoutLogRecordExporterComponentProvider.java @@ -5,10 +5,10 @@ package io.opentelemetry.exporter.logging.otlp.internal.logs; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil; import io.opentelemetry.exporter.logging.otlp.internal.OutputStreamConfigUtil; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.logs.export.LogRecordExporter; /** diff --git a/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/metrics/OtlpStdoutMetricExporterComponentProvider.java b/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/metrics/OtlpStdoutMetricExporterComponentProvider.java index 2d62bf105f1..2f2fea5c431 100644 --- a/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/metrics/OtlpStdoutMetricExporterComponentProvider.java +++ b/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/metrics/OtlpStdoutMetricExporterComponentProvider.java @@ -5,10 +5,10 @@ package io.opentelemetry.exporter.logging.otlp.internal.metrics; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil; import io.opentelemetry.exporter.logging.otlp.internal.OutputStreamConfigUtil; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.metrics.export.MetricExporter; /** diff --git a/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/traces/OtlpStdoutSpanExporterComponentProvider.java b/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/traces/OtlpStdoutSpanExporterComponentProvider.java index 9d51f2b9fac..aab536cd67a 100644 --- a/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/traces/OtlpStdoutSpanExporterComponentProvider.java +++ b/exporters/logging-otlp/src/main/java/io/opentelemetry/exporter/logging/otlp/internal/traces/OtlpStdoutSpanExporterComponentProvider.java @@ -5,10 +5,10 @@ package io.opentelemetry.exporter.logging.otlp.internal.traces; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil; import io.opentelemetry.exporter.logging.otlp.internal.OutputStreamConfigUtil; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.trace.export.SpanExporter; /** diff --git a/exporters/logging-otlp/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/exporters/logging-otlp/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider similarity index 99% rename from exporters/logging-otlp/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider rename to exporters/logging-otlp/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider index b90ec18cc20..6fe011882dd 100644 --- a/exporters/logging-otlp/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider +++ b/exporters/logging-otlp/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider @@ -1,3 +1,4 @@ io.opentelemetry.exporter.logging.otlp.internal.logs.OtlpStdoutLogRecordExporterComponentProvider io.opentelemetry.exporter.logging.otlp.internal.metrics.OtlpStdoutMetricExporterComponentProvider io.opentelemetry.exporter.logging.otlp.internal.traces.OtlpStdoutSpanExporterComponentProvider + diff --git a/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/AbstractOtlpStdoutExporterTest.java b/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/AbstractOtlpStdoutExporterTest.java index b97558948d2..16668eded6c 100644 --- a/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/AbstractOtlpStdoutExporterTest.java +++ b/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/AbstractOtlpStdoutExporterTest.java @@ -14,10 +14,10 @@ import com.google.common.collect.ImmutableList; import io.github.netmikey.logunit.api.LogCapturer; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.common.export.MemoryMode; import java.io.BufferedOutputStream; diff --git a/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/OtlpStdoutMetricExporterTest.java b/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/OtlpStdoutMetricExporterTest.java index 28b0b2e3587..455a4e67cf1 100644 --- a/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/OtlpStdoutMetricExporterTest.java +++ b/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/OtlpStdoutMetricExporterTest.java @@ -11,7 +11,7 @@ import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableMap; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.logging.otlp.internal.metrics.OtlpStdoutMetricExporter; import io.opentelemetry.exporter.logging.otlp.internal.metrics.OtlpStdoutMetricExporterBuilder; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; diff --git a/exporters/logging/build.gradle.kts b/exporters/logging/build.gradle.kts index 206c4e25978..3fb14ff8182 100644 --- a/exporters/logging/build.gradle.kts +++ b/exporters/logging/build.gradle.kts @@ -13,7 +13,7 @@ otelJava.osgiServiceLoaderProvides.set(listOf( "io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider", "io.opentelemetry.sdk.autoconfigure.spi.metrics.ConfigurableMetricExporterProvider", "io.opentelemetry.sdk.autoconfigure.spi.logs.ConfigurableLogRecordExporterProvider", - "io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider", + "io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider", )) dependencies { diff --git a/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleLogRecordExporterComponentProvider.java b/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleLogRecordExporterComponentProvider.java index 1ff39c6de30..c8acb72be6c 100644 --- a/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleLogRecordExporterComponentProvider.java +++ b/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleLogRecordExporterComponentProvider.java @@ -5,9 +5,9 @@ package io.opentelemetry.exporter.logging.internal; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.logging.SystemOutLogRecordExporter; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.logs.export.LogRecordExporter; /** diff --git a/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleMetricExporterComponentProvider.java b/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleMetricExporterComponentProvider.java index 35599f84c14..d38eeb731d7 100644 --- a/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleMetricExporterComponentProvider.java +++ b/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleMetricExporterComponentProvider.java @@ -5,9 +5,9 @@ package io.opentelemetry.exporter.logging.internal; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.logging.LoggingMetricExporter; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.metrics.export.MetricExporter; /** diff --git a/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleSpanExporterComponentProvider.java b/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleSpanExporterComponentProvider.java index fa5de9ee948..e259c53730f 100644 --- a/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleSpanExporterComponentProvider.java +++ b/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/internal/ConsoleSpanExporterComponentProvider.java @@ -5,9 +5,9 @@ package io.opentelemetry.exporter.logging.internal; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.logging.LoggingSpanExporter; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.trace.export.SpanExporter; /** diff --git a/exporters/logging/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/exporters/logging/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider similarity index 99% rename from exporters/logging/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider rename to exporters/logging/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider index ed0c3a77f5e..a8c21edc040 100644 --- a/exporters/logging/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider +++ b/exporters/logging/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider @@ -1,3 +1,4 @@ io.opentelemetry.exporter.logging.internal.ConsoleMetricExporterComponentProvider io.opentelemetry.exporter.logging.internal.ConsoleSpanExporterComponentProvider io.opentelemetry.exporter.logging.internal.ConsoleLogRecordExporterComponentProvider + diff --git a/exporters/otlp/all/build.gradle.kts b/exporters/otlp/all/build.gradle.kts index 51ec4b90e66..d16be56b911 100644 --- a/exporters/otlp/all/build.gradle.kts +++ b/exporters/otlp/all/build.gradle.kts @@ -17,7 +17,7 @@ otelJava.osgiServiceLoaderProvides.set(listOf( "io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider", "io.opentelemetry.sdk.autoconfigure.spi.metrics.ConfigurableMetricExporterProvider", "io.opentelemetry.sdk.autoconfigure.spi.logs.ConfigurableLogRecordExporterProvider", - "io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider", + "io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider", )) base.archivesName.set("opentelemetry-exporter-otlp") diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpDeclarativeConfigUtil.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpDeclarativeConfigUtil.java index b91bfebbbc6..b45487a7420 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpDeclarativeConfigUtil.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpDeclarativeConfigUtil.java @@ -10,9 +10,9 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.readFileBytes; import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.validateEndpoint; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcLogRecordExporterComponentProvider.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcLogRecordExporterComponentProvider.java index 3ef5a66403e..c96456ae282 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcLogRecordExporterComponentProvider.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcLogRecordExporterComponentProvider.java @@ -7,11 +7,11 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_LOGS; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter; import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.logs.export.LogRecordExporter; /** diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcMetricExporterComponentProvider.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcMetricExporterComponentProvider.java index 99a5cda2856..e2c22d93be8 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcMetricExporterComponentProvider.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcMetricExporterComponentProvider.java @@ -7,12 +7,12 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_METRICS; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil; import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter; import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.metrics.export.MetricExporter; /** diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcSpanExporterComponentProvider.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcSpanExporterComponentProvider.java index cec08da0eae..f25e86f3b82 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcSpanExporterComponentProvider.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpGrpcSpanExporterComponentProvider.java @@ -7,11 +7,11 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_TRACES; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter; import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.trace.export.SpanExporter; /** diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpLogRecordExporterComponentProvider.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpLogRecordExporterComponentProvider.java index d65d9164cb2..67d686b87f8 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpLogRecordExporterComponentProvider.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpLogRecordExporterComponentProvider.java @@ -7,11 +7,11 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_LOGS; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter; import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.logs.export.LogRecordExporter; /** diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpMetricExporterComponentProvider.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpMetricExporterComponentProvider.java index 77fd486724c..768d871c7c1 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpMetricExporterComponentProvider.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpMetricExporterComponentProvider.java @@ -7,12 +7,12 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_METRICS; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil; import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter; import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.metrics.export.MetricExporter; /** diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpSpanExporterComponentProvider.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpSpanExporterComponentProvider.java index b4b3a85c4f7..76c9f6edd5d 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpSpanExporterComponentProvider.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpHttpSpanExporterComponentProvider.java @@ -7,11 +7,11 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_TRACES; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter; import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.trace.export.SpanExporter; /** diff --git a/exporters/otlp/all/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/exporters/otlp/all/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider similarity index 99% rename from exporters/otlp/all/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider rename to exporters/otlp/all/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider index 98dcbcd9604..1eb742e89c5 100644 --- a/exporters/otlp/all/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider +++ b/exporters/otlp/all/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider @@ -1,6 +1,7 @@ -io.opentelemetry.exporter.otlp.internal.OtlpHttpMetricExporterComponentProvider -io.opentelemetry.exporter.otlp.internal.OtlpHttpSpanExporterComponentProvider -io.opentelemetry.exporter.otlp.internal.OtlpHttpLogRecordExporterComponentProvider -io.opentelemetry.exporter.otlp.internal.OtlpGrpcMetricExporterComponentProvider io.opentelemetry.exporter.otlp.internal.OtlpGrpcSpanExporterComponentProvider +io.opentelemetry.exporter.otlp.internal.OtlpGrpcMetricExporterComponentProvider io.opentelemetry.exporter.otlp.internal.OtlpGrpcLogRecordExporterComponentProvider +io.opentelemetry.exporter.otlp.internal.OtlpHttpSpanExporterComponentProvider +io.opentelemetry.exporter.otlp.internal.OtlpHttpMetricExporterComponentProvider +io.opentelemetry.exporter.otlp.internal.OtlpHttpLogRecordExporterComponentProvider + diff --git a/exporters/prometheus/build.gradle.kts b/exporters/prometheus/build.gradle.kts index 89c51fd0378..ce3c7aa0d82 100644 --- a/exporters/prometheus/build.gradle.kts +++ b/exporters/prometheus/build.gradle.kts @@ -9,7 +9,7 @@ otelJava.requireSuppressWarningsExplanation.set(false) otelJava.osgiOptionalPackages.set(listOf("io.opentelemetry.api.incubator", "io.opentelemetry.sdk.autoconfigure.spi")) otelJava.osgiServiceLoaderProvides.set(listOf( "io.opentelemetry.sdk.autoconfigure.spi.internal.ConfigurableMetricReaderProvider", - "io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider", + "io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider", )) dependencies { diff --git a/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/internal/PrometheusComponentProvider.java b/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/internal/PrometheusComponentProvider.java index 475f90e246d..8c1b331bcd4 100644 --- a/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/internal/PrometheusComponentProvider.java +++ b/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/internal/PrometheusComponentProvider.java @@ -5,12 +5,12 @@ package io.opentelemetry.exporter.prometheus.internal; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.prometheus.PrometheusHttpServer; import io.opentelemetry.exporter.prometheus.PrometheusHttpServerBuilder; import io.opentelemetry.exporter.prometheus.TranslationStrategy; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.common.internal.IncludeExcludePredicate; import io.opentelemetry.sdk.metrics.export.MetricReader; import java.util.List; diff --git a/exporters/prometheus/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/exporters/prometheus/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider similarity index 98% rename from exporters/prometheus/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider rename to exporters/prometheus/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider index f3c72966e4b..aa27fda9217 100644 --- a/exporters/prometheus/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider +++ b/exporters/prometheus/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider @@ -1 +1,2 @@ io.opentelemetry.exporter.prometheus.internal.PrometheusComponentProvider + diff --git a/extensions/trace-propagators/build.gradle.kts b/extensions/trace-propagators/build.gradle.kts index fb60b3deaf1..921bd777e5c 100644 --- a/extensions/trace-propagators/build.gradle.kts +++ b/extensions/trace-propagators/build.gradle.kts @@ -12,7 +12,7 @@ otelJava.requireSuppressWarningsExplanation.set(false) otelJava.osgiOptionalPackages.set(listOf("io.opentelemetry.api.incubator", "io.opentelemetry.sdk.autoconfigure.spi")) otelJava.osgiServiceLoaderProvides.set(listOf( "io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider", - "io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider", + "io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider", )) dependencies { diff --git a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/internal/B3ComponentProvider.java b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/internal/B3ComponentProvider.java index edb6140e0f9..21c7d1300e2 100644 --- a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/internal/B3ComponentProvider.java +++ b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/internal/B3ComponentProvider.java @@ -5,10 +5,10 @@ package io.opentelemetry.extension.trace.propagation.internal; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.context.propagation.TextMapPropagator; import io.opentelemetry.extension.trace.propagation.B3Propagator; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; /** * Declarative configuration SPI implementation for {@link B3Propagator} which allows enabling diff --git a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/internal/B3MultiComponentProvider.java b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/internal/B3MultiComponentProvider.java index 5db48aea428..92271dda1a0 100644 --- a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/internal/B3MultiComponentProvider.java +++ b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/internal/B3MultiComponentProvider.java @@ -5,10 +5,10 @@ package io.opentelemetry.extension.trace.propagation.internal; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.context.propagation.TextMapPropagator; import io.opentelemetry.extension.trace.propagation.B3Propagator; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; /** * Declarative configuration SPI implementation for {@link B3Propagator} which allows enabling diff --git a/extensions/trace-propagators/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/extensions/trace-propagators/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider similarity index 99% rename from extensions/trace-propagators/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider rename to extensions/trace-propagators/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider index c63dcd61f48..ecc77430ed3 100644 --- a/extensions/trace-propagators/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider +++ b/extensions/trace-propagators/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider @@ -1,2 +1,3 @@ io.opentelemetry.extension.trace.propagation.internal.B3ComponentProvider io.opentelemetry.extension.trace.propagation.internal.B3MultiComponentProvider + diff --git a/integration-tests/osgi/src/testAutoconfigureDeclarativeConfig/java/io/opentelemetry/integrationtest/osgi/AutoconfigureDeclarativeConfigTest.java b/integration-tests/osgi/src/testAutoconfigureDeclarativeConfig/java/io/opentelemetry/integrationtest/osgi/AutoconfigureDeclarativeConfigTest.java index fc9e83c771b..9ceacc41f69 100644 --- a/integration-tests/osgi/src/testAutoconfigureDeclarativeConfig/java/io/opentelemetry/integrationtest/osgi/AutoconfigureDeclarativeConfigTest.java +++ b/integration-tests/osgi/src/testAutoconfigureDeclarativeConfig/java/io/opentelemetry/integrationtest/osgi/AutoconfigureDeclarativeConfigTest.java @@ -8,7 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.common.AttributeKey; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.context.propagation.ContextPropagators; diff --git a/sdk-extensions/autoconfigure-spi/build.gradle.kts b/sdk-extensions/autoconfigure-spi/build.gradle.kts index 83680b4cf7d..e9a67c37f97 100644 --- a/sdk-extensions/autoconfigure-spi/build.gradle.kts +++ b/sdk-extensions/autoconfigure-spi/build.gradle.kts @@ -11,4 +11,5 @@ otelJava.osgiOptionalPackages.set(listOf("io.opentelemetry.api.incubator")) dependencies { api(project(":sdk:all")) compileOnly(project(":api:incubator")) + testImplementation(project(":api:incubator")) } diff --git a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/ComponentProvider.java b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/ComponentProvider.java new file mode 100644 index 00000000000..bb99b9ff98c --- /dev/null +++ b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/ComponentProvider.java @@ -0,0 +1,62 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig; + +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.sdk.logs.LogRecordProcessor; +import io.opentelemetry.sdk.logs.export.LogRecordExporter; +import io.opentelemetry.sdk.metrics.export.MetricExporter; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.SpanProcessor; +import io.opentelemetry.sdk.trace.export.SpanExporter; +import io.opentelemetry.sdk.trace.samplers.Sampler; + +/** + * Provides configured instances of SDK extension components. {@link ComponentProvider} allows SDK + * extension components which are not part of the core SDK to be referenced in declarative based + * configuration. + * + *

NOTE: when {@link #getType()} is {@link Resource}, the {@link #getName()} is not (currently) + * used, and {@link #create(DeclarativeConfigProperties)} is (currently) called with an empty {@link + * DeclarativeConfigProperties}. + * + *

This class is not intended for use by application developers. Its API is stable and will not + * be changed or removed in a backwards-incompatible manner. + * + *

Supported component types include: {@link SpanExporter}, {@link MetricExporter}, {@link + * LogRecordExporter}, {@link SpanProcessor}, {@link LogRecordProcessor}, {@link TextMapPropagator}, + * {@link Sampler}, {@link Resource}. + */ +public interface ComponentProvider { + + /** + * The type of SDK extension component. For example, if providing instances of a custom span + * exporter, the type would be {@link SpanExporter}. + */ + Class getType(); + + /** + * The name of the exporter, to be referenced in configuration files. For example, if providing + * instances of a custom span exporter for the "acme" protocol, the name might be "acme". + * + *

This name MUST not be the same as any other component provider name which returns components + * of the same {@link #getType() type}. In other words, {@link #getType()} and name form a + * composite key uniquely identifying the provider. + */ + String getName(); + + /** + * Configure an instance of the SDK extension component according to the {@code config}. + * + * @param config the configuration provided where the component is referenced in a configuration + * file. + * @return an instance the SDK extension component + */ + // TODO (jack-berg): consider dynamic configuration use case before stabilizing in case that + // affects any API decisions + Object create(DeclarativeConfigProperties config); +} diff --git a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java index 30a544887c6..e0581f6d301 100644 --- a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java +++ b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java @@ -5,58 +5,36 @@ package io.opentelemetry.sdk.autoconfigure.spi.internal; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.context.propagation.TextMapPropagator; -import io.opentelemetry.sdk.logs.LogRecordProcessor; -import io.opentelemetry.sdk.logs.export.LogRecordExporter; -import io.opentelemetry.sdk.metrics.export.MetricExporter; -import io.opentelemetry.sdk.resources.Resource; -import io.opentelemetry.sdk.trace.SpanProcessor; -import io.opentelemetry.sdk.trace.export.SpanExporter; -import io.opentelemetry.sdk.trace.samplers.Sampler; +import io.opentelemetry.api.config.DeclarativeConfigProperties; /** - * Provides configured instances of SDK extension components. {@link ComponentProvider} allows SDK - * extension components which are not part of the core SDK to be referenced in declarative based - * configuration. - * - *

NOTE: when {@link #getType()} is {@link Resource}, the {@link #getName()} is not (currently) - * used, and {@link #create(DeclarativeConfigProperties)} is (currently) called with an empty {@link - * DeclarativeConfigProperties}. + * Provides configured instances of SDK extension components. * *

This class is internal and is hence not for public use. Its APIs are unstable and can change * at any time. * - *

Supported component types include: {@link SpanExporter}, {@link MetricExporter}, {@link - * LogRecordExporter}, {@link SpanProcessor}, {@link LogRecordProcessor}, {@link TextMapPropagator}, - * {@link Sampler}, {@link Resource}. + * @deprecated Use {@link + * io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} instead. */ -public interface ComponentProvider { - - /** - * The type of SDK extension component. For example, if providing instances of a custom span - * exporter, the type would be {@link SpanExporter}. - */ - Class getType(); - - /** - * The name of the exporter, to be referenced in configuration files. For example, if providing - * instances of a custom span exporter for the "acme" protocol, the name might be "acme". - * - *

This name MUST not be the same as any other component provider name which returns components - * of the same {@link #getType() type}. In other words, {@link #getType()} and name form a - * composite key uniquely identifying the provider. - */ - String getName(); +@Deprecated +public interface ComponentProvider + extends io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider { /** * Configure an instance of the SDK extension component according to the {@code config}. * - * @param config the configuration provided where the component is referenced in a configuration - * file. - * @return an instance the SDK extension component + * @deprecated Implement {@link #create(DeclarativeConfigProperties)} instead. */ - // TODO (jack-berg): consider dynamic configuration use case before stabilizing in case that - // affects any API decisions - Object create(DeclarativeConfigProperties config); + @Deprecated + default Object create(io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { + return create((DeclarativeConfigProperties) config); + } + + @Override + default Object create(DeclarativeConfigProperties config) { + if (config instanceof io.opentelemetry.api.incubator.config.DeclarativeConfigProperties) { + return create((io.opentelemetry.api.incubator.config.DeclarativeConfigProperties) config); + } + return create(new IncubatorDeclarativeConfigPropertiesAdapter(config)); + } } diff --git a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ExtendedDeclarativeConfigProperties.java b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ExtendedDeclarativeConfigProperties.java index c1c66f5103e..b48e4a0d416 100644 --- a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ExtendedDeclarativeConfigProperties.java +++ b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ExtendedDeclarativeConfigProperties.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.spi.internal; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; /** * Extended version of {@link DeclarativeConfigProperties} with access to {@link ConfigProvider}. diff --git a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapter.java b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapter.java new file mode 100644 index 00000000000..54c6a4a13ef --- /dev/null +++ b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapter.java @@ -0,0 +1,121 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.autoconfigure.spi.internal; + +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.common.ComponentLoader; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; + +@SuppressWarnings("deprecation") +final class IncubatorDeclarativeConfigPropertiesAdapter + implements io.opentelemetry.api.incubator.config.DeclarativeConfigProperties { + + private final DeclarativeConfigProperties delegate; + + IncubatorDeclarativeConfigPropertiesAdapter(DeclarativeConfigProperties delegate) { + this.delegate = delegate; + } + + @Nullable + @Override + public String getString(String name) { + return delegate.getString(name); + } + + @Nullable + @Override + public Boolean getBoolean(String name) { + return delegate.getBoolean(name); + } + + @Nullable + @Override + public Integer getInt(String name) { + return delegate.getInt(name); + } + + @Nullable + @Override + public Long getLong(String name) { + return delegate.getLong(name); + } + + @Nullable + @Override + public Double getDouble(String name) { + return delegate.getDouble(name); + } + + @Override + public boolean isString(String name) { + return delegate.isString(name); + } + + @Override + public boolean isBoolean(String name) { + return delegate.isBoolean(name); + } + + @Override + public boolean isInt(String name) { + return delegate.isInt(name); + } + + @Override + public boolean isLong(String name) { + return delegate.isLong(name); + } + + @Override + public boolean isDouble(String name) { + return delegate.isDouble(name); + } + + @Nullable + @Override + public List getScalarList(String name, Class scalarType) { + return delegate.getScalarList(name, scalarType); + } + + @Nullable + @Override + public DeclarativeConfigProperties getStructured(String name) { + DeclarativeConfigProperties structured = delegate.getStructured(name); + return structured == null ? null : new IncubatorDeclarativeConfigPropertiesAdapter(structured); + } + + @Nullable + @Override + public List getStructuredList(String name) { + List list = delegate.getStructuredList(name); + if (list == null) { + return null; + } + List adapted = new ArrayList<>(list.size()); + for (DeclarativeConfigProperties item : list) { + adapted.add(new IncubatorDeclarativeConfigPropertiesAdapter(item)); + } + return adapted; + } + + @Override + public Set getPropertyKeys() { + return delegate.getPropertyKeys(); + } + + @Override + public ComponentLoader getComponentLoader() { + return delegate.getComponentLoader(); + } + + @Override + public String toString() { + return "IncubatorDeclarativeConfigPropertiesAdapter{" + delegate + '}'; + } +} diff --git a/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProviderBridgeTest.java b/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProviderBridgeTest.java new file mode 100644 index 00000000000..e6178f00880 --- /dev/null +++ b/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProviderBridgeTest.java @@ -0,0 +1,105 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.autoconfigure.spi.internal; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import org.junit.jupiter.api.Test; + +@SuppressWarnings("deprecation") +class ComponentProviderBridgeTest { + + @Test + void testLegacyProviderWithPureModernConfig() { + ComponentProvider legacyProvider = + new ComponentProvider() { + @Override + public Class getType() { + return String.class; + } + + @Override + public String getName() { + return "legacy"; + } + + @Override + public Object create( + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { + return "created:" + config.getString("key"); + } + }; + + DeclarativeConfigProperties modernConfig = mock(DeclarativeConfigProperties.class); + when(modernConfig.getString("key")).thenReturn("value"); + + Object result = legacyProvider.create(modernConfig); + assertThat(result).isEqualTo("created:value"); + } + + @Test + void testLegacyProviderWithIncubatorConfig() { + ComponentProvider legacyProvider = + new ComponentProvider() { + @Override + public Class getType() { + return String.class; + } + + @Override + public String getName() { + return "legacy"; + } + + @Override + public Object create( + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { + return "created:" + config.getString("key"); + } + }; + + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties incubatorConfig = + mock(io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.class); + when(incubatorConfig.getString("key")).thenReturn("incubatorValue"); + + // Invoke via modern signature where config is an instance of incubator config + DeclarativeConfigProperties polyConfig = incubatorConfig; + Object result = legacyProvider.create(polyConfig); + assertThat(result).isEqualTo("created:incubatorValue"); + } + + @Test + void testModernProviderWithIncubatorConfig() { + ComponentProvider modernProvider = + new ComponentProvider() { + @Override + public Class getType() { + return String.class; + } + + @Override + public String getName() { + return "modern"; + } + + @Override + public Object create(DeclarativeConfigProperties config) { + return "created:" + config.getString("key"); + } + }; + + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties incubatorConfig = + mock(io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.class); + when(incubatorConfig.getString("key")).thenReturn("legacyValue"); + + // Invoke via deprecated legacy signature + Object result = modernProvider.create(incubatorConfig); + assertThat(result).isEqualTo("created:legacyValue"); + } +} diff --git a/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapterTest.java b/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapterTest.java new file mode 100644 index 00000000000..644ed92f88b --- /dev/null +++ b/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapterTest.java @@ -0,0 +1,83 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.autoconfigure.spi.internal; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.common.ComponentLoader; +import java.util.Collections; +import java.util.List; +import org.junit.jupiter.api.Test; + +@SuppressWarnings("deprecation") +class IncubatorDeclarativeConfigPropertiesAdapterTest { + + @Test + void testAdapterDelegation() { + DeclarativeConfigProperties delegate = mock(DeclarativeConfigProperties.class); + DeclarativeConfigProperties child = mock(DeclarativeConfigProperties.class); + ComponentLoader componentLoader = mock(ComponentLoader.class); + + when(delegate.getString("str")).thenReturn("hello"); + when(delegate.getBoolean("bool")).thenReturn(true); + when(delegate.getInt("int")).thenReturn(42); + when(delegate.getLong("long")).thenReturn(100L); + when(delegate.getDouble("double")).thenReturn(3.14); + + when(delegate.isString("str")).thenReturn(true); + when(delegate.isBoolean("bool")).thenReturn(true); + when(delegate.isInt("int")).thenReturn(true); + when(delegate.isLong("long")).thenReturn(true); + when(delegate.isDouble("double")).thenReturn(true); + + when(delegate.getScalarList("list", String.class)) + .thenReturn(Collections.singletonList("item")); + when(delegate.getStructured("child")).thenReturn(child); + when(delegate.getStructured("missing")).thenReturn(null); + + when(delegate.getStructuredList("children")).thenReturn(Collections.singletonList(child)); + when(delegate.getStructuredList("missing_list")).thenReturn(null); + + when(delegate.getPropertyKeys()).thenReturn(Collections.singleton("str")); + when(delegate.getComponentLoader()).thenReturn(componentLoader); + when(delegate.toString()).thenReturn("mockDelegate"); + + IncubatorDeclarativeConfigPropertiesAdapter adapter = + new IncubatorDeclarativeConfigPropertiesAdapter(delegate); + + assertThat(adapter.getString("str")).isEqualTo("hello"); + assertThat(adapter.getBoolean("bool")).isTrue(); + assertThat(adapter.getInt("int")).isEqualTo(42); + assertThat(adapter.getLong("long")).isEqualTo(100L); + assertThat(adapter.getDouble("double")).isEqualTo(3.14); + + assertThat(adapter.isString("str")).isTrue(); + assertThat(adapter.isBoolean("bool")).isTrue(); + assertThat(adapter.isInt("int")).isTrue(); + assertThat(adapter.isLong("long")).isTrue(); + assertThat(adapter.isDouble("double")).isTrue(); + + assertThat(adapter.getScalarList("list", String.class)).containsExactly("item"); + + DeclarativeConfigProperties adaptedChild = adapter.getStructured("child"); + assertThat(adaptedChild).isInstanceOf(IncubatorDeclarativeConfigPropertiesAdapter.class); + assertThat(adapter.getStructured("missing")).isNull(); + + List adaptedChildren = adapter.getStructuredList("children"); + assertThat(adaptedChildren).hasSize(1); + assertThat(adaptedChildren.get(0)) + .isInstanceOf(IncubatorDeclarativeConfigPropertiesAdapter.class); + assertThat(adapter.getStructuredList("missing_list")).isNull(); + + assertThat(adapter.getPropertyKeys()).containsExactly("str"); + assertThat(adapter.getComponentLoader()).isSameAs(componentLoader); + assertThat(adapter.toString()) + .isEqualTo("IncubatorDeclarativeConfigPropertiesAdapter{mockDelegate}"); + } +} diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigUtil.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigUtil.java index a15c0bb171c..32fab92b655 100644 --- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigUtil.java +++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigUtil.java @@ -7,7 +7,7 @@ import static java.util.Objects.requireNonNull; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.DeclarativeConfigResult; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.DeclarativeConfiguration; diff --git a/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationSpiTest.java b/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationSpiTest.java index 56653dda289..4190df36cae 100644 --- a/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationSpiTest.java +++ b/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationSpiTest.java @@ -10,7 +10,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.internal.testing.CleanupExtension; import io.opentelemetry.sdk.OpenTelemetrySdk; diff --git a/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestResourceDetector.java b/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestResourceDetector.java index a9c0bd22662..b20a098afa3 100644 --- a/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestResourceDetector.java +++ b/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestResourceDetector.java @@ -5,10 +5,10 @@ package io.opentelemetry.sdk.autoconfigure; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; import io.opentelemetry.sdk.resources.Resource; public class TestResourceDetector implements ComponentProvider, AutoConfigureListener { diff --git a/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider similarity index 98% rename from sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider rename to sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider index aad133d8acf..3d7137e5568 100644 --- a/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider +++ b/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider @@ -1 +1,2 @@ io.opentelemetry.sdk.autoconfigure.TestResourceDetector + diff --git a/sdk-extensions/declarative-config/README.md b/sdk-extensions/declarative-config/README.md index 99ed7553c00..874f5f7bd6a 100644 --- a/sdk-extensions/declarative-config/README.md +++ b/sdk-extensions/declarative-config/README.md @@ -16,7 +16,7 @@ try (FileInputStream yamlConfigFileInputStream = new FileInputStream("/path/to/c Notes: * Environment variable substitution is supported as [defined in the spec](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/data-model.md#environment-variable-substitution) * Customization is limited to customizing the in-memory config model, or exporters. See `DeclarativeConfigurationCustomizer` SPI for details. -* Custom SDK extension components which reference the [ComponentProvider](https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java) SPI can be referenced in declarative configuration. Supported types include: +* Custom SDK extension components which reference the [ComponentProvider](https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/ComponentProvider.java) SPI can be referenced in declarative configuration. Supported types include: * `Resource` * `SpanExporter` * `MetricExporter` diff --git a/sdk-extensions/declarative-config/build.gradle.kts b/sdk-extensions/declarative-config/build.gradle.kts index 2390d633d1b..b7bcdb96223 100644 --- a/sdk-extensions/declarative-config/build.gradle.kts +++ b/sdk-extensions/declarative-config/build.gradle.kts @@ -15,7 +15,7 @@ otelJava.moduleName.set("io.opentelemetry.sdk.autoconfigure.declarativeconfig") otelJava.requireSuppressWarningsExplanation.set(false) otelJava.osgiOptionalPackages.set(listOf("io.opentelemetry.sdk.autoconfigure.spi")) otelJava.osgiServiceLoaderProvides.set(listOf( - "io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider", + "io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider", )) // declarative-config discovers customizer providers at runtime via ServiceLoader otelJava.osgiServiceLoaderRequires.set(listOf( diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AggregationFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AggregationFactory.java index 907ddbe4dd3..be0c890f996 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AggregationFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AggregationFactory.java @@ -5,7 +5,7 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AggregationModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.Base2ExponentialBucketHistogramAggregationModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.ExplicitBucketHistogramAggregationModel; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AttributeListFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AttributeListFactory.java index 8d4313b36d3..1e1a46afae6 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AttributeListFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AttributeListFactory.java @@ -10,7 +10,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AttributeNameValueModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AttributeTypeModel; import java.util.List; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ComposableRuleBasedSamplerFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ComposableRuleBasedSamplerFactory.java index 9b4f9b9a63c..f013f82f372 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ComposableRuleBasedSamplerFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ComposableRuleBasedSamplerFactory.java @@ -9,7 +9,7 @@ import static java.util.stream.Collectors.toSet; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanKind; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ConfigKeyValue.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ConfigKeyValue.java index 1c766d7cfda..c7793805e5d 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ConfigKeyValue.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ConfigKeyValue.java @@ -5,7 +5,7 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; /** A key value pair for a YAML mapping node. */ class ConfigKeyValue { diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContext.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContext.java index 5508d87f577..135d3089aa7 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContext.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContext.java @@ -5,13 +5,13 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.common.ComponentLoader; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.sdk.common.InternalTelemetryVersion; import java.io.Closeable; @@ -139,7 +139,7 @@ private InternalTelemetryVersion getInternalTelemetryVersion() { * @throws DeclarativeConfigException if no matching providers are found, or if multiple are found * (i.e. conflict), or if {@link ComponentProvider#create(DeclarativeConfigProperties)} throws */ - @SuppressWarnings({"unchecked"}) + @SuppressWarnings({"unchecked", "deprecation"}) T loadComponent(Class type, ConfigKeyValue configKeyValue) { String name = configKeyValue.getKey(); ExtendedDeclarativeConfigProperties config = @@ -148,7 +148,20 @@ T loadComponent(Class type, ConfigKeyValue configKeyValue) { configProvider == null ? ConfigProvider.noop() : configProvider); if (componentProviders == null) { - componentProviders = ComponentLoader.loadList(this, ComponentProvider.class); + List providers = + new ArrayList<>(ComponentLoader.loadList(this, ComponentProvider.class)); + for (io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider legacyProvider : + ComponentLoader.loadList( + this, io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider.class)) { + if (providers.stream() + .noneMatch( + p -> + p.getType() == legacyProvider.getType() + && p.getName().equals(legacyProvider.getName()))) { + providers.add(legacyProvider); + } + } + componentProviders = providers; } List matchedProviders = componentProviders.stream() @@ -218,8 +231,10 @@ Set getListeners() { return Collections.unmodifiableSet(listeners); } + @SuppressWarnings("deprecation") private static class ExtendedDeclarativeConfigPropertiesImpl - implements ExtendedDeclarativeConfigProperties { + implements ExtendedDeclarativeConfigProperties, + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties { private final DeclarativeConfigProperties delegate; private final ConfigProvider configProvider; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfiguration.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfiguration.java index 245936f5efe..d2aa64c3aa9 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfiguration.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfiguration.java @@ -7,16 +7,16 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.OpenTelemetryConfigurationModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.SamplerModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.internal.ModelMapper; import io.opentelemetry.sdk.autoconfigure.spi.Ordered; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; import io.opentelemetry.sdk.trace.samplers.Sampler; import java.io.Closeable; import java.io.IOException; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationBuilder.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationBuilder.java index 51904dcfcc9..176302cc561 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationBuilder.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationBuilder.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.OpenTelemetryConfigurationModel; import io.opentelemetry.sdk.logs.export.LogRecordExporter; import io.opentelemetry.sdk.metrics.export.MetricExporter; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationCustomizer.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationCustomizer.java index 827ac0f884a..13f8454a9c0 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationCustomizer.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationCustomizer.java @@ -5,7 +5,7 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.OpenTelemetryConfigurationModel; import io.opentelemetry.sdk.logs.export.LogRecordExporter; import io.opentelemetry.sdk.metrics.export.MetricExporter; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/EntitiesEnvResourceDetector.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/EntitiesEnvResourceDetector.java index 172dbce98eb..781456f7d4f 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/EntitiesEnvResourceDetector.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/EntitiesEnvResourceDetector.java @@ -7,9 +7,9 @@ import static io.opentelemetry.sdk.autoconfigure.declarativeconfig.EnvironmentResource.ENTITIES_PROPERTY; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.resources.Resource; import java.util.Collections; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ExemplarFilterFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ExemplarFilterFactory.java index dc11f5a692e..ded6d9dde1c 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ExemplarFilterFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ExemplarFilterFactory.java @@ -5,7 +5,7 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.ExemplarFilterModel; import io.opentelemetry.sdk.metrics.ExemplarFilter; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/FileConfigUtil.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/FileConfigUtil.java index b5a8fe572d5..dfb0df29289 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/FileConfigUtil.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/FileConfigUtil.java @@ -7,8 +7,8 @@ import static java.util.stream.Collectors.joining; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import java.util.Set; import javax.annotation.Nullable; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IncludeExcludeFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IncludeExcludeFactory.java index 0e2742c0bfb..2506e8466a2 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IncludeExcludeFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IncludeExcludeFactory.java @@ -5,7 +5,7 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.IncludeExcludeModel; import io.opentelemetry.sdk.common.internal.IncludeExcludePredicate; import java.util.List; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/InstrumentSelectorFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/InstrumentSelectorFactory.java index b82bd301f89..e7f40741e82 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/InstrumentSelectorFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/InstrumentSelectorFactory.java @@ -5,7 +5,7 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.ViewSelectorModel; import io.opentelemetry.sdk.metrics.InstrumentSelector; import io.opentelemetry.sdk.metrics.InstrumentSelectorBuilder; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricReaderFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricReaderFactory.java index 687b64131b0..cf5875a6b5f 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricReaderFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricReaderFactory.java @@ -7,7 +7,7 @@ import static io.opentelemetry.sdk.autoconfigure.declarativeconfig.FileConfigUtil.requireNonNull; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.MetricReaderModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.PeriodicMetricReaderModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.PullMetricExporterModel; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactory.java index 9ceaa3a4cdf..bdfa6bbaa55 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactory.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.OpenTelemetrySdkBuilder; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.LoggerProviderModel; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/PropagatorFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/PropagatorFactory.java index f2de7b59508..666835b7ecc 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/PropagatorFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/PropagatorFactory.java @@ -5,7 +5,7 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.context.propagation.TextMapPropagator; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.PropagatorModel; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SamplerFactory.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SamplerFactory.java index ed6f80e5a71..8bb8868b173 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SamplerFactory.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SamplerFactory.java @@ -5,7 +5,7 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AlwaysRecordSamplerModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.ParentBasedSamplerModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.SamplerModel; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ServiceResourceDetector.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ServiceResourceDetector.java index 204bda1ad01..74c469ca6a4 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ServiceResourceDetector.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ServiceResourceDetector.java @@ -6,9 +6,9 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.common.internal.SemConvConstants; import io.opentelemetry.sdk.resources.Resource; diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/YamlDeclarativeConfigProperties.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/YamlDeclarativeConfigProperties.java index 43a4bb16ef1..681bc696313 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/YamlDeclarativeConfigProperties.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/YamlDeclarativeConfigProperties.java @@ -8,8 +8,8 @@ import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; import java.util.Arrays; import java.util.Collections; diff --git a/sdk-extensions/declarative-config/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/sdk-extensions/declarative-config/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider similarity index 99% rename from sdk-extensions/declarative-config/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider rename to sdk-extensions/declarative-config/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider index 596144da6a4..ab573c38938 100644 --- a/sdk-extensions/declarative-config/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider +++ b/sdk-extensions/declarative-config/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider @@ -1,2 +1,3 @@ io.opentelemetry.sdk.autoconfigure.declarativeconfig.EntitiesEnvResourceDetector io.opentelemetry.sdk.autoconfigure.declarativeconfig.ServiceResourceDetector + diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AttributeListFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AttributeListFactoryTest.java index 79d3f55ffce..a661e3c8506 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AttributeListFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/AttributeListFactoryTest.java @@ -11,7 +11,7 @@ import static org.mockito.Mockito.mock; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AttributeNameValueModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AttributeTypeModel; import java.util.Arrays; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ComposableRuleBasedSamplerFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ComposableRuleBasedSamplerFactoryTest.java index 89f410bc31d..358492d4441 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ComposableRuleBasedSamplerFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ComposableRuleBasedSamplerFactoryTest.java @@ -17,7 +17,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanKind; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContextTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContextTest.java index 7b650174e98..fdfb09a80ad 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContextTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContextTest.java @@ -12,10 +12,10 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.resources.Resource; import java.util.Collections; import java.util.HashMap; @@ -30,6 +30,7 @@ class DeclarativeConfigContextTest { private final DeclarativeConfigContext context = new DeclarativeConfigContext(componentLoader); @Test + @SuppressWarnings("deprecation") void componentProvidersCached() { // First loadComponent call should load providers assertThatThrownBy( @@ -57,6 +58,8 @@ void componentProvidersCached() { // Verify spiHelper.load() was only called once verify(componentLoader, times(1)).load(ComponentProvider.class); + verify(componentLoader, times(1)) + .load(io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider.class); } @Test @@ -103,4 +106,99 @@ public Object create(DeclarativeConfigProperties config) { assertThat(config.isDouble("double_key")).isTrue(); assertThat(config.isString("int_key")).isFalse(); } + + @Test + @SuppressWarnings("deprecation") + void legacyComponentProviderLoaded() { + Resource expectedResource = Resource.builder().put("source", "legacy").build(); + io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider legacyProvider = + new io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider() { + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "legacy-test"; + } + + @Override + public Object create(DeclarativeConfigProperties config) { + return expectedResource; + } + }; + + doReturn(Collections.singletonList(legacyProvider)) + .when(componentLoader) + .load(io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider.class); + + Resource resource = + context.loadComponent( + Resource.class, + ConfigKeyValue.of( + "legacy-test", + YamlDeclarativeConfigProperties.create(Collections.emptyMap(), componentLoader))); + + assertThat(resource).isSameAs(expectedResource); + } + + @Test + @SuppressWarnings("deprecation") + void legacyComponentProviderDeduplicatedWhenModernProviderExists() { + Resource modernResource = Resource.builder().put("source", "modern").build(); + Resource legacyResource = Resource.builder().put("source", "legacy").build(); + + ComponentProvider modernProvider = + new ComponentProvider() { + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "duplicate-test"; + } + + @Override + public Object create(DeclarativeConfigProperties config) { + return modernResource; + } + }; + + io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider legacyProvider = + new io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider() { + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "duplicate-test"; + } + + @Override + public Object create(DeclarativeConfigProperties config) { + return legacyResource; + } + }; + + doReturn(Collections.singletonList(modernProvider)) + .when(componentLoader) + .load(ComponentProvider.class); + doReturn(Collections.singletonList(legacyProvider)) + .when(componentLoader) + .load(io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider.class); + + Resource resource = + context.loadComponent( + Resource.class, + ConfigKeyValue.of( + "duplicate-test", + YamlDeclarativeConfigProperties.create(Collections.emptyMap(), componentLoader))); + + assertThat(resource).isSameAs(modernResource); + } } diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationBuilderTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationBuilderTest.java index 2eaa79f1d34..01c212cd046 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationBuilderTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationBuilderTest.java @@ -10,7 +10,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.logs.export.LogRecordExporter; import io.opentelemetry.sdk.metrics.export.MetricExporter; import io.opentelemetry.sdk.trace.export.SpanExporter; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationCreateTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationCreateTest.java index 86b8f3608a3..4518e6e77ad 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationCreateTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationCreateTest.java @@ -14,7 +14,7 @@ import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension; import io.github.netmikey.logunit.api.LogCapturer; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.internal.testing.CleanupExtension; import io.opentelemetry.internal.testing.slf4j.SuppressLogger; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationParseTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationParseTest.java index 6646403853f..df533261980 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationParseTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigurationParseTest.java @@ -8,7 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AggregationModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AttributeLimitsModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AttributeNameValueModel; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/EntitiesEnvResourceDetectorTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/EntitiesEnvResourceDetectorTest.java index fff320a9cc4..1a89dd20072 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/EntitiesEnvResourceDetectorTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/EntitiesEnvResourceDetectorTest.java @@ -9,7 +9,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.internal.Entity; import io.opentelemetry.sdk.resources.internal.EntityUtil; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IdGeneratorFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IdGeneratorFactoryTest.java index 23d0b00f490..2180d42a4ed 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IdGeneratorFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IdGeneratorFactoryTest.java @@ -8,7 +8,7 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.internal.testing.CleanupExtension; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.component.IdGeneratorComponentProvider; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IncludeExcludeFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IncludeExcludeFactoryTest.java index 87c22c7c44e..6d6a01d7f9c 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IncludeExcludeFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/IncludeExcludeFactoryTest.java @@ -8,7 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.IncludeExcludeModel; import io.opentelemetry.sdk.common.internal.IncludeExcludePredicate; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/InstrumentSelectorFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/InstrumentSelectorFactoryTest.java index 028fab07677..4373f8dfc34 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/InstrumentSelectorFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/InstrumentSelectorFactoryTest.java @@ -9,7 +9,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.mock; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.InstrumentTypeModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.ViewSelectorModel; import io.opentelemetry.sdk.metrics.InstrumentSelector; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LogRecordExporterFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LogRecordExporterFactoryTest.java index fe80bc26e83..29091adcef0 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LogRecordExporterFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LogRecordExporterFactoryTest.java @@ -10,7 +10,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.logging.SystemOutLogRecordExporter; import io.opentelemetry.exporter.logging.otlp.internal.logs.OtlpStdoutLogRecordExporter; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LogRecordProcessorFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LogRecordProcessorFactoryTest.java index 1470d392600..40d0cc93d4a 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LogRecordProcessorFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LogRecordProcessorFactoryTest.java @@ -8,7 +8,7 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter; import io.opentelemetry.internal.testing.CleanupExtension; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricExporterFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricExporterFactoryTest.java index f229ab8e60b..38328f419d2 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricExporterFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricExporterFactoryTest.java @@ -10,7 +10,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.logging.LoggingMetricExporter; import io.opentelemetry.exporter.logging.otlp.internal.metrics.OtlpStdoutMetricExporter; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricReaderFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricReaderFactoryTest.java index 0ce35451c3e..42302cb2942 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricReaderFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/MetricReaderFactoryTest.java @@ -14,7 +14,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter; import io.opentelemetry.exporter.prometheus.PrometheusHttpServer; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactoryTest.java index cd9c6604474..71238954053 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/OpenTelemetryConfigurationFactoryTest.java @@ -12,7 +12,7 @@ import io.github.netmikey.logunit.api.LogCapturer; import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.context.propagation.ContextPropagators; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/PropagatorFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/PropagatorFactoryTest.java index 862ef7efad9..d2c11db5f48 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/PropagatorFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/PropagatorFactoryTest.java @@ -9,8 +9,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.context.propagation.ContextPropagators; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ResourceFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ResourceFactoryTest.java index a991a0822f9..00ac3a71cc2 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ResourceFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ResourceFactoryTest.java @@ -13,7 +13,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.internal.testing.slf4j.SuppressLogger; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.AttributeNameValueModel; @@ -22,7 +22,7 @@ import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.internal.ExperimentalResourceDetectionModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.internal.ExperimentalResourceDetectorModel; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.internal.ResourceModelAccessor; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.ResourceBuilder; import io.opentelemetry.sdk.resources.internal.Entity; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SamplerFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SamplerFactoryTest.java index 5fa15122572..453ea879773 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SamplerFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SamplerFactoryTest.java @@ -8,7 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.internal.testing.CleanupExtension; import io.opentelemetry.internal.testing.slf4j.SuppressLogger; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ServiceResourceDetectorTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ServiceResourceDetectorTest.java index 814b799056d..9d144f62454 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ServiceResourceDetectorTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/ServiceResourceDetectorTest.java @@ -10,7 +10,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.internal.Entity; import io.opentelemetry.sdk.resources.internal.EntityUtil; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SpanExporterFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SpanExporterFactoryTest.java index 4e6a6cead30..ef89fd927a7 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SpanExporterFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SpanExporterFactoryTest.java @@ -10,7 +10,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.exporter.logging.otlp.internal.traces.OtlpStdoutSpanExporter; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SpanProcessorFactoryTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SpanProcessorFactoryTest.java index a6893432179..ca37ee23a89 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SpanProcessorFactoryTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/SpanProcessorFactoryTest.java @@ -8,7 +8,7 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter; import io.opentelemetry.internal.testing.CleanupExtension; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/YamlDeclarativeConfigPropertiesTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/YamlDeclarativeConfigPropertiesTest.java index 210af6c14cc..15772eff2d5 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/YamlDeclarativeConfigPropertiesTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/YamlDeclarativeConfigPropertiesTest.java @@ -5,12 +5,12 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig; -import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; +import static io.opentelemetry.api.config.DeclarativeConfigProperties.empty; import static org.assertj.core.api.Assertions.assertThat; import com.google.common.collect.ImmutableSet; import io.github.netmikey.logunit.api.LogCapturer; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.internal.testing.slf4j.SuppressLogger; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.OpenTelemetryConfigurationModel; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/IdGeneratorComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/IdGeneratorComponentProvider.java index cc90e512cea..458727bfc59 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/IdGeneratorComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/IdGeneratorComponentProvider.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.trace.IdGenerator; public class IdGeneratorComponentProvider implements ComponentProvider { diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/LogRecordExporterComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/LogRecordExporterComponentProvider.java index dcdfffe0051..c7deabcc836 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/LogRecordExporterComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/LogRecordExporterComponentProvider.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.logs.export.LogRecordExporter; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/LogRecordProcessorComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/LogRecordProcessorComponentProvider.java index ac9037613cd..a0738de69d6 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/LogRecordProcessorComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/LogRecordProcessorComponentProvider.java @@ -5,9 +5,9 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.context.Context; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.logs.LogRecordProcessor; import io.opentelemetry.sdk.logs.ReadWriteLogRecord; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/MetricExporterComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/MetricExporterComponentProvider.java index 185f4e9e4f6..d189d24b2d4 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/MetricExporterComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/MetricExporterComponentProvider.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.metrics.InstrumentType; import io.opentelemetry.sdk.metrics.data.AggregationTemporality; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceComponentProvider.java index cd7003a5cf4..6c62ce74925 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceComponentProvider.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.resources.Resource; public class ResourceComponentProvider implements ComponentProvider { diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceFirstComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceFirstComponentProvider.java index 3c5232e5ac1..7d5ffe15357 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceFirstComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceFirstComponentProvider.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.resources.Resource; public class ResourceFirstComponentProvider implements ComponentProvider { diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceSecondComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceSecondComponentProvider.java index c64ea1bb5d7..bb3d8d9d703 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceSecondComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/ResourceSecondComponentProvider.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.resources.Resource; public class ResourceSecondComponentProvider implements ComponentProvider { diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SamplerComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SamplerComponentProvider.java index 7618e10f6c4..e82263217e4 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SamplerComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SamplerComponentProvider.java @@ -6,10 +6,10 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.context.Context; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.trace.data.LinkData; import io.opentelemetry.sdk.trace.samplers.Sampler; import io.opentelemetry.sdk.trace.samplers.SamplingResult; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SpanExporterComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SpanExporterComponentProvider.java index dc4bedf2fb3..47b393acd74 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SpanExporterComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SpanExporterComponentProvider.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.trace.data.SpanData; import io.opentelemetry.sdk.trace.export.SpanExporter; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SpanProcessorComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SpanProcessorComponentProvider.java index b481557bf0e..62cc0e90eb8 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SpanProcessorComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/SpanProcessorComponentProvider.java @@ -5,9 +5,9 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.context.Context; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.trace.ReadWriteSpan; import io.opentelemetry.sdk.trace.ReadableSpan; diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/TextMapPropagatorComponentProvider.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/TextMapPropagatorComponentProvider.java index f001dd9a881..15365cc7c02 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/TextMapPropagatorComponentProvider.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/component/TextMapPropagatorComponentProvider.java @@ -5,12 +5,12 @@ package io.opentelemetry.sdk.autoconfigure.declarativeconfig.component; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.TextMapGetter; import io.opentelemetry.context.propagation.TextMapPropagator; import io.opentelemetry.context.propagation.TextMapSetter; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import java.util.Collection; import java.util.Collections; import javax.annotation.Nullable; diff --git a/sdk-extensions/declarative-config/src/test/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/sdk-extensions/declarative-config/src/test/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider similarity index 99% rename from sdk-extensions/declarative-config/src/test/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider rename to sdk-extensions/declarative-config/src/test/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider index deed49c7019..98cdcb2e199 100644 --- a/sdk-extensions/declarative-config/src/test/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider +++ b/sdk-extensions/declarative-config/src/test/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider @@ -9,3 +9,4 @@ io.opentelemetry.sdk.autoconfigure.declarativeconfig.component.ResourceComponent io.opentelemetry.sdk.autoconfigure.declarativeconfig.component.ResourceFirstComponentProvider io.opentelemetry.sdk.autoconfigure.declarativeconfig.component.ResourceSecondComponentProvider io.opentelemetry.sdk.autoconfigure.declarativeconfig.component.IdGeneratorComponentProvider + diff --git a/sdk-extensions/jaeger-remote-sampler/build.gradle.kts b/sdk-extensions/jaeger-remote-sampler/build.gradle.kts index 4b791bce400..ca200b2d936 100644 --- a/sdk-extensions/jaeger-remote-sampler/build.gradle.kts +++ b/sdk-extensions/jaeger-remote-sampler/build.gradle.kts @@ -13,7 +13,7 @@ otelJava.requireSuppressWarningsExplanation.set(false) otelJava.osgiOptionalPackages.set(listOf("io.opentelemetry.sdk.autoconfigure.declarativeconfig", "io.opentelemetry.sdk.autoconfigure.spi")) otelJava.osgiServiceLoaderProvides.set(listOf( "io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSamplerProvider", - "io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider", + "io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider", )) dependencies { diff --git a/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/internal/JaegerRemoteSamplerComponentProvider.java b/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/internal/JaegerRemoteSamplerComponentProvider.java index b983f6751ef..c998cf4be6e 100644 --- a/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/internal/JaegerRemoteSamplerComponentProvider.java +++ b/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/internal/JaegerRemoteSamplerComponentProvider.java @@ -5,10 +5,10 @@ package io.opentelemetry.sdk.extension.trace.jaeger.sampler.internal; -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigException; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.DeclarativeConfiguration; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; import io.opentelemetry.sdk.extension.trace.jaeger.sampler.JaegerRemoteSampler; import io.opentelemetry.sdk.extension.trace.jaeger.sampler.JaegerRemoteSamplerBuilder; import io.opentelemetry.sdk.trace.samplers.Sampler; diff --git a/sdk-extensions/jaeger-remote-sampler/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider b/sdk-extensions/jaeger-remote-sampler/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider similarity index 98% rename from sdk-extensions/jaeger-remote-sampler/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider rename to sdk-extensions/jaeger-remote-sampler/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider index a06efe29e4f..d4a81bc8438 100644 --- a/sdk-extensions/jaeger-remote-sampler/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider +++ b/sdk-extensions/jaeger-remote-sampler/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider @@ -1 +1,2 @@ io.opentelemetry.sdk.extension.trace.jaeger.sampler.internal.JaegerRemoteSamplerComponentProvider + diff --git a/sdk/all/src/main/java/io/opentelemetry/sdk/IncubatingUtil.java b/sdk/all/src/main/java/io/opentelemetry/sdk/IncubatingUtil.java index 281c065f64c..98877b0886c 100644 --- a/sdk/all/src/main/java/io/opentelemetry/sdk/IncubatingUtil.java +++ b/sdk/all/src/main/java/io/opentelemetry/sdk/IncubatingUtil.java @@ -5,7 +5,7 @@ package io.opentelemetry.sdk; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.internal.ExtendedOpenTelemetrySdk; import io.opentelemetry.sdk.internal.SdkConfigProvider; import javax.annotation.Nullable; diff --git a/sdk/all/src/main/java/io/opentelemetry/sdk/internal/ExtendedOpenTelemetrySdk.java b/sdk/all/src/main/java/io/opentelemetry/sdk/internal/ExtendedOpenTelemetrySdk.java index 6981d9e85a0..84acb3435a2 100644 --- a/sdk/all/src/main/java/io/opentelemetry/sdk/internal/ExtendedOpenTelemetrySdk.java +++ b/sdk/all/src/main/java/io/opentelemetry/sdk/internal/ExtendedOpenTelemetrySdk.java @@ -5,9 +5,9 @@ package io.opentelemetry.sdk.internal; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.logs.SdkLoggerProvider; import io.opentelemetry.sdk.logs.internal.SdkLoggerProviderUtil; diff --git a/sdk/all/src/main/java/io/opentelemetry/sdk/internal/SdkConfigProvider.java b/sdk/all/src/main/java/io/opentelemetry/sdk/internal/SdkConfigProvider.java index a5399ed4a23..04b23cc9587 100644 --- a/sdk/all/src/main/java/io/opentelemetry/sdk/internal/SdkConfigProvider.java +++ b/sdk/all/src/main/java/io/opentelemetry/sdk/internal/SdkConfigProvider.java @@ -5,8 +5,8 @@ package io.opentelemetry.sdk.internal; +import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; /** * SDK implementation of {@link ConfigProvider}. From 63fffb9e43b5ff4d931f001f40d9d0411d2a8287 Mon Sep 17 00:00:00 2001 From: navneet singh Date: Tue, 3 Nov 2026 13:17:05 +0530 Subject: [PATCH 2/3] Decouple legacy and stable ComponentProvider SPIs and config models - Restore standalone io.opentelemetry.api.incubator.config.DeclarativeConfigProperties marked @Deprecated (scheduled for removal after 1.68.0) to preserve bytecode compatibility without interface inheritance. - Restore standalone io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider marked @Deprecated without extending the new stable SPI. - Introduce LegacyYamlDeclarativeConfigProperties in sdk-extensions:declarative-config adapting modern config for legacy component providers. - Delete IncubatorDeclarativeConfigPropertiesAdapter and obsolete dynamic configuration TODO comment on declarativeconfig.ComponentProvider. - Enforce fail-fast duplicate provider checking in DeclarativeConfigContext when multiple providers match (type, name). --- .../api/config/package-info.java | 10 + .../DeclarativeConfigPropertiesTest.java | 67 +++++ .../config/DeclarativeConfigException.java | 6 +- .../config/DeclarativeConfigProperties.java | 284 +++++++++++++++++- .../config/DeclarativeConfigPropertyUtil.java | 134 +++++++++ .../EmptyDeclarativeConfigProperties.java | 111 +++++++ .../DeclarativeConfigPropertiesShimTest.java | 31 -- .../DeclarativeConfigPropertiesTest.java | 146 +++++++++ .../declarativeconfig/ComponentProvider.java | 5 - .../spi/declarativeconfig/package-info.java | 13 + .../spi/internal/ComponentProvider.java | 59 ++-- .../internal/ComponentProviderBridgeTest.java | 105 ------- .../DeclarativeConfigContext.java | 72 +++-- ...egacyYamlDeclarativeConfigProperties.java} | 43 ++- .../DeclarativeConfigContextTest.java | 213 ++++++++++++- ...yYamlDeclarativeConfigPropertiesTest.java} | 69 ++--- 16 files changed, 1104 insertions(+), 264 deletions(-) create mode 100644 api/all/src/main/java/io/opentelemetry/api/config/package-info.java create mode 100644 api/all/src/test/java/io/opentelemetry/api/config/DeclarativeConfigPropertiesTest.java create mode 100644 api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtil.java create mode 100644 api/incubator/src/main/java/io/opentelemetry/api/incubator/config/EmptyDeclarativeConfigProperties.java delete mode 100644 api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesShimTest.java create mode 100644 api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesTest.java create mode 100644 sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/package-info.java delete mode 100644 sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProviderBridgeTest.java rename sdk-extensions/{autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapter.java => declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LegacyYamlDeclarativeConfigProperties.java} (66%) rename sdk-extensions/{autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapterTest.java => declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LegacyYamlDeclarativeConfigPropertiesTest.java} (51%) diff --git a/api/all/src/main/java/io/opentelemetry/api/config/package-info.java b/api/all/src/main/java/io/opentelemetry/api/config/package-info.java new file mode 100644 index 00000000000..f80a20ca361 --- /dev/null +++ b/api/all/src/main/java/io/opentelemetry/api/config/package-info.java @@ -0,0 +1,10 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +/** API for declarative configuration. */ +@ParametersAreNonnullByDefault +package io.opentelemetry.api.config; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/api/all/src/test/java/io/opentelemetry/api/config/DeclarativeConfigPropertiesTest.java b/api/all/src/test/java/io/opentelemetry/api/config/DeclarativeConfigPropertiesTest.java new file mode 100644 index 00000000000..17c9a213e93 --- /dev/null +++ b/api/all/src/test/java/io/opentelemetry/api/config/DeclarativeConfigPropertiesTest.java @@ -0,0 +1,67 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.api.config; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Collections; +import org.junit.jupiter.api.Test; + +class DeclarativeConfigPropertiesTest { + + @Test + void empty() { + DeclarativeConfigProperties empty = DeclarativeConfigProperties.empty(); + assertThat(empty).isNotNull(); + assertThat(empty.getString("str")).isNull(); + assertThat(empty.getBoolean("bool")).isNull(); + assertThat(empty.getInt("int")).isNull(); + assertThat(empty.getLong("long")).isNull(); + assertThat(empty.getDouble("double")).isNull(); + assertThat(empty.getScalarList("list", String.class)).isNull(); + assertThat(empty.getStructured("struct")).isNull(); + assertThat(empty.getStructuredList("structList")).isNull(); + assertThat(empty.getPropertyKeys()).isEmpty(); + assertThat(empty.getComponentLoader()).isNotNull(); + + // Default methods with fallback values + assertThat(empty.getString("str", "def")).isEqualTo("def"); + assertThat(empty.getBoolean("bool", true)).isTrue(); + assertThat(empty.getInt("int", 42)).isEqualTo(42); + assertThat(empty.getLong("long", 100L)).isEqualTo(100L); + assertThat(empty.getDouble("double", 3.14)).isEqualTo(3.14); + assertThat(empty.getScalarList("list", String.class, Collections.singletonList("d"))) + .containsExactly("d"); + assertThat(empty.getStructured("struct", empty)).isSameAs(empty); + assertThat(empty.get("struct")).isNotNull(); + assertThat(empty.getStructuredList("structList", Collections.singletonList(empty))) + .containsExactly(empty); + + // Default type check methods + assertThat(empty.isString("str")).isFalse(); + assertThat(empty.isBoolean("bool")).isFalse(); + assertThat(empty.isInt("int")).isFalse(); + assertThat(empty.isLong("long")).isFalse(); + assertThat(empty.isDouble("double")).isFalse(); + } + + @Test + void toMap() { + DeclarativeConfigProperties empty = DeclarativeConfigProperties.empty(); + assertThat(DeclarativeConfigProperties.toMap(empty)).isNotNull().isEmpty(); + } + + @Test + void declarativeConfigException() { + DeclarativeConfigException ex1 = new DeclarativeConfigException("test error"); + assertThat(ex1.getMessage()).isEqualTo("test error"); + + RuntimeException cause = new RuntimeException("cause"); + DeclarativeConfigException ex2 = new DeclarativeConfigException("error with cause", cause); + assertThat(ex2.getMessage()).isEqualTo("error with cause"); + assertThat(ex2.getCause()).isSameAs(cause); + } +} diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigException.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigException.java index c4be13c8e1c..124020b574c 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigException.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigException.java @@ -8,11 +8,11 @@ /** * An exception that is thrown when errors occur with declarative configuration. * - * @deprecated Use {@link io.opentelemetry.api.config.DeclarativeConfigException} instead. + * @deprecated Use {@link io.opentelemetry.api.config.DeclarativeConfigException} instead. Scheduled + * for removal after 1.68.0. */ @Deprecated -public class DeclarativeConfigException - extends io.opentelemetry.api.config.DeclarativeConfigException { +public final class DeclarativeConfigException extends RuntimeException { private static final long serialVersionUID = 3036584181551130522L; diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigProperties.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigProperties.java index 27c1e6bbbde..3b64be6411f 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigProperties.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigProperties.java @@ -5,39 +5,291 @@ package io.opentelemetry.api.incubator.config; +import io.opentelemetry.common.ComponentLoader; +import java.util.List; import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; /** * An interface for accessing declarative configuration data. * + *

An instance of {@link DeclarativeConfigProperties} is equivalent to a YAML mapping node. It has accessors for + * reading scalar properties, {@link #getStructured(String)} for reading children which are + * themselves mappings, and {@link #getStructuredList(String)} for reading children which are + * sequences of mappings. + * + *

This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. + * * @deprecated Use {@link io.opentelemetry.api.config.DeclarativeConfigProperties} instead. + * Scheduled for removal after 1.68.0. */ @Deprecated -public interface DeclarativeConfigProperties - extends io.opentelemetry.api.config.DeclarativeConfigProperties { +public interface DeclarativeConfigProperties { /** * Return an empty {@link DeclarativeConfigProperties} instance. * - * @deprecated Use {@link io.opentelemetry.api.config.DeclarativeConfigProperties#empty()} - * instead. + *

Useful for walking the tree without checking for null. For example, to access a string key + * nested at .foo.bar.baz, call: {@code config.getStructured("foo", empty()).getStructured("bar", + * empty()).getString("baz")}. + */ + static DeclarativeConfigProperties empty() { + return EmptyDeclarativeConfigProperties.getInstance(); + } + + /** Return a map representation of the {@code declarativeConfigProperties}. */ + static Map toMap(DeclarativeConfigProperties declarativeConfigProperties) { + return DeclarativeConfigPropertyUtil.toMap(declarativeConfigProperties); + } + + /** + * Returns a {@link String} configuration property. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * string + */ + @Nullable + String getString(String name); + + /** + * Returns a {@link String} configuration property. + * + * @return a {@link String} configuration property or {@code defaultValue} if a property with + * {@code name} has not been configured or is not a valid scalar string + */ + default String getString(String name, String defaultValue) { + String value = getString(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link Boolean} configuration property. Implementations should use the same rules as + * {@link Boolean#parseBoolean(String)} for handling the values. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * boolean + */ + @Nullable + Boolean getBoolean(String name); + + /** + * Returns a {@link Boolean} configuration property. + * + * @return a {@link Boolean} configuration property or {@code defaultValue} if a property with + * {@code name} has not been configured or is not a valid scalar boolean + */ + default boolean getBoolean(String name, boolean defaultValue) { + Boolean value = getBoolean(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link Integer} configuration property. + * + *

If the underlying config property is {@link Long}, it is converted to {@link Integer} with + * {@link Long#intValue()} which may result in loss of precision. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * integer + */ + @Nullable + Integer getInt(String name); + + /** + * Returns a {@link Integer} configuration property. + * + *

If the underlying config property is {@link Long}, it is converted to {@link Integer} with + * {@link Long#intValue()} which may result in loss of precision. + * + * @return a {@link Integer} configuration property or {@code defaultValue} if a property with + * {@code name} has not been configured or is not a valid scalar integer + */ + default int getInt(String name, int defaultValue) { + Integer value = getInt(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link Long} configuration property. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * long + */ + @Nullable + Long getLong(String name); + + /** + * Returns a {@link Long} configuration property. + * + * @return a {@link Long} configuration property or {@code defaultValue} if a property with {@code + * name} has not been configured or is not a valid scalar long + */ + default long getLong(String name, long defaultValue) { + Long value = getLong(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link Double} configuration property. + * + * @return null if the property has not been configured or if the property is not a valid scalar + * double + */ + @Nullable + Double getDouble(String name); + + /** + * Returns a {@link Double} configuration property. + * + * @return a {@link Double} configuration property or {@code defaultValue} if a property with + * {@code name} has not been configured or is not a valid scalar double + */ + default double getDouble(String name, double defaultValue) { + Double value = getDouble(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link List} configuration property. Empty values and values which do not map to the + * {@code scalarType} will be removed. + * + * @param name the property name + * @param scalarType the scalar type, one of {@link String}, {@link Boolean}, {@link Long} or + * {@link Double} + * @return a {@link List} configuration property, or null if the property has not been configured + * or if the property is not a valid sequence of scalars + * @throws DeclarativeConfigException if {@code scalarType} is not supported + */ + @Nullable + List getScalarList(String name, Class scalarType); + + /** + * Returns a {@link List} configuration property. Empty values and values which do not map to the + * {@code scalarType} will be removed. + * + * @param name the property name + * @param scalarType the scalar type, one of {@link String}, {@link Boolean}, {@link Long} or + * {@link Double} + * @return a {@link List} configuration property or {@code defaultValue} if a property with {@code + * name} has not been configured or is not a valid sequence of scalars + */ + default List getScalarList(String name, Class scalarType, List defaultValue) { + List value = getScalarList(name, scalarType); + return value == null ? defaultValue : value; + } + + /** + * Returns whether the property with {@code name} holds a value which {@link #getString(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar string, + * false otherwise, including when the property is null + */ + boolean isString(String name); + + /** + * Returns whether the property with {@code name} holds a value which {@link #getBoolean(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar boolean, + * false otherwise, including when the property is null + */ + boolean isBoolean(String name); + + /** + * Returns whether the property with {@code name} holds a value which {@link #getInt(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar integer, + * false otherwise, including when the property is null + */ + boolean isInt(String name); + + /** + * Returns whether the property with {@code name} holds a value which {@link #getLong(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar long, + * false otherwise, including when the property is null + */ + boolean isLong(String name); + + /** + * Returns whether the property with {@code name} holds a value which {@link #getDouble(String)} + * accepts. + * + * @return true if a property with {@code name} has been configured and is a valid scalar double, + * false otherwise, including when the property is null + */ + boolean isDouble(String name); + + /** + * Returns a {@link DeclarativeConfigProperties} configuration property. + * + * @return a map-valued configuration property, or {@code null} if {@code name} has not been + * configured or is not a mapping + */ + @Nullable + DeclarativeConfigProperties getStructured(String name); + + /** + * Returns a {@link DeclarativeConfigProperties} configuration property. + * + * @return a map-valued configuration property, or {@code defaultValue} if {@code name} has not + * been configured or is not a mapping + */ + default DeclarativeConfigProperties getStructured( + String name, DeclarativeConfigProperties defaultValue) { + DeclarativeConfigProperties value = getStructured(name); + return value == null ? defaultValue : value; + } + + /** + * Returns a {@link DeclarativeConfigProperties} configuration property, or {@link #empty()} if a + * property with {@code name} has not been configured. + * + *

This is syntactic sugar for the common operation of calling {@code + * config.getStructured(name, empty())}. If you need to distinguish between a property being set + * but empty vs. not set, use {@link #getStructured(String)}. + * + * @return a map-valued configuration property, or an empty {@link DeclarativeConfigProperties} + * instance if {@code name} has not been configured or is not a mapping */ - @Deprecated - static io.opentelemetry.api.config.DeclarativeConfigProperties empty() { - return io.opentelemetry.api.config.DeclarativeConfigProperties.empty(); + default DeclarativeConfigProperties get(String name) { + return getStructured(name, empty()); } /** - * Return a map representation of the {@code declarativeConfigProperties}. + * Returns a list of {@link DeclarativeConfigProperties} configuration property. * - * @deprecated Use {@link - * io.opentelemetry.api.config.DeclarativeConfigProperties#toMap(io.opentelemetry.api.config.DeclarativeConfigProperties)} - * instead. + * @return a list of map-valued configuration property, or {@code null} if {@code name} has not + * been configured or is not a sequence of mappings */ - @Deprecated - static Map toMap( - io.opentelemetry.api.config.DeclarativeConfigProperties declarativeConfigProperties) { - return io.opentelemetry.api.config.DeclarativeConfigProperties.toMap( - declarativeConfigProperties); + @Nullable + List getStructuredList(String name); + + /** + * Returns a list of {@link DeclarativeConfigProperties} configuration property. + * + * @return a list of map-valued configuration property, or {@code defaultValue} if {@code name} + * has not been configured or is not a sequence of mappings + */ + default List getStructuredList( + String name, List defaultValue) { + List value = getStructuredList(name); + return value == null ? defaultValue : value; } + + /** + * Returns a set of all configuration property keys. + * + * @return the configuration property keys + */ + Set getPropertyKeys(); + + /** Return a {@link ComponentLoader} that should be used to load SPIs. */ + ComponentLoader getComponentLoader(); } diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtil.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtil.java new file mode 100644 index 00000000000..f546c72dbf2 --- /dev/null +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtil.java @@ -0,0 +1,134 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.api.incubator.config; + +import static java.util.stream.Collectors.toList; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.function.BiFunction; +import javax.annotation.Nullable; + +@SuppressWarnings("deprecation") +final class DeclarativeConfigPropertyUtil { + + private DeclarativeConfigPropertyUtil() {} + + private static final List> + valueResolvers = + Arrays.asList( + DeclarativeConfigPropertyUtil::getString, + DeclarativeConfigPropertyUtil::getBoolean, + DeclarativeConfigPropertyUtil::getLong, + DeclarativeConfigPropertyUtil::getDouble, + DeclarativeConfigPropertyUtil::getStringList, + DeclarativeConfigPropertyUtil::getBooleanList, + DeclarativeConfigPropertyUtil::getLongList, + DeclarativeConfigPropertyUtil::getDoubleList, + DeclarativeConfigPropertyUtil::getStructuredList, + DeclarativeConfigPropertyUtil::getStructured); + + static Map toMap(DeclarativeConfigProperties declarativeConfigProperties) { + Set propertyKeys = declarativeConfigProperties.getPropertyKeys(); + Map result = new HashMap<>(propertyKeys.size()); + for (String key : declarativeConfigProperties.getPropertyKeys()) { + result.put(key, resolveValue(key, declarativeConfigProperties)); + } + return result; + } + + @Nullable + private static Object resolveValue( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + for (int i = 0; i < valueResolvers.size(); i++) { + try { + Object value = valueResolvers.get(i).apply(key, declarativeConfigProperties); + if (value != null) { + return value; + } + } catch (DeclarativeConfigException e) { + // Ignore and continue + } + } + return null; + } + + @Nullable + private static Object getString( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return declarativeConfigProperties.isString(key) + ? declarativeConfigProperties.getString(key) + : null; + } + + @Nullable + private static Object getBoolean( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return declarativeConfigProperties.isBoolean(key) + ? declarativeConfigProperties.getBoolean(key) + : null; + } + + @Nullable + private static Object getLong( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return declarativeConfigProperties.isLong(key) + ? declarativeConfigProperties.getLong(key) + : null; + } + + @Nullable + private static Object getDouble( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return declarativeConfigProperties.isDouble(key) + ? declarativeConfigProperties.getDouble(key) + : null; + } + + @Nullable + private static Object getStringList( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return declarativeConfigProperties.getScalarList(key, String.class); + } + + @Nullable + private static Object getBooleanList( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return declarativeConfigProperties.getScalarList(key, Boolean.class); + } + + @Nullable + private static Object getLongList( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return declarativeConfigProperties.getScalarList(key, Long.class); + } + + @Nullable + private static Object getDoubleList( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return declarativeConfigProperties.getScalarList(key, Double.class); + } + + @Nullable + private static Object getStructuredList( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return Optional.ofNullable(declarativeConfigProperties.getStructuredList(key)) + .map(list -> list.stream().map(DeclarativeConfigPropertyUtil::toMap).collect(toList())) + .orElse(null); + } + + @Nullable + private static Object getStructured( + String key, DeclarativeConfigProperties declarativeConfigProperties) { + return Optional.ofNullable(declarativeConfigProperties.getStructured(key)) + .map(DeclarativeConfigPropertyUtil::toMap) + .orElse(null); + } +} diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/EmptyDeclarativeConfigProperties.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/EmptyDeclarativeConfigProperties.java new file mode 100644 index 00000000000..4141f6c8e52 --- /dev/null +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/EmptyDeclarativeConfigProperties.java @@ -0,0 +1,111 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.api.incubator.config; + +import io.opentelemetry.common.ComponentLoader; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; + +/** Empty instance of {@link DeclarativeConfigProperties}. */ +@SuppressWarnings("deprecation") +final class EmptyDeclarativeConfigProperties implements DeclarativeConfigProperties { + + private static final EmptyDeclarativeConfigProperties INSTANCE = + new EmptyDeclarativeConfigProperties(); + private static final ComponentLoader COMPONENT_LOADER = + ComponentLoader.forClassLoader(EmptyDeclarativeConfigProperties.class.getClassLoader()); + + private EmptyDeclarativeConfigProperties() {} + + static EmptyDeclarativeConfigProperties getInstance() { + return INSTANCE; + } + + @Nullable + @Override + public String getString(String name) { + return null; + } + + @Nullable + @Override + public Boolean getBoolean(String name) { + return null; + } + + @Nullable + @Override + public Integer getInt(String name) { + return null; + } + + @Nullable + @Override + public Long getLong(String name) { + return null; + } + + @Nullable + @Override + public Double getDouble(String name) { + return null; + } + + @Nullable + @Override + public List getScalarList(String name, Class scalarType) { + return null; + } + + @Override + public boolean isString(String name) { + return false; + } + + @Override + public boolean isBoolean(String name) { + return false; + } + + @Override + public boolean isInt(String name) { + return false; + } + + @Override + public boolean isLong(String name) { + return false; + } + + @Override + public boolean isDouble(String name) { + return false; + } + + @Nullable + @Override + public DeclarativeConfigProperties getStructured(String name) { + return null; + } + + @Nullable + @Override + public List getStructuredList(String name) { + return null; + } + + @Override + public Set getPropertyKeys() { + return Collections.emptySet(); + } + + @Override + public ComponentLoader getComponentLoader() { + return COMPONENT_LOADER; + } +} diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesShimTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesShimTest.java deleted file mode 100644 index b78fb1c94bb..00000000000 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesShimTest.java +++ /dev/null @@ -1,31 +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 java.util.Map; -import org.junit.jupiter.api.Test; - -@SuppressWarnings("deprecation") -class DeclarativeConfigPropertiesShimTest { - - @Test - void empty() { - io.opentelemetry.api.config.DeclarativeConfigProperties empty = - DeclarativeConfigProperties.empty(); - assertThat(empty).isNotNull(); - assertThat(empty.getPropertyKeys()).isEmpty(); - } - - @Test - void toMap() { - io.opentelemetry.api.config.DeclarativeConfigProperties empty = - DeclarativeConfigProperties.empty(); - Map map = DeclarativeConfigProperties.toMap(empty); - assertThat(map).isNotNull().isEmpty(); - } -} diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesTest.java new file mode 100644 index 00000000000..bb8abef5873 --- /dev/null +++ b/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertiesTest.java @@ -0,0 +1,146 @@ +/* + * 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.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; +import org.junit.jupiter.api.Test; + +@SuppressWarnings("deprecation") +class DeclarativeConfigPropertiesTest { + + @Test + void empty() { + DeclarativeConfigProperties empty = DeclarativeConfigProperties.empty(); + assertThat(empty).isNotNull(); + assertThat(empty.getString("str")).isNull(); + assertThat(empty.getBoolean("bool")).isNull(); + assertThat(empty.getInt("int")).isNull(); + assertThat(empty.getLong("long")).isNull(); + assertThat(empty.getDouble("double")).isNull(); + assertThat(empty.getScalarList("list", String.class)).isNull(); + assertThat(empty.getStructured("struct")).isNull(); + assertThat(empty.getStructuredList("structList")).isNull(); + assertThat(empty.getPropertyKeys()).isEmpty(); + assertThat(empty.getComponentLoader()).isNotNull(); + + // Default methods with default values + assertThat(empty.getString("str", "def")).isEqualTo("def"); + assertThat(empty.getBoolean("bool", true)).isTrue(); + assertThat(empty.getInt("int", 42)).isEqualTo(42); + assertThat(empty.getLong("long", 100L)).isEqualTo(100L); + assertThat(empty.getDouble("double", 3.14)).isEqualTo(3.14); + assertThat(empty.getScalarList("list", String.class, Collections.singletonList("d"))) + .containsExactly("d"); + assertThat(empty.getStructured("struct", empty)).isSameAs(empty); + assertThat(empty.get("struct")).isNotNull(); + assertThat(empty.getStructuredList("structList", Collections.singletonList(empty))) + .containsExactly(empty); + + // Default type check methods + assertThat(empty.isString("str")).isFalse(); + assertThat(empty.isBoolean("bool")).isFalse(); + assertThat(empty.isInt("int")).isFalse(); + assertThat(empty.isLong("long")).isFalse(); + assertThat(empty.isDouble("double")).isFalse(); + } + + @Test + void toMap() { + DeclarativeConfigProperties empty = DeclarativeConfigProperties.empty(); + Map map = DeclarativeConfigProperties.toMap(empty); + assertThat(map).isNotNull().isEmpty(); + } + + @Test + void toMapWithValues() { + DeclarativeConfigProperties props = mock(DeclarativeConfigProperties.class); + DeclarativeConfigProperties subProps = mock(DeclarativeConfigProperties.class); + DeclarativeConfigProperties listItemProps = mock(DeclarativeConfigProperties.class); + + when(props.getScalarList(anyString(), any())).thenReturn(null); + when(props.getStructuredList(anyString())).thenReturn(null); + when(props.getStructured(anyString())).thenReturn(null); + + when(props.getPropertyKeys()) + .thenReturn( + new HashSet<>( + Arrays.asList( + "str", + "bool", + "long", + "double", + "strList", + "boolList", + "longList", + "doubleList", + "struct", + "structList", + "unknown"))); + + when(props.isString("str")).thenReturn(true); + when(props.getString("str")).thenReturn("hello"); + + when(props.isBoolean("bool")).thenReturn(true); + when(props.getBoolean("bool")).thenReturn(true); + + when(props.isLong("long")).thenReturn(true); + when(props.getLong("long")).thenReturn(123L); + + when(props.isDouble("double")).thenReturn(true); + when(props.getDouble("double")).thenReturn(45.67); + + when(props.getScalarList("strList", String.class)).thenReturn(Arrays.asList("a", "b")); + when(props.getScalarList("boolList", Boolean.class)).thenReturn(Arrays.asList(true, false)); + when(props.getScalarList("longList", Long.class)).thenReturn(Arrays.asList(1L, 2L)); + when(props.getScalarList("doubleList", Double.class)).thenReturn(Arrays.asList(1.1, 2.2)); + + when(subProps.getPropertyKeys()).thenReturn(Collections.singleton("subKey")); + when(subProps.isString("subKey")).thenReturn(true); + when(subProps.getString("subKey")).thenReturn("subVal"); + when(props.getStructured("struct")).thenReturn(subProps); + + when(listItemProps.getPropertyKeys()).thenReturn(Collections.singleton("itemKey")); + when(listItemProps.isLong("itemKey")).thenReturn(true); + when(listItemProps.getLong("itemKey")).thenReturn(999L); + when(props.getStructuredList("structList")) + .thenReturn(Collections.singletonList(listItemProps)); + + Map map = DeclarativeConfigProperties.toMap(props); + assertThat(map).containsEntry("str", "hello"); + assertThat(map).containsEntry("bool", true); + assertThat(map).containsEntry("long", 123L); + assertThat(map).containsEntry("double", 45.67); + assertThat(map).containsEntry("strList", Arrays.asList("a", "b")); + assertThat(map).containsEntry("boolList", Arrays.asList(true, false)); + assertThat(map).containsEntry("longList", Arrays.asList(1L, 2L)); + assertThat(map).containsEntry("doubleList", Arrays.asList(1.1, 2.2)); + assertThat(map).containsEntry("struct", Collections.singletonMap("subKey", "subVal")); + assertThat(map) + .containsEntry( + "structList", Collections.singletonList(Collections.singletonMap("itemKey", 999L))); + assertThat(map).containsEntry("unknown", null); + } + + @Test + void declarativeConfigException() { + DeclarativeConfigException ex1 = new DeclarativeConfigException("error message"); + assertThat(ex1.getMessage()).isEqualTo("error message"); + + RuntimeException cause = new RuntimeException("cause"); + DeclarativeConfigException ex2 = new DeclarativeConfigException("error with cause", cause); + assertThat(ex2.getMessage()).isEqualTo("error with cause"); + assertThat(ex2.getCause()).isSameAs(cause); + } +} diff --git a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/ComponentProvider.java b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/ComponentProvider.java index bb99b9ff98c..b7874803d06 100644 --- a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/ComponentProvider.java +++ b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/ComponentProvider.java @@ -24,9 +24,6 @@ * used, and {@link #create(DeclarativeConfigProperties)} is (currently) called with an empty {@link * DeclarativeConfigProperties}. * - *

This class is not intended for use by application developers. Its API is stable and will not - * be changed or removed in a backwards-incompatible manner. - * *

Supported component types include: {@link SpanExporter}, {@link MetricExporter}, {@link * LogRecordExporter}, {@link SpanProcessor}, {@link LogRecordProcessor}, {@link TextMapPropagator}, * {@link Sampler}, {@link Resource}. @@ -56,7 +53,5 @@ public interface ComponentProvider { * file. * @return an instance the SDK extension component */ - // TODO (jack-berg): consider dynamic configuration use case before stabilizing in case that - // affects any API decisions Object create(DeclarativeConfigProperties config); } diff --git a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/package-info.java b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/package-info.java new file mode 100644 index 00000000000..bb65d1147b9 --- /dev/null +++ b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/declarativeconfig/package-info.java @@ -0,0 +1,13 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Java SPI (Service Provider Interface) for providing custom components to declarative + * configuration. + */ +@ParametersAreNonnullByDefault +package io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java index e0581f6d301..1bdbe1291b7 100644 --- a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java +++ b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java @@ -5,36 +5,61 @@ package io.opentelemetry.sdk.autoconfigure.spi.internal; -import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.sdk.logs.LogRecordProcessor; +import io.opentelemetry.sdk.logs.export.LogRecordExporter; +import io.opentelemetry.sdk.metrics.export.MetricExporter; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.SpanProcessor; +import io.opentelemetry.sdk.trace.export.SpanExporter; +import io.opentelemetry.sdk.trace.samplers.Sampler; /** - * Provides configured instances of SDK extension components. + * Provides configured instances of SDK extension components. {@link ComponentProvider} allows SDK + * extension components which are not part of the core SDK to be referenced in declarative based + * configuration. + * + *

NOTE: when {@link #getType()} is {@link Resource}, the {@link #getName()} is not (currently) + * used, and {@link #create(DeclarativeConfigProperties)} is (currently) called with an empty {@link + * DeclarativeConfigProperties}. * *

This class is internal and is hence not for public use. Its APIs are unstable and can change * at any time. * + *

Supported component types include: {@link SpanExporter}, {@link MetricExporter}, {@link + * LogRecordExporter}, {@link SpanProcessor}, {@link LogRecordProcessor}, {@link TextMapPropagator}, + * {@link Sampler}, {@link Resource}. + * * @deprecated Use {@link * io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider} instead. + * Scheduled for removal after 1.68.0. */ @Deprecated -public interface ComponentProvider - extends io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider { +public interface ComponentProvider { /** - * Configure an instance of the SDK extension component according to the {@code config}. + * The type of SDK extension component. For example, if providing instances of a custom span + * exporter, the type would be {@link SpanExporter}. + */ + Class getType(); + + /** + * The name of the exporter, to be referenced in configuration files. For example, if providing + * instances of a custom span exporter for the "acme" protocol, the name might be "acme". * - * @deprecated Implement {@link #create(DeclarativeConfigProperties)} instead. + *

This name MUST not be the same as any other component provider name which returns components + * of the same {@link #getType() type}. In other words, {@link #getType()} and name form a + * composite key uniquely identifying the provider. */ - @Deprecated - default Object create(io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { - return create((DeclarativeConfigProperties) config); - } + String getName(); - @Override - default Object create(DeclarativeConfigProperties config) { - if (config instanceof io.opentelemetry.api.incubator.config.DeclarativeConfigProperties) { - return create((io.opentelemetry.api.incubator.config.DeclarativeConfigProperties) config); - } - return create(new IncubatorDeclarativeConfigPropertiesAdapter(config)); - } + /** + * Configure an instance of the SDK extension component according to the {@code config}. + * + * @param config the configuration provided where the component is referenced in a configuration + * file. + * @return an instance the SDK extension component + */ + Object create(DeclarativeConfigProperties config); } diff --git a/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProviderBridgeTest.java b/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProviderBridgeTest.java deleted file mode 100644 index e6178f00880..00000000000 --- a/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProviderBridgeTest.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.sdk.autoconfigure.spi.internal; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import io.opentelemetry.api.config.DeclarativeConfigProperties; -import org.junit.jupiter.api.Test; - -@SuppressWarnings("deprecation") -class ComponentProviderBridgeTest { - - @Test - void testLegacyProviderWithPureModernConfig() { - ComponentProvider legacyProvider = - new ComponentProvider() { - @Override - public Class getType() { - return String.class; - } - - @Override - public String getName() { - return "legacy"; - } - - @Override - public Object create( - io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { - return "created:" + config.getString("key"); - } - }; - - DeclarativeConfigProperties modernConfig = mock(DeclarativeConfigProperties.class); - when(modernConfig.getString("key")).thenReturn("value"); - - Object result = legacyProvider.create(modernConfig); - assertThat(result).isEqualTo("created:value"); - } - - @Test - void testLegacyProviderWithIncubatorConfig() { - ComponentProvider legacyProvider = - new ComponentProvider() { - @Override - public Class getType() { - return String.class; - } - - @Override - public String getName() { - return "legacy"; - } - - @Override - public Object create( - io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { - return "created:" + config.getString("key"); - } - }; - - io.opentelemetry.api.incubator.config.DeclarativeConfigProperties incubatorConfig = - mock(io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.class); - when(incubatorConfig.getString("key")).thenReturn("incubatorValue"); - - // Invoke via modern signature where config is an instance of incubator config - DeclarativeConfigProperties polyConfig = incubatorConfig; - Object result = legacyProvider.create(polyConfig); - assertThat(result).isEqualTo("created:incubatorValue"); - } - - @Test - void testModernProviderWithIncubatorConfig() { - ComponentProvider modernProvider = - new ComponentProvider() { - @Override - public Class getType() { - return String.class; - } - - @Override - public String getName() { - return "modern"; - } - - @Override - public Object create(DeclarativeConfigProperties config) { - return "created:" + config.getString("key"); - } - }; - - io.opentelemetry.api.incubator.config.DeclarativeConfigProperties incubatorConfig = - mock(io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.class); - when(incubatorConfig.getString("key")).thenReturn("legacyValue"); - - // Invoke via deprecated legacy signature - Object result = modernProvider.create(incubatorConfig); - assertThat(result).isEqualTo("created:legacyValue"); - } -} diff --git a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContext.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContext.java index 135d3089aa7..0e60164be3e 100644 --- a/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContext.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContext.java @@ -43,6 +43,12 @@ class DeclarativeConfigContext implements ComponentLoader { @Nullable private volatile MeterProvider meterProvider; @Nullable private ConfigProvider configProvider; @Nullable private List componentProviders = null; + + @Nullable + @SuppressWarnings("deprecation") + private List + legacyComponentProviders = null; + @Nullable private DeclarativeConfigurationBuilder builder; DeclarativeConfigContext(ComponentLoader componentLoader) { @@ -147,48 +153,62 @@ T loadComponent(Class type, ConfigKeyValue configKeyValue) { configKeyValue.getValue(), configProvider == null ? ConfigProvider.noop() : configProvider); - if (componentProviders == null) { - List providers = - new ArrayList<>(ComponentLoader.loadList(this, ComponentProvider.class)); - for (io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider legacyProvider : + List providers = this.componentProviders; + List legacyProviders = + this.legacyComponentProviders; + if (providers == null || legacyProviders == null) { + providers = ComponentLoader.loadList(this, ComponentProvider.class); + legacyProviders = ComponentLoader.loadList( - this, io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider.class)) { - if (providers.stream() - .noneMatch( - p -> - p.getType() == legacyProvider.getType() - && p.getName().equals(legacyProvider.getName()))) { - providers.add(legacyProvider); - } - } - componentProviders = providers; + this, io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider.class); + this.componentProviders = providers; + this.legacyComponentProviders = legacyProviders; } List matchedProviders = - componentProviders.stream() + providers.stream() + .filter( + componentProvider -> + componentProvider.getType() == type && name.equals(componentProvider.getName())) + .collect(Collectors.toList()); + List matchedLegacyProviders = + legacyProviders.stream() .filter( componentProvider -> componentProvider.getType() == type && name.equals(componentProvider.getName())) .collect(Collectors.toList()); - if (matchedProviders.isEmpty()) { + + int totalMatches = matchedProviders.size() + matchedLegacyProviders.size(); + if (totalMatches == 0) { throw new DeclarativeConfigException( "No component provider detected for " + type.getName() + " with name \"" + name + "\"."); } - if (matchedProviders.size() > 1) { + if (totalMatches > 1) { + List providerClassNames = new ArrayList<>(); + matchedProviders.forEach(provider -> providerClassNames.add(provider.getClass().getName())); + matchedLegacyProviders.forEach( + provider -> providerClassNames.add(provider.getClass().getName())); throw new DeclarativeConfigException( "Component provider conflict. Multiple providers detected for " + type.getName() + " with name \"" + name + "\": " - + componentProviders.stream() - .map(provider -> provider.getClass().getName()) - .collect(Collectors.joining(",", "[", "]"))); + + providerClassNames.stream().collect(Collectors.joining(",", "[", "]"))); } - // Exactly one matching component provider - ComponentProvider provider = matchedProviders.get(0); + Object component; + String providerClassName; try { - Object component = provider.create(config); + if (!matchedProviders.isEmpty()) { + ComponentProvider provider = matchedProviders.get(0); + providerClassName = provider.getClass().getName(); + component = provider.create(config); + } else { + io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider provider = + matchedLegacyProviders.get(0); + providerClassName = provider.getClass().getName(); + component = provider.create(new LegacyYamlDeclarativeConfigProperties(config)); + } if (component instanceof Closeable) { closeables.add((Closeable) component); } @@ -199,7 +219,7 @@ T loadComponent(Class type, ConfigKeyValue configKeyValue) { + " with name \"" + name + "\". Component provider " - + provider.getClass().getName() + + providerClassName + " returned an unexpected component type: " + component.getClass().getName()); } @@ -231,10 +251,8 @@ Set getListeners() { return Collections.unmodifiableSet(listeners); } - @SuppressWarnings("deprecation") private static class ExtendedDeclarativeConfigPropertiesImpl - implements ExtendedDeclarativeConfigProperties, - io.opentelemetry.api.incubator.config.DeclarativeConfigProperties { + implements ExtendedDeclarativeConfigProperties { private final DeclarativeConfigProperties delegate; private final ConfigProvider configProvider; diff --git a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapter.java b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LegacyYamlDeclarativeConfigProperties.java similarity index 66% rename from sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapter.java rename to sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LegacyYamlDeclarativeConfigProperties.java index 54c6a4a13ef..623543756f3 100644 --- a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapter.java +++ b/sdk-extensions/declarative-config/src/main/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LegacyYamlDeclarativeConfigProperties.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.sdk.autoconfigure.spi.internal; +package io.opentelemetry.sdk.autoconfigure.declarativeconfig; import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; @@ -12,13 +12,21 @@ import java.util.Set; import javax.annotation.Nullable; +/** + * Temporary adapter of declarative config properties implementing the legacy incubator interface + * {@link io.opentelemetry.api.incubator.config.DeclarativeConfigProperties} for backwards + * compatibility with legacy {@link + * io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider}. + * + *

Scheduled for removal after 1.68.0. + */ @SuppressWarnings("deprecation") -final class IncubatorDeclarativeConfigPropertiesAdapter +final class LegacyYamlDeclarativeConfigProperties implements io.opentelemetry.api.incubator.config.DeclarativeConfigProperties { private final DeclarativeConfigProperties delegate; - IncubatorDeclarativeConfigPropertiesAdapter(DeclarativeConfigProperties delegate) { + LegacyYamlDeclarativeConfigProperties(DeclarativeConfigProperties delegate) { this.delegate = delegate; } @@ -52,6 +60,12 @@ public Double getDouble(String name) { return delegate.getDouble(name); } + @Nullable + @Override + public List getScalarList(String name, Class scalarType) { + return delegate.getScalarList(name, scalarType); + } + @Override public boolean isString(String name) { return delegate.isString(name); @@ -79,29 +93,26 @@ public boolean isDouble(String name) { @Nullable @Override - public List getScalarList(String name, Class scalarType) { - return delegate.getScalarList(name, scalarType); - } - - @Nullable - @Override - public DeclarativeConfigProperties getStructured(String name) { + public io.opentelemetry.api.incubator.config.DeclarativeConfigProperties getStructured( + String name) { DeclarativeConfigProperties structured = delegate.getStructured(name); - return structured == null ? null : new IncubatorDeclarativeConfigPropertiesAdapter(structured); + return structured == null ? null : new LegacyYamlDeclarativeConfigProperties(structured); } @Nullable @Override - public List getStructuredList(String name) { + public List getStructuredList( + String name) { List list = delegate.getStructuredList(name); if (list == null) { return null; } - List adapted = new ArrayList<>(list.size()); + List result = + new ArrayList<>(list.size()); for (DeclarativeConfigProperties item : list) { - adapted.add(new IncubatorDeclarativeConfigPropertiesAdapter(item)); + result.add(new LegacyYamlDeclarativeConfigProperties(item)); } - return adapted; + return result; } @Override @@ -116,6 +127,6 @@ public ComponentLoader getComponentLoader() { @Override public String toString() { - return "IncubatorDeclarativeConfigPropertiesAdapter{" + delegate + '}'; + return "LegacyYamlDeclarativeConfigProperties{" + delegate + '}'; } } diff --git a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContextTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContextTest.java index fdfb09a80ad..a50811ecaae 100644 --- a/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContextTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/DeclarativeConfigContextTest.java @@ -8,15 +8,21 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import io.opentelemetry.api.config.DeclarativeConfigException; import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.sdk.autoconfigure.spi.declarativeconfig.ComponentProvider; +import io.opentelemetry.sdk.common.InternalTelemetryVersion; import io.opentelemetry.sdk.resources.Resource; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -124,7 +130,9 @@ public String getName() { } @Override - public Object create(DeclarativeConfigProperties config) { + public Object create( + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { + assertThat(config).isInstanceOf(LegacyYamlDeclarativeConfigProperties.class); return expectedResource; } }; @@ -145,7 +153,7 @@ public Object create(DeclarativeConfigProperties config) { @Test @SuppressWarnings("deprecation") - void legacyComponentProviderDeduplicatedWhenModernProviderExists() { + void legacyComponentProviderConflictWhenModernProviderExists() { Resource modernResource = Resource.builder().put("source", "modern").build(); Resource legacyResource = Resource.builder().put("source", "legacy").build(); @@ -180,7 +188,8 @@ public String getName() { } @Override - public Object create(DeclarativeConfigProperties config) { + public Object create( + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { return legacyResource; } }; @@ -192,13 +201,197 @@ public Object create(DeclarativeConfigProperties config) { .when(componentLoader) .load(io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider.class); - Resource resource = - context.loadComponent( - Resource.class, - ConfigKeyValue.of( - "duplicate-test", - YamlDeclarativeConfigProperties.create(Collections.emptyMap(), componentLoader))); + assertThatThrownBy( + () -> + context.loadComponent( + Resource.class, + ConfigKeyValue.of( + "duplicate-test", + YamlDeclarativeConfigProperties.create( + Collections.emptyMap(), componentLoader)))) + .isInstanceOf(DeclarativeConfigException.class) + .hasMessageContaining("Component provider conflict. Multiple providers detected for"); + } - assertThat(resource).isSameAs(modernResource); + @Test + @SuppressWarnings("deprecation") + void legacyComponentProviderConflictWhenMultipleLegacyProvidersExist() { + Resource legacyResource1 = Resource.builder().put("source", "legacy1").build(); + Resource legacyResource2 = Resource.builder().put("source", "legacy2").build(); + + io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider legacyProvider1 = + new io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider() { + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "duplicate-legacy"; + } + + @Override + public Object create( + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { + return legacyResource1; + } + }; + + io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider legacyProvider2 = + new io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider() { + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "duplicate-legacy"; + } + + @Override + public Object create( + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties config) { + return legacyResource2; + } + }; + + doReturn(Arrays.asList(legacyProvider1, legacyProvider2)) + .when(componentLoader) + .load(io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider.class); + + assertThatThrownBy( + () -> + context.loadComponent( + Resource.class, + ConfigKeyValue.of( + "duplicate-legacy", + YamlDeclarativeConfigProperties.create( + Collections.emptyMap(), componentLoader)))) + .isInstanceOf(DeclarativeConfigException.class) + .hasMessageContaining("Component provider conflict. Multiple providers detected for"); + } + + @Test + void componentProviderUnexpectedComponentType() { + ComponentProvider provider = + new ComponentProvider() { + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "bad-type"; + } + + @Override + public Object create(DeclarativeConfigProperties config) { + return "not-a-resource"; + } + }; + + doReturn(Collections.singletonList(provider)) + .when(componentLoader) + .load(ComponentProvider.class); + + assertThatThrownBy( + () -> + context.loadComponent( + Resource.class, + ConfigKeyValue.of( + "bad-type", + YamlDeclarativeConfigProperties.create( + Collections.emptyMap(), componentLoader)))) + .isInstanceOf(DeclarativeConfigException.class) + .hasMessageStartingWith( + "Error configuring io.opentelemetry.sdk.resources.Resource with name \"bad-type\"") + .hasCauseInstanceOf(DeclarativeConfigException.class) + .hasRootCauseMessage( + "Error configuring io.opentelemetry.sdk.resources.Resource with name \"bad-type\". Component provider " + + provider.getClass().getName() + + " returned an unexpected component type: java.lang.String"); + } + + @Test + void componentProviderThrowsExceptionWrapped() { + ComponentProvider provider = + new ComponentProvider() { + @Override + public Class getType() { + return Resource.class; + } + + @Override + public String getName() { + return "throws-error"; + } + + @Override + public Object create(DeclarativeConfigProperties config) { + throw new IllegalStateException("initialization failure"); + } + }; + + doReturn(Collections.singletonList(provider)) + .when(componentLoader) + .load(ComponentProvider.class); + + assertThatThrownBy( + () -> + context.loadComponent( + Resource.class, + ConfigKeyValue.of( + "throws-error", + YamlDeclarativeConfigProperties.create( + Collections.emptyMap(), componentLoader)))) + .isInstanceOf(DeclarativeConfigException.class) + .hasMessageStartingWith( + "Error configuring io.opentelemetry.sdk.resources.Resource with name \"throws-error\"") + .hasCauseInstanceOf(IllegalStateException.class); + } + + @Test + void setInternalTelemetry_nullWhenConfigProviderNull() { + AtomicReference meterProviderRef = new AtomicReference<>(); + AtomicReference versionRef = new AtomicReference<>(); + + context.setInternalTelemetry(supplier -> meterProviderRef.set(supplier.get()), versionRef::set); + + assertThat(meterProviderRef.get()).isSameAs(MeterProvider.noop()); + assertThat(versionRef.get()).isNull(); + } + + @Test + void setInternalTelemetry_legacy() { + ConfigProvider configProvider = mock(ConfigProvider.class); + DeclarativeConfigProperties otelSdkProps = mock(DeclarativeConfigProperties.class); + when(configProvider.getInstrumentationConfig("otel_sdk")).thenReturn(otelSdkProps); + when(otelSdkProps.getString("internal_telemetry_version")).thenReturn("legacy"); + + DeclarativeConfigContext ctx = new DeclarativeConfigContext(componentLoader); + ctx.setConfigProvider(configProvider); + + AtomicReference versionRef = new AtomicReference<>(); + ctx.setInternalTelemetry(supplier -> {}, versionRef::set); + + assertThat(versionRef.get()).isEqualTo(InternalTelemetryVersion.LEGACY); + } + + @Test + void setInternalTelemetry_invalid() { + ConfigProvider configProvider = mock(ConfigProvider.class); + DeclarativeConfigProperties otelSdkProps = mock(DeclarativeConfigProperties.class); + when(configProvider.getInstrumentationConfig("otel_sdk")).thenReturn(otelSdkProps); + when(otelSdkProps.getString("internal_telemetry_version")).thenReturn("invalid_ver"); + + DeclarativeConfigContext ctx = new DeclarativeConfigContext(componentLoader); + ctx.setConfigProvider(configProvider); + + assertThatThrownBy(() -> ctx.setInternalTelemetry(supplier -> {}, version -> {})) + .isInstanceOf(DeclarativeConfigException.class) + .hasMessageContaining("Invalid sdk telemetry version: invalid_ver"); } } diff --git a/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapterTest.java b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LegacyYamlDeclarativeConfigPropertiesTest.java similarity index 51% rename from sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapterTest.java rename to sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LegacyYamlDeclarativeConfigPropertiesTest.java index 644ed92f88b..f086a767c8b 100644 --- a/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/IncubatorDeclarativeConfigPropertiesAdapterTest.java +++ b/sdk-extensions/declarative-config/src/test/java/io/opentelemetry/sdk/autoconfigure/declarativeconfig/LegacyYamlDeclarativeConfigPropertiesTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.sdk.autoconfigure.spi.internal; +package io.opentelemetry.sdk.autoconfigure.declarativeconfig; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -16,10 +16,10 @@ import org.junit.jupiter.api.Test; @SuppressWarnings("deprecation") -class IncubatorDeclarativeConfigPropertiesAdapterTest { +class LegacyYamlDeclarativeConfigPropertiesTest { @Test - void testAdapterDelegation() { + void delegation() { DeclarativeConfigProperties delegate = mock(DeclarativeConfigProperties.class); DeclarativeConfigProperties child = mock(DeclarativeConfigProperties.class); ComponentLoader componentLoader = mock(ComponentLoader.class); @@ -48,36 +48,37 @@ void testAdapterDelegation() { when(delegate.getComponentLoader()).thenReturn(componentLoader); when(delegate.toString()).thenReturn("mockDelegate"); - IncubatorDeclarativeConfigPropertiesAdapter adapter = - new IncubatorDeclarativeConfigPropertiesAdapter(delegate); - - assertThat(adapter.getString("str")).isEqualTo("hello"); - assertThat(adapter.getBoolean("bool")).isTrue(); - assertThat(adapter.getInt("int")).isEqualTo(42); - assertThat(adapter.getLong("long")).isEqualTo(100L); - assertThat(adapter.getDouble("double")).isEqualTo(3.14); - - assertThat(adapter.isString("str")).isTrue(); - assertThat(adapter.isBoolean("bool")).isTrue(); - assertThat(adapter.isInt("int")).isTrue(); - assertThat(adapter.isLong("long")).isTrue(); - assertThat(adapter.isDouble("double")).isTrue(); - - assertThat(adapter.getScalarList("list", String.class)).containsExactly("item"); - - DeclarativeConfigProperties adaptedChild = adapter.getStructured("child"); - assertThat(adaptedChild).isInstanceOf(IncubatorDeclarativeConfigPropertiesAdapter.class); - assertThat(adapter.getStructured("missing")).isNull(); - - List adaptedChildren = adapter.getStructuredList("children"); - assertThat(adaptedChildren).hasSize(1); - assertThat(adaptedChildren.get(0)) - .isInstanceOf(IncubatorDeclarativeConfigPropertiesAdapter.class); - assertThat(adapter.getStructuredList("missing_list")).isNull(); - - assertThat(adapter.getPropertyKeys()).containsExactly("str"); - assertThat(adapter.getComponentLoader()).isSameAs(componentLoader); - assertThat(adapter.toString()) - .isEqualTo("IncubatorDeclarativeConfigPropertiesAdapter{mockDelegate}"); + LegacyYamlDeclarativeConfigProperties properties = + new LegacyYamlDeclarativeConfigProperties(delegate); + + assertThat(properties.getString("str")).isEqualTo("hello"); + assertThat(properties.getBoolean("bool")).isTrue(); + assertThat(properties.getInt("int")).isEqualTo(42); + assertThat(properties.getLong("long")).isEqualTo(100L); + assertThat(properties.getDouble("double")).isEqualTo(3.14); + + assertThat(properties.isString("str")).isTrue(); + assertThat(properties.isBoolean("bool")).isTrue(); + assertThat(properties.isInt("int")).isTrue(); + assertThat(properties.isLong("long")).isTrue(); + assertThat(properties.isDouble("double")).isTrue(); + + assertThat(properties.getScalarList("list", String.class)).containsExactly("item"); + + io.opentelemetry.api.incubator.config.DeclarativeConfigProperties structured = + properties.getStructured("child"); + assertThat(structured).isInstanceOf(LegacyYamlDeclarativeConfigProperties.class); + assertThat(properties.getStructured("missing")).isNull(); + + List structuredList = + properties.getStructuredList("children"); + assertThat(structuredList).hasSize(1); + assertThat(structuredList.get(0)).isInstanceOf(LegacyYamlDeclarativeConfigProperties.class); + assertThat(properties.getStructuredList("missing_list")).isNull(); + + assertThat(properties.getPropertyKeys()).containsExactly("str"); + assertThat(properties.getComponentLoader()).isSameAs(componentLoader); + assertThat(properties.toString()) + .isEqualTo("LegacyYamlDeclarativeConfigProperties{mockDelegate}"); } } From 5f2c796b0a1295a9f09ae8bfc447dfd35ca0449e Mon Sep 17 00:00:00 2001 From: navneet singh Date: Tue, 3 Nov 2026 22:27:36 +0530 Subject: [PATCH 3/3] Relocate declarative config utility tests to io.opentelemetry.api.config package - Move DeclarativeConfigPropertyUtilTest and InstrumentationConfigUtilTest from io.opentelemetry.api.incubator.config to io.opentelemetry.api.config in api:incubator test source set. --- .../config/DeclarativeConfigPropertyUtilTest.java | 3 +-- .../config/InstrumentationConfigUtilTest.java | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename api/incubator/src/test/java/io/opentelemetry/api/{incubator => }/config/DeclarativeConfigPropertyUtilTest.java (95%) rename api/incubator/src/test/java/io/opentelemetry/api/{incubator => }/config/InstrumentationConfigUtilTest.java (97%) diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtilTest.java b/api/incubator/src/test/java/io/opentelemetry/api/config/DeclarativeConfigPropertyUtilTest.java similarity index 95% rename from api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtilTest.java rename to api/incubator/src/test/java/io/opentelemetry/api/config/DeclarativeConfigPropertyUtilTest.java index c452061fcc2..a4b3e9632cb 100644 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/DeclarativeConfigPropertyUtilTest.java +++ b/api/incubator/src/test/java/io/opentelemetry/api/config/DeclarativeConfigPropertyUtilTest.java @@ -3,13 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.api.incubator.config; +package io.opentelemetry.api.config; import static org.assertj.core.api.Assertions.assertThat; import com.google.common.collect.ImmutableMap; import io.github.netmikey.logunit.api.LogCapturer; -import io.opentelemetry.api.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.YamlDeclarativeConfigProperties; import java.util.Arrays; diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtilTest.java b/api/incubator/src/test/java/io/opentelemetry/api/config/InstrumentationConfigUtilTest.java similarity index 97% rename from api/incubator/src/test/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtilTest.java rename to api/incubator/src/test/java/io/opentelemetry/api/config/InstrumentationConfigUtilTest.java index 5556bfb8d4d..63fbb8dda80 100644 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtilTest.java +++ b/api/incubator/src/test/java/io/opentelemetry/api/config/InstrumentationConfigUtilTest.java @@ -3,12 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.api.incubator.config; +package io.opentelemetry.api.config; import static org.assertj.core.api.Assertions.assertThat; import com.google.common.collect.ImmutableMap; -import io.opentelemetry.api.config.DeclarativeConfigProperties; +import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.DeclarativeConfiguration; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.YamlDeclarativeConfigProperties; import io.opentelemetry.sdk.internal.SdkConfigProvider;