From 1641c5444818bff910a3de84e053b7808d0c0e68 Mon Sep 17 00:00:00 2001 From: Andrew Kent Date: Fri, 18 May 2018 11:14:24 -0700 Subject: [PATCH] Skip instrumenting slick thread pool --- .../java/concurrent/ExecutorInstrumentation.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java index 0ecbf2ae84..2dca101cbc 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java @@ -137,12 +137,13 @@ public final class ExecutorInstrumentation extends Instrumenter.Configurable { public static class WrapRunnableAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static DatadogWrapper wrapJob( - @Advice.Argument(value = 0, readOnly = false) Runnable task) { + @Advice.This Object dis, @Advice.Argument(value = 0, readOnly = false) Runnable task) { final Scope scope = GlobalTracer.get().scopeManager().active(); if (scope instanceof TraceScope && ((TraceScope) scope).isAsyncPropagating() && task != null - && !(task instanceof DatadogWrapper)) { + && !(task instanceof DatadogWrapper) + && (!dis.getClass().getName().startsWith("slick.util.AsyncExecutor"))) { task = new RunnableWrapper(task, (TraceScope) scope); return (RunnableWrapper) task; } @@ -161,12 +162,13 @@ public final class ExecutorInstrumentation extends Instrumenter.Configurable { public static class WrapCallableAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static DatadogWrapper wrapJob( - @Advice.Argument(value = 0, readOnly = false) Callable task) { + @Advice.This Object dis, @Advice.Argument(value = 0, readOnly = false) Callable task) { final Scope scope = GlobalTracer.get().scopeManager().active(); if (scope instanceof TraceScope && ((TraceScope) scope).isAsyncPropagating() && task != null - && !(task instanceof DatadogWrapper)) { + && !(task instanceof DatadogWrapper) + && (!dis.getClass().getName().startsWith("slick.util.AsyncExecutor"))) { task = new CallableWrapper<>(task, (TraceScope) scope); return (CallableWrapper) task; } @@ -185,9 +187,12 @@ public final class ExecutorInstrumentation extends Instrumenter.Configurable { public static class WrapCallableCollectionAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static Collection wrapJob( + @Advice.This Object dis, @Advice.Argument(value = 0, readOnly = false) Collection> tasks) { final Scope scope = GlobalTracer.get().scopeManager().active(); - if (scope instanceof TraceScope && ((TraceScope) scope).isAsyncPropagating()) { + if (scope instanceof TraceScope + && ((TraceScope) scope).isAsyncPropagating() + && (!dis.getClass().getName().startsWith("slick.util.AsyncExecutor"))) { final Collection> wrappedTasks = new ArrayList<>(tasks.size()); for (Callable task : tasks) { if (task != null) {