From 4b03ecb287e2ec5ef1a6b073224a5ebdcf2bc661 Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Tue, 17 Mar 2026 13:14:19 -0400 Subject: [PATCH 1/2] 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/2] 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();