diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java index 649df9abb98..7506018662c 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java @@ -16,12 +16,16 @@ import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.resources.Resource; import java.util.Objects; +import java.util.logging.Logger; import java.util.regex.Pattern; final class OpenTelemetryConfigurationFactory implements Factory { + private static final Logger logger = + Logger.getLogger(OpenTelemetryConfigurationFactory.class.getName()); private static final Pattern SUPPORTED_FILE_FORMATS = Pattern.compile("^(0.4)|(1.0(-rc.\\d*)?)$"); + private static final String EXPECTED_FILE_FORMAT = "1.0-rc.3"; private static final OpenTelemetryConfigurationFactory INSTANCE = new OpenTelemetryConfigurationFactory(); @@ -47,8 +51,14 @@ public ExtendedOpenTelemetrySdk create( throw new DeclarativeConfigException( "Unsupported file format '" + fileFormat + "'. Supported formats include 0.4, 1.0*"); } - // TODO(jack-berg): log warning if version is not exact match, which may result in unexpected - // behavior for experimental properties. + if (!EXPECTED_FILE_FORMAT.equals(fileFormat)) { + logger.warning( + "Configuration file_format '" + + fileFormat + + "' does not exactly match expected version '" + + EXPECTED_FILE_FORMAT + + "'. This may result in unexpected behavior for experimental properties."); + } if (Objects.equals(true, model.getDisabled())) { return (ExtendedOpenTelemetrySdk) builder.build(); diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java index 08b965187c9..6366ff9cf14 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java @@ -10,6 +10,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; +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.trace.propagation.W3CTraceContextPropagator; @@ -72,11 +73,17 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.slf4j.event.Level; class OpenTelemetryConfigurationFactoryTest { @RegisterExtension CleanupExtension cleanup = new CleanupExtension(); + @RegisterExtension + LogCapturer logCapturer = + LogCapturer.create() + .captureForLogger(OpenTelemetryConfigurationFactory.class.getName(), Level.WARN); + private final DeclarativeConfigContext context = new DeclarativeConfigContext( SpiHelper.create(OpenTelemetryConfigurationFactoryTest.class.getClassLoader())); @@ -110,6 +117,7 @@ private static Stream fileFormatArgs() { Arguments.of("1.0-rc.a", false), Arguments.of("1.0.0", false), Arguments.of("1.0.3", false), + Arguments.of("1.0.0-rc.3", false), // Valid file formats Arguments.of("0.4", true), Arguments.of("1.0-rc.1", true), @@ -118,6 +126,31 @@ private static Stream fileFormatArgs() { Arguments.of("1.0", true)); } + @Test + void create_FileFormatVersionMismatch_LogsWarning() { + OpenTelemetryConfigurationModel model = + new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.2"); + + ExtendedOpenTelemetrySdk sdk = + OpenTelemetryConfigurationFactory.getInstance().create(model, context); + cleanup.addCloseable(sdk); + + logCapturer.assertContains( + "Configuration file_format '1.0-rc.2' does not exactly match expected version '1.0-rc.3'"); + } + + @Test + void create_FileFormatExactMatch_NoWarning() { + OpenTelemetryConfigurationModel model = + new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.3"); + + ExtendedOpenTelemetrySdk sdk = + OpenTelemetryConfigurationFactory.getInstance().create(model, context); + cleanup.addCloseable(sdk); + + assertThat(logCapturer.size()).isEqualTo(0); + } + @Test void create_Defaults() { List closeables = new ArrayList<>();