From 5cb7985429929175beee75bf36cc351dc5bbc043 Mon Sep 17 00:00:00 2001 From: Mike Goldsmith Date: Wed, 11 Feb 2026 13:42:56 +0000 Subject: [PATCH 1/4] fix(config): Add version mismatch warning for declarative config Logs warning when file_format doesn't exactly match expected version (1.0.0-rc.3). - Add EXPECTED_FILE_FORMAT constant - Update regex to support 1.0.0-rc.N format - Add tests for warning behavior --- .../OpenTelemetryConfigurationFactory.java | 16 +++++++-- ...OpenTelemetryConfigurationFactoryTest.java | 34 +++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) 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..fff03cbd61e 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 Pattern SUPPORTED_FILE_FORMATS = Pattern.compile("^(0.4)|(1.0(-rc.\\d*)?)$"); + 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*)?)|(1.0.0-rc.\\d*)$"); + private static final String EXPECTED_FILE_FORMAT = "1.0.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..31e3f3ff1c7 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())); @@ -115,9 +122,36 @@ private static Stream fileFormatArgs() { Arguments.of("1.0-rc.1", true), Arguments.of("1.0-rc.2", true), Arguments.of("1.0-rc.3", true), + Arguments.of("1.0.0-rc.3", true), 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.0-rc.3'"); + } + + @Test + void create_FileFormatExactMatch_NoWarning() { + OpenTelemetryConfigurationModel model = + new OpenTelemetryConfigurationModel().withFileFormat("1.0.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<>(); From 2dcd4a03e87a8f52b04e175c04af49abc6660edd Mon Sep 17 00:00:00 2001 From: Mike Goldsmith Date: Wed, 11 Feb 2026 14:11:21 +0000 Subject: [PATCH 2/4] Fix spotless formatting violations --- .../fileconfig/OpenTelemetryConfigurationFactory.java | 3 ++- .../fileconfig/OpenTelemetryConfigurationFactoryTest.java | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) 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 fff03cbd61e..171db142905 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 @@ -24,7 +24,8 @@ final class OpenTelemetryConfigurationFactory 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*)?)|(1.0.0-rc.\\d*)$"); + private static final Pattern SUPPORTED_FILE_FORMATS = + Pattern.compile("^(0.4)|(1.0(-rc.\\d*)?)|(1.0.0-rc.\\d*)$"); private static final String EXPECTED_FILE_FORMAT = "1.0.0-rc.3"; private static final OpenTelemetryConfigurationFactory INSTANCE = 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 31e3f3ff1c7..43860ba2a27 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 @@ -135,9 +135,8 @@ void create_FileFormatVersionMismatch_LogsWarning() { 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.0-rc.3'"); + logCapturer.assertContains( + "Configuration file_format '1.0-rc.2' does not exactly match expected version '1.0.0-rc.3'"); } @Test From 22894674bdf01f2c4da5844ce188cea134d3d5e4 Mon Sep 17 00:00:00 2001 From: Mike Goldsmith Date: Thu, 12 Feb 2026 12:09:31 +0000 Subject: [PATCH 3/4] Remove patch version from file_format per schema spec. Patch versions = bug fixes only, no user action needed. --- .../fileconfig/OpenTelemetryConfigurationFactory.java | 4 ++-- .../fileconfig/OpenTelemetryConfigurationFactoryTest.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) 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 171db142905..cf166c7ddad 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 @@ -25,8 +25,8 @@ final class OpenTelemetryConfigurationFactory 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*)?)|(1.0.0-rc.\\d*)$"); - private static final String EXPECTED_FILE_FORMAT = "1.0.0-rc.3"; + 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(); 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 43860ba2a27..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 @@ -117,12 +117,12 @@ 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), Arguments.of("1.0-rc.2", true), Arguments.of("1.0-rc.3", true), - Arguments.of("1.0.0-rc.3", true), Arguments.of("1.0", true)); } @@ -136,13 +136,13 @@ void create_FileFormatVersionMismatch_LogsWarning() { cleanup.addCloseable(sdk); logCapturer.assertContains( - "Configuration file_format '1.0-rc.2' does not exactly match expected version '1.0.0-rc.3'"); + "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.0-rc.3"); + new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.3"); ExtendedOpenTelemetrySdk sdk = OpenTelemetryConfigurationFactory.getInstance().create(model, context); From 73849ec3bd0c143ce8cc9e66c005277a7e37017d Mon Sep 17 00:00:00 2001 From: Mike Goldsmith Date: Thu, 12 Feb 2026 14:04:08 +0000 Subject: [PATCH 4/4] Fix spotless formatting --- .../fileconfig/OpenTelemetryConfigurationFactory.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 cf166c7ddad..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 @@ -24,8 +24,7 @@ final class OpenTelemetryConfigurationFactory 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 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 =