From 4b03ecb287e2ec5ef1a6b073224a5ebdcf2bc661 Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Tue, 17 Mar 2026 13:14:19 -0400 Subject: [PATCH 1/3] Use local root span to set resource name --- .../jakarta3/JakartaRsAnnotationsDecorator.java | 13 +++++++++++-- .../vertx_3_4/server/RouteHandlerWrapper.java | 6 ++++-- .../vertx_4_0/server/RouteHandlerWrapper.java | 6 ++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAnnotationsDecorator.java b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAnnotationsDecorator.java index 57d41ff0012..9c54a026409 100644 --- a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAnnotationsDecorator.java +++ b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAnnotationsDecorator.java @@ -7,6 +7,7 @@ import datadog.trace.bootstrap.ClassHierarchyIterable; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; +import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.bootstrap.instrumentation.api.Tags; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator; @@ -68,10 +69,18 @@ public void onJakartaRsSpan( } else { span.setResourceName(DECORATE.spanNameForMethod(target, method)); - if (parent == parent.getLocalRootSpan()) { + if (parent.getLocalRootSpan().getResourceNamePriority() + < ResourceNamePriorities.HTTP_FRAMEWORK_ROUTE) { parent.setTag(Tags.COMPONENT, "jakarta-rs"); + + // current handler is a filter + if (!httpMethodAndRoute.hasLeft() + && (!httpMethodAndRoute.hasRight() || httpMethodAndRoute.getRight().length() == 0)) { + return; + } + HTTP_RESOURCE_DECORATOR.withRoute( - parent, httpMethodAndRoute.getLeft(), httpMethodAndRoute.getRight()); + parent.getLocalRootSpan(), httpMethodAndRoute.getLeft(), httpMethodAndRoute.getRight()); } } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java index 1c0d35a0191..1e37e1aa35a 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java @@ -69,6 +69,8 @@ private void setRoute(RoutingContext routingContext) { return; } + final AgentSpan routeSpan = parentSpan.getLocalRootSpan(); + final String method = routingContext.request().rawMethod(); String mountPoint = routingContext.mountPoint(); String path = routingContext.currentRoute().getPath(); @@ -81,9 +83,9 @@ private void setRoute(RoutingContext routingContext) { } path = mountPoint + path; } - if (method != null && path != null && shouldUpdateRoute(routingContext, parentSpan, path)) { + if (method != null && path != null && shouldUpdateRoute(routingContext, routeSpan, path)) { routingContext.put(ROUTE_CONTEXT_KEY, path); - HTTP_RESOURCE_DECORATOR.withRoute(parentSpan, method, path, true); + HTTP_RESOURCE_DECORATOR.withRoute(routeSpan, method, path, true); } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java index a996806a1a8..a6d2a7c7096 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java @@ -66,6 +66,8 @@ private void setRoute(RoutingContext routingContext) { return; } + final AgentSpan routeSpan = parentSpan.getLocalRootSpan(); + final String method = routingContext.request().method().name(); final String mountPoint = routingContext.mountPoint(); @@ -82,9 +84,9 @@ private void setRoute(RoutingContext routingContext) { : mountPoint; path = noBackslashhMountPoint + path; } - if (method != null && path != null && shouldUpdateRoute(routingContext, parentSpan, path)) { + if (method != null && path != null && shouldUpdateRoute(routingContext, routeSpan, path)) { routingContext.put(ROUTE_CONTEXT_KEY, path); - HTTP_RESOURCE_DECORATOR.withRoute(parentSpan, method, path, true); + HTTP_RESOURCE_DECORATOR.withRoute(routeSpan, method, path, true); } } From 8b0a96dc90f6c52d3ab48657986b188196bca67b Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Tue, 17 Mar 2026 16:53:19 -0400 Subject: [PATCH 2/3] Define earlier --- .../vertx_3_4/server/RouteHandlerWrapper.java | 5 ++++- .../vertx_4_0/server/RouteHandlerWrapper.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java index 1e37e1aa35a..d630eff8eec 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java @@ -42,6 +42,9 @@ public void handle(final RoutingContext routingContext) { if (spanStarter) { if (span == null) { AgentSpan parentSpan = activeSpan(); + if (parentSpan != null) { + parentSpan = parentSpan.getLocalRootSpan(); + } routingContext.put(PARENT_SPAN_CONTEXT_KEY, parentSpan); span = startSpan(INSTRUMENTATION_NAME); @@ -69,7 +72,7 @@ private void setRoute(RoutingContext routingContext) { return; } - final AgentSpan routeSpan = parentSpan.getLocalRootSpan(); + final AgentSpan routeSpan = parentSpan; final String method = routingContext.request().rawMethod(); String mountPoint = routingContext.mountPoint(); diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java index a6d2a7c7096..bb8b7b90a16 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java @@ -38,6 +38,9 @@ public void handle(final RoutingContext routingContext) { if (spanStarter) { if (span == null) { AgentSpan parentSpan = activeSpan(); + if (parentSpan != null) { + parentSpan = parentSpan.getLocalRootSpan(); + } routingContext.put(PARENT_SPAN_CONTEXT_KEY, parentSpan); span = startSpan(INSTRUMENTATION_NAME); @@ -66,7 +69,7 @@ private void setRoute(RoutingContext routingContext) { return; } - final AgentSpan routeSpan = parentSpan.getLocalRootSpan(); + final AgentSpan routeSpan = parentSpan; final String method = routingContext.request().method().name(); final String mountPoint = routingContext.mountPoint(); From 739a9b9e4b25dab082de72f8f040c09170dd2f98 Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Wed, 18 Mar 2026 17:50:21 -0400 Subject: [PATCH 3/3] Add http.route guard --- .../vertx_3_4/server/RouteHandlerWrapper.java | 5 +++++ .../vertx_4_0/server/RouteHandlerWrapper.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java index d630eff8eec..b9160e7c4bd 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java @@ -10,6 +10,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.bootstrap.instrumentation.api.Tags; import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; @@ -97,6 +98,10 @@ static boolean shouldUpdateRoute( if (span == null) { return false; } + if (span.getTag(Tags.HTTP_ROUTE) != null + && span.getResourceNamePriority() > ResourceNamePriorities.HTTP_FRAMEWORK_ROUTE) { + return false; + } final String currentRoute = routingContext.get(ROUTE_CONTEXT_KEY); if (currentRoute != null && currentRoute.equals(path)) { return false; diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java index bb8b7b90a16..7b5ec737e55 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java @@ -10,6 +10,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.bootstrap.instrumentation.api.Tags; import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; @@ -98,6 +99,10 @@ static boolean shouldUpdateRoute( if (span == null) { return false; } + if (span.getTag(Tags.HTTP_ROUTE) != null + && span.getResourceNamePriority() > ResourceNamePriorities.HTTP_FRAMEWORK_ROUTE) { + return false; + } final String currentRoute = routingContext.get(ROUTE_CONTEXT_KEY); if (currentRoute != null && currentRoute.equals(path)) { return false;