diff --git a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Advice.java b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Advice.java index eaf5c5b05a..17a37efb52 100644 --- a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Advice.java +++ b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Advice.java @@ -2,7 +2,6 @@ package datadog.trace.instrumentation.servlet2; import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.servlet2.HttpServletRequestExtractAdapter.GETTER; @@ -29,11 +28,11 @@ public class Servlet2Advice { @Advice.Argument(0) final ServletRequest request, @Advice.Argument(value = 1, readOnly = false, typing = Assigner.Typing.DYNAMIC) ServletResponse response) { - final boolean hasActiveTrace = activeSpan() != null; + final boolean hasServletTrace = request.getAttribute(DD_SPAN_ATTRIBUTE) instanceof AgentSpan; final boolean invalidRequest = !(request instanceof HttpServletRequest); - if (invalidRequest || (hasActiveTrace && hasServletTrace)) { - // Tracing might already be applied by the FilterChain. If so ignore this. + if (invalidRequest || hasServletTrace) { + // Tracing might already be applied by the FilterChain or a parent request (forward/include). return null; } diff --git a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Advice.java b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Advice.java index ec36c04847..7090de399d 100644 --- a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Advice.java +++ b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Advice.java @@ -2,7 +2,6 @@ package datadog.trace.instrumentation.servlet3; import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.servlet3.HttpServletRequestExtractAdapter.GETTER; @@ -29,11 +28,10 @@ public class Servlet3Advice { @Advice.Argument(0) final ServletRequest request, @Advice.Argument(1) final ServletResponse response) { - final boolean hasActiveTrace = activeSpan() != null; final boolean hasServletTrace = request.getAttribute(DD_SPAN_ATTRIBUTE) instanceof AgentSpan; final boolean invalidRequest = !(request instanceof HttpServletRequest); - if (invalidRequest || (hasActiveTrace && hasServletTrace)) { - // Tracing might already be applied by the FilterChain. If so ignore this. + if (invalidRequest || hasServletTrace) { + // Tracing might already be applied by the FilterChain or a parent request (forward/include). return null; } diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java index 05f64d2851..af5a4f5e02 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java @@ -68,7 +68,7 @@ public final class RequestDispatcherInstrumentation extends Instrumenter.Default .and(takesArgument(0, named("javax.servlet.ServletRequest"))) .and(takesArgument(1, named("javax.servlet.ServletResponse"))) .and(isPublic()), - RequestDispatcherAdvice.class.getName()); + getClass().getName() + "$RequestDispatcherAdvice"); } public static class RequestDispatcherAdvice { diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java index fef044ca99..3cc40a3c13 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java @@ -61,7 +61,7 @@ public final class FilterInstrumentation extends Instrumenter.Default { .and(takesArgument(0, named("javax.servlet.ServletRequest"))) .and(takesArgument(1, named("javax.servlet.ServletResponse"))) .and(isPublic()), - FilterAdvice.class.getName()); + getClass().getName() + "$FilterAdvice"); } public static class FilterAdvice { diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java index 1ee59fee8e..db13815846 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java @@ -67,7 +67,7 @@ public final class HttpServletInstrumentation extends Instrumenter.Default { .and(takesArgument(0, named("javax.servlet.http.HttpServletRequest"))) .and(takesArgument(1, named("javax.servlet.http.HttpServletResponse"))) .and(isProtected().or(isPublic())), - HttpServletAdvice.class.getName()); + getClass().getName() + "$HttpServletAdvice"); } public static class HttpServletAdvice {