diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanDecorator.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanDecorator.java index 6e81166bdea..3211aeecad0 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanDecorator.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanDecorator.java @@ -128,7 +128,6 @@ public void addTagsFromMethodArgs(AgentSpan span, Method method, Object[] args) if (name != null) { span.setTag(name, args[parameterIndex]); } - break; } } } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/groovy/SpanAttributeAnnotationTest.groovy b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/groovy/SpanAttributeAnnotationTest.groovy index 48e1d32b329..65710ea2378 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/groovy/SpanAttributeAnnotationTest.groovy +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/groovy/SpanAttributeAnnotationTest.groovy @@ -40,5 +40,29 @@ class SpanAttributeAnnotationTest extends AgentTestRunner { 'list' | ['value1', 'value2', 'value3'] typeName = type.substring(0, 1).toUpperCase() + type.substring(1) } + + def "test multiple SpanAttribute"() { + setup: + def methodName = "sayHelloWithMultipleAttributes" + TracedMethods."$methodName"("param1", "param2") + + expect: + assertTraces(1) { + trace(1) { + span { + resourceName "TracedMethods.$methodName" + operationName "TracedMethods.$methodName" + parent() + errored false + tags { + defaultTags() + "$Tags.COMPONENT" "opentelemetry" + "custom-tag1" "param1" + "custom-tag2" "param2" + } + } + } + } + } } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/java/annotatedsample/TracedMethods.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/java/annotatedsample/TracedMethods.java index 819b5afb456..ff57b7051bf 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/java/annotatedsample/TracedMethods.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/java/annotatedsample/TracedMethods.java @@ -75,6 +75,12 @@ public static String sayHelloWithListAttribute(@SpanAttribute("custom-tag") List return "hello!"; } + @WithSpan + public static String sayHelloWithMultipleAttributes( + @SpanAttribute("custom-tag1") String param1, @SpanAttribute("custom-tag2") String param2) { + return "hello!"; + } + @WithSpan public static void throwException() { throw new RuntimeException("Some exception"); diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.26/src/test/groovy/AddingSpanAttributesAnnotationTest.groovy b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.26/src/test/groovy/AddingSpanAttributesAnnotationTest.groovy index f8fc32dd42f..64bf099a584 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.26/src/test/groovy/AddingSpanAttributesAnnotationTest.groovy +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.26/src/test/groovy/AddingSpanAttributesAnnotationTest.groovy @@ -43,6 +43,33 @@ class AddingSpanAttributesAnnotationTest extends AgentTestRunner { typeName = type.substring(0, 1).toUpperCase() + type.substring(1) } + def "test AddingSpanAttributes annotated method with multiple annotated parameters"() { + setup: + def methodName = "sayHelloWithMultipleAttributes" + def testSpan = TEST_TRACER.startSpan("test", "operation") + def scope = TEST_TRACER.activateManualSpan(testSpan) + AnnotatedMethods."$methodName"("param1", "param2") + scope.close() + testSpan.finish() + + expect: + assertTraces(1) { + trace(1) { + span { + resourceName "operation" + operationName "operation" + parent() + errored false + tags { + defaultTags() + "custom-tag1" "param1" + "custom-tag2" "param2" + } + } + } + } + } + def "test AddingSpanAttributes annotated method is skipped if no active span"() { setup: def testSpan = TEST_TRACER.startSpan("test", "operation") diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.26/src/test/java/annotatedsample/AnnotatedMethods.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.26/src/test/java/annotatedsample/AnnotatedMethods.java index 54f63e68ffa..a34fd2b0543 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.26/src/test/java/annotatedsample/AnnotatedMethods.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.26/src/test/java/annotatedsample/AnnotatedMethods.java @@ -24,4 +24,10 @@ public static String sayHelloWithLongAttribute(@SpanAttribute("custom-tag") long public static String sayHelloWithListAttribute(@SpanAttribute("custom-tag") List param) { return "hello!"; } + + @AddingSpanAttributes + public static String sayHelloWithMultipleAttributes( + @SpanAttribute("custom-tag1") String param1, @SpanAttribute("custom-tag2") String param2) { + return "hello!"; + } }