Stop creating a "top level" servlet span when in a forward/include situation.
Effectively reverting 6703bd96bb
The expectation is that these are not really separate external requests, but a semantic way of processing a single request.
This commit is contained in:
parent
0f65b4db76
commit
2802009e01
|
@ -2,7 +2,6 @@ package datadog.trace.instrumentation.servlet2;
|
||||||
|
|
||||||
import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE;
|
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.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.propagate;
|
||||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
||||||
import static datadog.trace.instrumentation.servlet2.HttpServletRequestExtractAdapter.GETTER;
|
import static datadog.trace.instrumentation.servlet2.HttpServletRequestExtractAdapter.GETTER;
|
||||||
|
@ -29,11 +28,11 @@ public class Servlet2Advice {
|
||||||
@Advice.Argument(0) final ServletRequest request,
|
@Advice.Argument(0) final ServletRequest request,
|
||||||
@Advice.Argument(value = 1, readOnly = false, typing = Assigner.Typing.DYNAMIC)
|
@Advice.Argument(value = 1, readOnly = false, typing = Assigner.Typing.DYNAMIC)
|
||||||
ServletResponse response) {
|
ServletResponse response) {
|
||||||
final boolean hasActiveTrace = activeSpan() != null;
|
|
||||||
final boolean hasServletTrace = request.getAttribute(DD_SPAN_ATTRIBUTE) instanceof AgentSpan;
|
final boolean hasServletTrace = request.getAttribute(DD_SPAN_ATTRIBUTE) instanceof AgentSpan;
|
||||||
final boolean invalidRequest = !(request instanceof HttpServletRequest);
|
final boolean invalidRequest = !(request instanceof HttpServletRequest);
|
||||||
if (invalidRequest || (hasActiveTrace && hasServletTrace)) {
|
if (invalidRequest || hasServletTrace) {
|
||||||
// Tracing might already be applied by the FilterChain. If so ignore this.
|
// Tracing might already be applied by the FilterChain or a parent request (forward/include).
|
||||||
return null;
|
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.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE;
|
||||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
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.propagate;
|
||||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
||||||
import static datadog.trace.instrumentation.servlet3.HttpServletRequestExtractAdapter.GETTER;
|
import static datadog.trace.instrumentation.servlet3.HttpServletRequestExtractAdapter.GETTER;
|
||||||
|
@ -29,11 +28,10 @@ public class Servlet3Advice {
|
||||||
@Advice.Argument(0) final ServletRequest request,
|
@Advice.Argument(0) final ServletRequest request,
|
||||||
@Advice.Argument(1) final ServletResponse response) {
|
@Advice.Argument(1) final ServletResponse response) {
|
||||||
|
|
||||||
final boolean hasActiveTrace = activeSpan() != null;
|
|
||||||
final boolean hasServletTrace = request.getAttribute(DD_SPAN_ATTRIBUTE) instanceof AgentSpan;
|
final boolean hasServletTrace = request.getAttribute(DD_SPAN_ATTRIBUTE) instanceof AgentSpan;
|
||||||
final boolean invalidRequest = !(request instanceof HttpServletRequest);
|
final boolean invalidRequest = !(request instanceof HttpServletRequest);
|
||||||
if (invalidRequest || (hasActiveTrace && hasServletTrace)) {
|
if (invalidRequest || hasServletTrace) {
|
||||||
// Tracing might already be applied by the FilterChain. If so ignore this.
|
// Tracing might already be applied by the FilterChain or a parent request (forward/include).
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ public final class RequestDispatcherInstrumentation extends Instrumenter.Default
|
||||||
.and(takesArgument(0, named("javax.servlet.ServletRequest")))
|
.and(takesArgument(0, named("javax.servlet.ServletRequest")))
|
||||||
.and(takesArgument(1, named("javax.servlet.ServletResponse")))
|
.and(takesArgument(1, named("javax.servlet.ServletResponse")))
|
||||||
.and(isPublic()),
|
.and(isPublic()),
|
||||||
RequestDispatcherAdvice.class.getName());
|
getClass().getName() + "$RequestDispatcherAdvice");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class RequestDispatcherAdvice {
|
public static class RequestDispatcherAdvice {
|
||||||
|
|
|
@ -61,7 +61,7 @@ public final class FilterInstrumentation extends Instrumenter.Default {
|
||||||
.and(takesArgument(0, named("javax.servlet.ServletRequest")))
|
.and(takesArgument(0, named("javax.servlet.ServletRequest")))
|
||||||
.and(takesArgument(1, named("javax.servlet.ServletResponse")))
|
.and(takesArgument(1, named("javax.servlet.ServletResponse")))
|
||||||
.and(isPublic()),
|
.and(isPublic()),
|
||||||
FilterAdvice.class.getName());
|
getClass().getName() + "$FilterAdvice");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class FilterAdvice {
|
public static class FilterAdvice {
|
||||||
|
|
|
@ -67,7 +67,7 @@ public final class HttpServletInstrumentation extends Instrumenter.Default {
|
||||||
.and(takesArgument(0, named("javax.servlet.http.HttpServletRequest")))
|
.and(takesArgument(0, named("javax.servlet.http.HttpServletRequest")))
|
||||||
.and(takesArgument(1, named("javax.servlet.http.HttpServletResponse")))
|
.and(takesArgument(1, named("javax.servlet.http.HttpServletResponse")))
|
||||||
.and(isProtected().or(isPublic())),
|
.and(isProtected().or(isPublic())),
|
||||||
HttpServletAdvice.class.getName());
|
getClass().getName() + "$HttpServletAdvice");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class HttpServletAdvice {
|
public static class HttpServletAdvice {
|
||||||
|
|
Loading…
Reference in New Issue