Restrict dispatcher instrumentation to 2 arguments

To reduce risk of duplicate spans when delegating to a 2+ arg method.
This commit is contained in:
Tyler Benson 2020-03-05 16:01:53 -08:00
parent 2802009e01
commit 7bf85dbb97
1 changed files with 2 additions and 0 deletions

View File

@ -14,6 +14,7 @@ import static net.bytebuddy.matcher.ElementMatchers.isPublic;
import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.not;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
@ -65,6 +66,7 @@ public final class RequestDispatcherInstrumentation extends Instrumenter.Default
return singletonMap( return singletonMap(
named("forward") named("forward")
.or(named("include")) .or(named("include"))
.and(takesArguments(2))
.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()),