From ef4150ce3731d1bc0a899b712b68e0fec96feb84 Mon Sep 17 00:00:00 2001 From: Carlos Alberto Cortez Date: Mon, 14 Nov 2022 17:14:13 +0100 Subject: [PATCH] OpenTracing Shim: Handle unsupported types when setting Attributes. (#4939) * OpenTracing Shim: Handle unsupported types when setting Attributes. This happens through: * SpanBuilder.withTag() * Span.setTag() * Simplify BigInteger conversion assertions. --- .../opentracingshim/SpanBuilderShim.java | 5 +++-- .../opentelemetry/opentracingshim/SpanShim.java | 4 ++-- .../opentracingshim/SpanBuilderShimTest.java | 15 +++++++++++++++ .../opentracingshim/SpanShimTest.java | 11 +++++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java index 9c3f8db4946..ac3c1f62c17 100644 --- a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java @@ -164,7 +164,7 @@ public SpanBuilder withTag(String key, Number value) { if (value == null) { return this; } - // TODO - Verify only the 'basic' types are supported/used. + if (value instanceof Integer || value instanceof Long || value instanceof Short @@ -175,7 +175,8 @@ public SpanBuilder withTag(String key, Number value) { this.spanBuilderAttributeKeys.add(doubleKey(key)); this.spanBuilderAttributeValues.add(value.doubleValue()); } else { - throw new IllegalArgumentException("Number type not supported"); + this.spanBuilderAttributeKeys.add(stringKey(key)); + this.spanBuilderAttributeValues.add(value.toString()); } return this; diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanShim.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanShim.java index 03449a979b4..10adf19adf5 100644 --- a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanShim.java +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanShim.java @@ -112,7 +112,7 @@ public Span setTag(String key, Number value) { if (value == null) { return this; } - // TODO - Verify only the 'basic' types are supported/used. + if (value instanceof Integer || value instanceof Long || value instanceof Short @@ -121,7 +121,7 @@ public Span setTag(String key, Number value) { } else if (value instanceof Float || value instanceof Double) { span.setAttribute(key, value.doubleValue()); } else { - throw new IllegalArgumentException("Number type not supported"); + span.setAttribute(key, value.toString()); } return this; diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java index 05a412478c3..16ff9cfeb99 100644 --- a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java @@ -22,6 +22,7 @@ import io.opentelemetry.sdk.trace.samplers.SamplingResult; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import io.opentracing.References; +import java.math.BigInteger; import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -296,6 +297,20 @@ void withStartTimestamp() { assertThat(spanData.getStartEpochNanos()).isEqualTo(micros * 1000L); } + @Test + void setAttribute_unrecognizedType() { + SpanShim span = + (SpanShim) + new SpanBuilderShim(telemetryInfo, SPAN_NAME).withTag("foo", BigInteger.TEN).start(); + try { + SpanData spanData = ((ReadableSpan) span.getSpan()).toSpanData(); + assertThat(spanData.getAttributes().size()).isEqualTo(1); + assertThat(spanData.getAttributes().get(AttributeKey.stringKey("foo"))).isEqualTo("10"); + } finally { + span.finish(); + } + } + @Test void setAttributes_beforeSpanStart() { SdkTracerProvider tracerSdkFactory = diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanShimTest.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanShimTest.java index 3ecf7418d97..1d304e04c32 100644 --- a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanShimTest.java +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanShimTest.java @@ -17,6 +17,7 @@ import io.opentelemetry.sdk.trace.data.SpanData; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import io.opentracing.log.Fields; +import java.math.BigInteger; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; @@ -59,6 +60,16 @@ void context_simple() { assertThat(contextShim.baggageItems().iterator().hasNext()).isFalse(); } + @Test + void setAttribute_unrecognizedType() { + SpanShim spanShim = new SpanShim(telemetryInfo, span); + spanShim.setTag("foo", BigInteger.ONE); + + SpanData spanData = ((ReadableSpan) span).toSpanData(); + assertThat(spanData.getAttributes().size()).isEqualTo(1); + assertThat(spanData.getAttributes().get(AttributeKey.stringKey("foo"))).isEqualTo("1"); + } + @Test void baggage() { SpanShim spanShim = new SpanShim(telemetryInfo, span);