Skip to content

Commit 7ce6c5c

Browse files
fix(config): Add version mismatch warning for declarative config (#8069)
1 parent 0a1a2ce commit 7ce6c5c

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,16 @@
1616
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
1717
import io.opentelemetry.sdk.resources.Resource;
1818
import java.util.Objects;
19+
import java.util.logging.Logger;
1920
import java.util.regex.Pattern;
2021

2122
final class OpenTelemetryConfigurationFactory
2223
implements Factory<OpenTelemetryConfigurationModel, ExtendedOpenTelemetrySdk> {
2324

25+
private static final Logger logger =
26+
Logger.getLogger(OpenTelemetryConfigurationFactory.class.getName());
2427
private static final Pattern SUPPORTED_FILE_FORMATS = Pattern.compile("^(0.4)|(1.0(-rc.\\d*)?)$");
28+
private static final String EXPECTED_FILE_FORMAT = "1.0-rc.3";
2529

2630
private static final OpenTelemetryConfigurationFactory INSTANCE =
2731
new OpenTelemetryConfigurationFactory();
@@ -47,8 +51,14 @@ public ExtendedOpenTelemetrySdk create(
4751
throw new DeclarativeConfigException(
4852
"Unsupported file format '" + fileFormat + "'. Supported formats include 0.4, 1.0*");
4953
}
50-
// TODO(jack-berg): log warning if version is not exact match, which may result in unexpected
51-
// behavior for experimental properties.
54+
if (!EXPECTED_FILE_FORMAT.equals(fileFormat)) {
55+
logger.warning(
56+
"Configuration file_format '"
57+
+ fileFormat
58+
+ "' does not exactly match expected version '"
59+
+ EXPECTED_FILE_FORMAT
60+
+ "'. This may result in unexpected behavior for experimental properties.");
61+
}
5262

5363
if (Objects.equals(true, model.getDisabled())) {
5464
return (ExtendedOpenTelemetrySdk) builder.build();

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import static org.assertj.core.api.Assertions.assertThatCode;
1111
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1212

13+
import io.github.netmikey.logunit.api.LogCapturer;
1314
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
1415
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
1516
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
@@ -72,11 +73,17 @@
7273
import org.junit.jupiter.params.ParameterizedTest;
7374
import org.junit.jupiter.params.provider.Arguments;
7475
import org.junit.jupiter.params.provider.MethodSource;
76+
import org.slf4j.event.Level;
7577

7678
class OpenTelemetryConfigurationFactoryTest {
7779

7880
@RegisterExtension CleanupExtension cleanup = new CleanupExtension();
7981

82+
@RegisterExtension
83+
LogCapturer logCapturer =
84+
LogCapturer.create()
85+
.captureForLogger(OpenTelemetryConfigurationFactory.class.getName(), Level.WARN);
86+
8087
private final DeclarativeConfigContext context =
8188
new DeclarativeConfigContext(
8289
SpiHelper.create(OpenTelemetryConfigurationFactoryTest.class.getClassLoader()));
@@ -110,6 +117,7 @@ private static Stream<Arguments> fileFormatArgs() {
110117
Arguments.of("1.0-rc.a", false),
111118
Arguments.of("1.0.0", false),
112119
Arguments.of("1.0.3", false),
120+
Arguments.of("1.0.0-rc.3", false),
113121
// Valid file formats
114122
Arguments.of("0.4", true),
115123
Arguments.of("1.0-rc.1", true),
@@ -118,6 +126,31 @@ private static Stream<Arguments> fileFormatArgs() {
118126
Arguments.of("1.0", true));
119127
}
120128

129+
@Test
130+
void create_FileFormatVersionMismatch_LogsWarning() {
131+
OpenTelemetryConfigurationModel model =
132+
new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.2");
133+
134+
ExtendedOpenTelemetrySdk sdk =
135+
OpenTelemetryConfigurationFactory.getInstance().create(model, context);
136+
cleanup.addCloseable(sdk);
137+
138+
logCapturer.assertContains(
139+
"Configuration file_format '1.0-rc.2' does not exactly match expected version '1.0-rc.3'");
140+
}
141+
142+
@Test
143+
void create_FileFormatExactMatch_NoWarning() {
144+
OpenTelemetryConfigurationModel model =
145+
new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.3");
146+
147+
ExtendedOpenTelemetrySdk sdk =
148+
OpenTelemetryConfigurationFactory.getInstance().create(model, context);
149+
cleanup.addCloseable(sdk);
150+
151+
assertThat(logCapturer.size()).isEqualTo(0);
152+
}
153+
121154
@Test
122155
void create_Defaults() {
123156
List<Closeable> closeables = new ArrayList<>();

0 commit comments

Comments
 (0)