Merge pull request #1300 from DataDog/tyler/servlet-forward
Stop creating a "top level" servlet span when in a forward/include situation
This commit is contained in:
commit
aca4b9ece9
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import static java.util.Collections.singletonMap;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
|
@ -64,10 +65,11 @@ public final class RequestDispatcherInstrumentation extends Instrumenter.Default
|
|||
return singletonMap(
|
||||
named("forward")
|
||||
.or(named("include"))
|
||||
.and(takesArguments(2))
|
||||
.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 {
|
||||
|
|
|
@ -60,7 +60,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 {
|
||||
|
|
|
@ -66,7 +66,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 {
|
||||
|
|
Loading…
Reference in New Issue