Skip to content

Commit f2b7633

Browse files
committed
Make snakeyaml-engine and jackson-databind optional at runtime
Split DeclarativeConfiguration into two classes: - DeclarativeConfiguration: create(model) only, no YAML/jackson-databind deps - DeclarativeConfigurationParser: all parsing (MAPPER static block, parse, loadYaml, parseAndCreate, toConfigProperties, createSampler, env-var substitution, snakeyaml inner classes) Change snakeyaml-engine and jackson-databind from implementation to compileOnly in build.gradle.kts (keeping jackson-annotations as api since the generated model POJOs use @JsonProperty etc. as public API). Remove the unused jackson-dataformat-yaml dependency. Users who only call DeclarativeConfiguration.create(model) for programmatic SDK configuration no longer incur transitive YAML/jackson-databind deps. Users who need YAML parsing add snakeyaml-engine and jackson-databind and call DeclarativeConfigurationParser.parseAndCreate(stream). This also opens the door for merging declarative config into autoconfigure, since the static initializer that caused NoClassDefFoundError when jackson-databind was absent is now isolated in DeclarativeConfigurationParser. Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
1 parent 1e0ddc6 commit f2b7633

16 files changed

Lines changed: 464 additions & 418 deletions

File tree

api/incubator/src/test/java/io/opentelemetry/api/incubator/ExtendedOpenTelemetryTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import io.opentelemetry.api.trace.TracerProvider;
2626
import io.opentelemetry.context.propagation.ContextPropagators;
2727
import io.opentelemetry.sdk.OpenTelemetrySdk;
28-
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
28+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationParser;
2929
import io.opentelemetry.sdk.internal.ExtendedOpenTelemetrySdk;
3030
import io.opentelemetry.sdk.internal.SdkConfigProvider;
3131
import java.io.ByteArrayInputStream;
@@ -94,7 +94,7 @@ void instrumentationConfig() {
9494

9595
SdkConfigProvider configProvider =
9696
SdkConfigProvider.create(
97-
DeclarativeConfiguration.toConfigProperties(
97+
DeclarativeConfigurationParser.toConfigProperties(
9898
new ByteArrayInputStream(configYaml.getBytes(StandardCharsets.UTF_8))));
9999
ExtendedOpenTelemetry openTelemetry =
100100
ExtendedOpenTelemetrySdk.create(OpenTelemetrySdk.builder().build(), configProvider);

api/incubator/src/test/java/io/opentelemetry/api/incubator/config/InstrumentationConfigUtilTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import static org.assertj.core.api.Assertions.assertThat;
99

1010
import com.google.common.collect.ImmutableMap;
11-
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationParser;
1212
import io.opentelemetry.sdk.extension.incubator.fileconfig.YamlDeclarativeConfigProperties;
1313
import io.opentelemetry.sdk.internal.SdkConfigProvider;
1414
import java.io.ByteArrayInputStream;
@@ -61,7 +61,7 @@ class InstrumentationConfigUtilTest {
6161

6262
private static ConfigProvider toConfigProvider(String configYaml) {
6363
return SdkConfigProvider.create(
64-
DeclarativeConfiguration.toConfigProperties(
64+
DeclarativeConfigurationParser.toConfigProperties(
6565
new ByteArrayInputStream(configYaml.getBytes(StandardCharsets.UTF_8))));
6666
}
6767

api/incubator/src/testConvertToModel/java/io/opentelemetry/api/incubator/InstrumentationConfigUtilTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import io.opentelemetry.api.incubator.config.ConfigProvider;
1515
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1616
import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil;
17-
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
17+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationParser;
1818
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalInstrumentationModel;
1919
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel;
2020
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationPropertyModel;
@@ -54,7 +54,7 @@ void toMap_RoundTrip() throws JsonProcessingException {
5454

5555
String mapJson = MAPPER.writeValueAsString(map);
5656
DeclarativeConfigProperties properties =
57-
DeclarativeConfiguration.toConfigProperties(
57+
DeclarativeConfigurationParser.toConfigProperties(
5858
new ByteArrayInputStream(mapJson.getBytes(StandardCharsets.UTF_8)));
5959

6060
assertThat(DeclarativeConfigProperties.toMap(properties)).isEqualTo(map);
@@ -131,7 +131,7 @@ private static ConfigProvider withInstrumentationConfig(
131131
new ExperimentalLanguageSpecificInstrumentationModel();
132132
javaConfig.setAdditionalProperty(instrumentationName, instrumentationConfig);
133133
DeclarativeConfigProperties modelProperties =
134-
DeclarativeConfiguration.toConfigProperties(
134+
DeclarativeConfigurationParser.toConfigProperties(
135135
new OpenTelemetryConfigurationModel()
136136
.withInstrumentationDevelopment(
137137
new ExperimentalInstrumentationModel().withJava(javaConfig)));

integration-tests/graal-incubating/src/test/java/io/opentelemetry/integrationtests/graal/IncubatingApiTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import io.opentelemetry.api.metrics.Meter;
2424
import io.opentelemetry.api.metrics.MeterProvider;
2525
import io.opentelemetry.api.trace.TracerProvider;
26-
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
26+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationParser;
2727
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
2828
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
2929
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
@@ -124,7 +124,7 @@ void parseDeclarativeConfiguration() {
124124
drop: {}
125125
""";
126126
// should not throw
127-
DeclarativeConfiguration.parse(
127+
DeclarativeConfigurationParser.parse(
128128
new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8)));
129129
}
130130
}

sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/IncubatingUtil.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
1313
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigResult;
1414
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
15+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationParser;
1516
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationProvider;
1617
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
1718
import java.io.FileInputStream;
@@ -35,7 +36,7 @@ static AutoConfiguredOpenTelemetrySdk configureFromFile(
3536
Logger logger, String configurationFile, ComponentLoader componentLoader) {
3637
logger.fine("Autoconfiguring from configuration file: " + configurationFile);
3738
try (FileInputStream fis = new FileInputStream(configurationFile)) {
38-
OpenTelemetryConfigurationModel model = DeclarativeConfiguration.parse(fis);
39+
OpenTelemetryConfigurationModel model = DeclarativeConfigurationParser.parse(fis);
3940
return create(model, componentLoader);
4041
} catch (DeclarativeConfigException e) {
4142
throw toConfigurationException(e);

sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestDeclarativeConfigurationProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
package io.opentelemetry.sdk.autoconfigure;
77

8-
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
8+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationParser;
99
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationProvider;
1010
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
1111
import java.io.ByteArrayInputStream;
@@ -29,7 +29,7 @@ public OpenTelemetryConfigurationModel getConfigurationModel() {
2929
+ " exporter:\n"
3030
+ " console: {}\n";
3131

32-
return DeclarativeConfiguration.parse(
32+
return DeclarativeConfigurationParser.parse(
3333
new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8)));
3434
}
3535
}

sdk-extensions/incubator/build.gradle.kts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ dependencies {
2323

2424
// io.opentelemetry.sdk.extension.incubator.metric.viewconfig
2525
implementation(project(":sdk-extensions:autoconfigure-spi"))
26-
implementation("org.snakeyaml:snakeyaml-engine")
26+
compileOnly("org.snakeyaml:snakeyaml-engine")
2727

2828
// io.opentelemetry.sdk.extension.incubator.fileconfig
2929
api(project(":api:incubator"))
30-
implementation("com.fasterxml.jackson.core:jackson-databind")
30+
compileOnly("com.fasterxml.jackson.core:jackson-databind")
3131
api("com.fasterxml.jackson.core:jackson-annotations")
32-
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml")
32+
33+
testImplementation("org.snakeyaml:snakeyaml-engine")
34+
testImplementation("com.fasterxml.jackson.core:jackson-databind")
3335

3436
testImplementation(project(":sdk:testing"))
3537
testImplementation(project(":sdk-extensions:autoconfigure"))

0 commit comments

Comments
 (0)