diff --git a/sdk-extensions/incubator/build.gradle.kts b/sdk-extensions/incubator/build.gradle.kts index 35a58968fa8..7a07f3c8fa6 100644 --- a/sdk-extensions/incubator/build.gradle.kts +++ b/sdk-extensions/incubator/build.gradle.kts @@ -55,7 +55,7 @@ dependencies { // ... proceed with normal sourcesJar, compileJava, etc // TODO(jack-berg): update ref to be released version when available -val configurationRef = "0eb96de17c6533f668163873d95bd026bce1d8fb" +val configurationRef = "0508846f82ed54b230fa638e1e7556c52efee25e" val configurationRepoZip = "https://github.com/open-telemetry/opentelemetry-configuration/archive/$configurationRef.zip" val buildDirectory = layout.buildDirectory.asFile.get() diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/ConfigurationReader.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/ConfigurationReader.java index 04aaaa894ef..4fe765ee344 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/ConfigurationReader.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/ConfigurationReader.java @@ -5,6 +5,8 @@ package io.opentelemetry.sdk.extension.incubator.fileconfig; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.ObjectMapper; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfiguration; import java.io.InputStream; @@ -13,7 +15,10 @@ final class ConfigurationReader { - private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final ObjectMapper MAPPER = + new ObjectMapper() + // Create empty object instances for keys which are present but have null values + .setDefaultSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)); private ConfigurationReader() {} diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/AggregationFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/AggregationFactoryTest.java index 3b37e2077ad..62c5e457606 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/AggregationFactoryTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/AggregationFactoryTest.java @@ -11,7 +11,10 @@ import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Aggregation; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Base2ExponentialBucketHistogram; +import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Drop; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExplicitBucketHistogram; +import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LastValue; +import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Sum; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -45,13 +48,12 @@ private static Stream createTestCases() { Arguments.of( new Aggregation(), io.opentelemetry.sdk.metrics.Aggregation.defaultAggregation()), Arguments.of( - new Aggregation().withDrop(new Object()), + new Aggregation().withDrop(new Drop()), io.opentelemetry.sdk.metrics.Aggregation.drop()), Arguments.of( - new Aggregation().withSum(new Object()), - io.opentelemetry.sdk.metrics.Aggregation.sum()), + new Aggregation().withSum(new Sum()), io.opentelemetry.sdk.metrics.Aggregation.sum()), Arguments.of( - new Aggregation().withLastValue(new Object()), + new Aggregation().withLastValue(new LastValue()), io.opentelemetry.sdk.metrics.Aggregation.lastValue()), Arguments.of( new Aggregation() diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/ConfigurationReaderTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/ConfigurationReaderTest.java index 9df4b15d25f..27d6e14cc0a 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/ConfigurationReaderTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/ConfigurationReaderTest.java @@ -44,8 +44,10 @@ import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProvider; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.View; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Zipkin; +import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -276,4 +278,60 @@ void read_KitchenSinkExampleFile() throws IOException { assertThat(config).isEqualTo(expected); } } + + @Test + void nullValuesParsedToEmptyObjects() { + String objectPlaceholderString = + "file_format: \"0.1\"\n" + + "tracer_provider:\n" + + " processors:\n" + + " - batch:\n" + + " exporter:\n" + + " console: {}\n" + + "meter_provider:\n" + + " views:\n" + + " - selector:\n" + + " instrument_type: histogram\n" + + " stream:\n" + + " aggregation:\n" + + " drop: {}\n"; + OpenTelemetryConfiguration objectPlaceholderModel = + ConfigurationReader.parse( + new ByteArrayInputStream(objectPlaceholderString.getBytes(StandardCharsets.UTF_8))); + + String noOjbectPlaceholderString = + "file_format: \"0.1\"\n" + + "tracer_provider:\n" + + " processors:\n" + + " - batch:\n" + + " exporter:\n" + + " console:\n" + + "meter_provider:\n" + + " views:\n" + + " - selector:\n" + + " instrument_type: histogram\n" + + " stream:\n" + + " aggregation:\n" + + " drop:\n"; + OpenTelemetryConfiguration noObjectPlaceholderModel = + ConfigurationReader.parse( + new ByteArrayInputStream(noOjbectPlaceholderString.getBytes(StandardCharsets.UTF_8))); + + SpanExporter exporter = + noObjectPlaceholderModel + .getTracerProvider() + .getProcessors() + .get(0) + .getBatch() + .getExporter(); + assertThat(exporter.getConsole()).isNotNull(); + assertThat(exporter.getOtlp()).isNull(); + + Aggregation aggregation = + noObjectPlaceholderModel.getMeterProvider().getViews().get(0).getStream().getAggregation(); + assertThat(aggregation.getDrop()).isNotNull(); + assertThat(aggregation.getSum()).isNull(); + + assertThat(objectPlaceholderModel).isEqualTo(noObjectPlaceholderModel); + } }