From 59013f673e469f393e40750dbd7934ef1b58bb0f Mon Sep 17 00:00:00 2001 From: Jason Plumb Date: Tue, 16 Sep 2025 14:54:07 -0700 Subject: [PATCH 1/4] work in progress --- .../serialization/mapping/common/AttributesMapperTest.java | 1 + .../contrib/disk/buffering/testutils/TestData.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapperTest.java b/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapperTest.java index ceb758642..a5db9382f 100644 --- a/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapperTest.java +++ b/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapperTest.java @@ -21,6 +21,7 @@ void verifyMapping() { Attributes attributes = Attributes.builder() .put(AttributeKey.stringKey("someString"), "someValue") + .put(AttributeKey.stringKey("emptyString"), "") .put(AttributeKey.booleanKey("someBool"), true) .put(AttributeKey.longKey("someLong"), 10L) .put(AttributeKey.doubleKey("someDouble"), 10.0) diff --git a/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/testutils/TestData.java b/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/testutils/TestData.java index ec69e8024..0da28971c 100644 --- a/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/testutils/TestData.java +++ b/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/testutils/TestData.java @@ -37,6 +37,8 @@ public final class TestData { .put("conditions", false, true) .put("scores", 0L, 1L) .put("coins", 0.01, 0.05, 0.1) + .put("empty", "") + .put("blank", " ") .build(); public static final Resource RESOURCE_FULL = From 3b654d36143ba7d60c3a093766594fbb9c368c88 Mon Sep 17 00:00:00 2001 From: Jason Plumb Date: Tue, 16 Sep 2025 15:48:38 -0700 Subject: [PATCH 2/4] default to empty string for unknown value types. --- .../serialization/mapping/common/AttributesMapper.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java index e017cb878..1a5023ac1 100644 --- a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java +++ b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java @@ -84,8 +84,13 @@ private static void addValue(AttributesBuilder builder, String key, AnyValue val builder.put(AttributeKey.doubleKey(key), value.double_value); } else if (value.array_value != null) { addArray(builder, key, value.array_value); - } else { - throw new UnsupportedOperationException(); + } + else { + // Until we have complex attribute types that could potentially yield + // empty objects, we MUST assume here that the writer put an empty string + // into the value of the attribute. This will need to change later, when complex + // types arrive and the spec issue is resolved. + builder.put(AttributeKey.stringKey(key), ""); } } From a64a493e8cc7b6d77368ced0788dc5cb08a6d2d8 Mon Sep 17 00:00:00 2001 From: Jason Plumb Date: Tue, 16 Sep 2025 15:50:26 -0700 Subject: [PATCH 3/4] add link to spec issue --- .../internal/serialization/mapping/common/AttributesMapper.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java index 1a5023ac1..85af9a322 100644 --- a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java +++ b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java @@ -90,6 +90,8 @@ private static void addValue(AttributesBuilder builder, String key, AnyValue val // empty objects, we MUST assume here that the writer put an empty string // into the value of the attribute. This will need to change later, when complex // types arrive and the spec issue is resolved. + // + // See spec issue: https://github.com/open-telemetry/opentelemetry-specification/issues/4660 builder.put(AttributeKey.stringKey(key), ""); } } From d4132d9393c2f84d6533430075450b3799f1bf68 Mon Sep 17 00:00:00 2001 From: otelbot <197425009+otelbot@users.noreply.github.com> Date: Tue, 16 Sep 2025 22:52:07 +0000 Subject: [PATCH 4/4] ./gradlew spotlessApply --- .../serialization/mapping/common/AttributesMapper.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java index 85af9a322..631751349 100644 --- a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java +++ b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java @@ -84,8 +84,7 @@ private static void addValue(AttributesBuilder builder, String key, AnyValue val builder.put(AttributeKey.doubleKey(key), value.double_value); } else if (value.array_value != null) { addArray(builder, key, value.array_value); - } - else { + } else { // Until we have complex attribute types that could potentially yield // empty objects, we MUST assume here that the writer put an empty string // into the value of the attribute. This will need to change later, when complex