From b2d481e19f08b6c8f072ff60c4011732fb82c54d Mon Sep 17 00:00:00 2001 From: DJ Gregor Date: Thu, 3 Jul 2025 14:00:48 -0700 Subject: [PATCH 1/4] Add ErrorPriorities for manual instrumentation and tag interceptor (cherry picked from commit c26ef68db7a590e69cd0b2938ee38500a7333325) --- .../datadog/trace/instrumentation/opentracing31/OTSpan.java | 3 ++- .../datadog/trace/instrumentation/opentracing32/OTSpan.java | 3 ++- .../java/datadog/trace/core/taginterceptor/TagInterceptor.java | 2 +- dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java | 3 ++- .../trace/bootstrap/instrumentation/api/ErrorPriorities.java | 2 ++ 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java b/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java index a00893ffd73..1e4b296ff9f 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java +++ b/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java @@ -2,6 +2,7 @@ import datadog.trace.api.interceptor.MutableSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan; @@ -73,7 +74,7 @@ public boolean isError() { @Override public OTSpan setError(final boolean value) { - delegate.setError(value); + delegate.setError(value, ErrorPriorities.MANUAL_INSTRUMENTATION); return this; } diff --git a/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java b/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java index a6f3d15e049..541ec92a28b 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java +++ b/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java @@ -2,6 +2,7 @@ import datadog.trace.api.interceptor.MutableSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan; @@ -74,7 +75,7 @@ public boolean isError() { @Override public OTSpan setError(final boolean value) { - delegate.setError(value); + delegate.setError(value, ErrorPriorities.MANUAL_INSTRUMENTATION); return this; } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/taginterceptor/TagInterceptor.java b/dd-trace-core/src/main/java/datadog/trace/core/taginterceptor/TagInterceptor.java index 3da653c5398..90c4b1e69ef 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/taginterceptor/TagInterceptor.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/taginterceptor/TagInterceptor.java @@ -262,7 +262,7 @@ private boolean interceptDbStatement(DDSpanContext span, Object value) { } private boolean interceptError(DDSpanContext span, Object value) { - span.setErrorFlag(asBoolean(value), ErrorPriorities.DEFAULT); + span.setErrorFlag(asBoolean(value), ErrorPriorities.TAG_INTERCEPTOR); return true; } diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java b/dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java index ddafafb877c..6fadce63f59 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java @@ -2,6 +2,7 @@ import datadog.trace.api.interceptor.MutableSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan; @@ -73,7 +74,7 @@ public boolean isError() { @Override public OTSpan setError(final boolean value) { - delegate.setError(value); + delegate.setError(value, ErrorPriorities.MANUAL_INSTRUMENTATION); return this; } diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ErrorPriorities.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ErrorPriorities.java index 3e48582a1c5..24e7857436f 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ErrorPriorities.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ErrorPriorities.java @@ -5,4 +5,6 @@ public class ErrorPriorities { public static final byte HTTP_SERVER_DECORATOR = -1; public static final byte DEFAULT = 0; + public static final byte TAG_INTERCEPTOR = 1; + public static final byte MANUAL_INSTRUMENTATION = 2; } From fb4964bb198224ca729d28b44dbb7b6829a02675 Mon Sep 17 00:00:00 2001 From: DJ Gregor Date: Thu, 3 Jul 2025 14:05:59 -0700 Subject: [PATCH 2/4] Set resource name and error priority to manual instrumentation for otel spans (cherry picked from commit f573ade9792d7b545ad510ff02ef89ba3cad4dbd) --- .../java/datadog/opentelemetry/shim/trace/OtelSpan.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java index 01b8dca7115..cbef49e3463 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java @@ -15,6 +15,8 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AttachableWrapper; +import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities; +import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; @@ -105,11 +107,11 @@ public Span setStatus(StatusCode statusCode, String description) { if (this.recording) { if (this.statusCode == UNSET) { this.statusCode = statusCode; - this.delegate.setError(statusCode == ERROR); + this.delegate.setError(statusCode == ERROR, ErrorPriorities.MANUAL_INSTRUMENTATION); this.delegate.setErrorMessage(statusCode == ERROR ? description : null); } else if (this.statusCode == ERROR && statusCode == OK) { this.statusCode = statusCode; - this.delegate.setError(false); + this.delegate.setError(false, ErrorPriorities.MANUAL_INSTRUMENTATION); this.delegate.setErrorMessage(null); } } @@ -132,7 +134,7 @@ public Span recordException(Throwable exception, Attributes additionalAttributes @Override public Span updateName(String name) { if (this.recording) { - this.delegate.setResourceName(name); + this.delegate.setResourceName(name, ResourceNamePriorities.MANUAL_INSTRUMENTATION); } return this; } From 48ec2a833c0d4cc8cba302f2cee5b99502928215 Mon Sep 17 00:00:00 2001 From: cecile75 <32452337+cecile75@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:04:12 +0200 Subject: [PATCH 3/4] remove tag interceptor error priority --- .../java/datadog/trace/core/taginterceptor/TagInterceptor.java | 2 +- .../trace/bootstrap/instrumentation/api/ErrorPriorities.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/dd-trace-core/src/main/java/datadog/trace/core/taginterceptor/TagInterceptor.java b/dd-trace-core/src/main/java/datadog/trace/core/taginterceptor/TagInterceptor.java index 90c4b1e69ef..3da653c5398 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/taginterceptor/TagInterceptor.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/taginterceptor/TagInterceptor.java @@ -262,7 +262,7 @@ private boolean interceptDbStatement(DDSpanContext span, Object value) { } private boolean interceptError(DDSpanContext span, Object value) { - span.setErrorFlag(asBoolean(value), ErrorPriorities.TAG_INTERCEPTOR); + span.setErrorFlag(asBoolean(value), ErrorPriorities.DEFAULT); return true; } diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ErrorPriorities.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ErrorPriorities.java index 24e7857436f..d1a5525efdf 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ErrorPriorities.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ErrorPriorities.java @@ -5,6 +5,5 @@ public class ErrorPriorities { public static final byte HTTP_SERVER_DECORATOR = -1; public static final byte DEFAULT = 0; - public static final byte TAG_INTERCEPTOR = 1; - public static final byte MANUAL_INSTRUMENTATION = 2; + public static final byte MANUAL_INSTRUMENTATION = 1; } From c2c272bddaa8a0e0092546f48c27e3b63cc766f0 Mon Sep 17 00:00:00 2001 From: cecile75 <32452337+cecile75@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:50:57 +0200 Subject: [PATCH 4/4] Test on new error priorities level --- .../src/test/groovy/datadog/trace/core/DDSpanTest.groovy | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy index 54edfd095df..e7882432d9c 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy @@ -457,6 +457,11 @@ class DDSpanTest extends DDCoreSpecification { then: !span.isError() + when: + span.setError(true, ErrorPriorities.MANUAL_INSTRUMENTATION) + then: + span.isError() + when: span.setError(true, Byte.MAX_VALUE) then: