Skip to content

Commit 0f3acf0

Browse files
authored
Be consistent when checking if tasks are excluded from wrapping/injection: (#6446)
* add missing checks to `JavaForkJoinPoolInstrumentation` and `JavaTimerInstrumentation` * move `startQueuingTimer` to when we know we've captured the task in `TPEHelper`
1 parent c784ae9 commit 0f3acf0

File tree

4 files changed

+14
-13
lines changed

4 files changed

+14
-13
lines changed

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/concurrent/TPEHelper.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,11 @@ public static boolean shouldPropagate(
7272
return Boolean.TRUE.equals(contextStore.get(executor));
7373
}
7474

75-
public static void capture(ContextStore<Runnable, State> contextStore, Runnable task) {
75+
public static void capture(
76+
ContextStore<Runnable, State> contextStore, ThreadPoolExecutor executor, Runnable task) {
7677
if (task != null && !exclude(RUNNABLE, task)) {
7778
AdviceUtils.capture(contextStore, task, true);
79+
QueueTimerHelper.startQueuingTimer(contextStore, executor.getClass(), task);
7880
}
7981
}
8082

dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/JavaForkJoinPoolInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public static <T> void externalPush(
6060
@Advice.OnMethodExit(onThrowable = Throwable.class)
6161
public static <T> void cleanup(
6262
@Advice.Argument(0) ForkJoinTask<T> task, @Advice.Thrown Throwable thrown) {
63-
if (null != thrown) {
63+
if (null != thrown && !exclude(FORK_JOIN_TASK, task)) {
6464
cancelTask(InstrumentationContext.get(ForkJoinTask.class, State.class), task);
6565
}
6666
}

dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/JavaTimerInstrumentation.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
44
import static datadog.trace.bootstrap.instrumentation.java.concurrent.AdviceUtils.cancelTask;
55
import static datadog.trace.bootstrap.instrumentation.java.concurrent.AdviceUtils.capture;
6+
import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE;
7+
import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.exclude;
68
import static datadog.trace.bootstrap.instrumentation.java.concurrent.QueueTimerHelper.startQueuingTimer;
79
import static java.util.Collections.singletonMap;
810
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
@@ -58,15 +60,17 @@ public static void before(@Advice.Argument(0) TimerTask task, @Advice.Argument(2
5860
if (period != 0) {
5961
return;
6062
}
61-
ContextStore<Runnable, State> contextStore =
62-
InstrumentationContext.get(Runnable.class, State.class);
63-
capture(contextStore, task, true);
64-
startQueuingTimer(contextStore, Timer.class, task);
63+
if (!exclude(RUNNABLE, task)) {
64+
ContextStore<Runnable, State> contextStore =
65+
InstrumentationContext.get(Runnable.class, State.class);
66+
capture(contextStore, task, true);
67+
startQueuingTimer(contextStore, Timer.class, task);
68+
}
6569
}
6670

6771
@Advice.OnMethodExit(onThrowable = Throwable.class)
6872
public static void after(@Advice.Argument(0) TimerTask task, @Advice.Thrown Throwable thrown) {
69-
if (null != thrown) {
73+
if (null != thrown && !exclude(RUNNABLE, task)) {
7074
cancelTask(InstrumentationContext.get(Runnable.class, State.class), task);
7175
}
7276
}

dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ThreadPoolExecutorInstrumentation.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@
1616
import datadog.trace.agent.tooling.ExcludeFilterProvider;
1717
import datadog.trace.agent.tooling.Instrumenter;
1818
import datadog.trace.api.Platform;
19-
import datadog.trace.bootstrap.ContextStore;
2019
import datadog.trace.bootstrap.InstrumentationContext;
2120
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
2221
import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter;
23-
import datadog.trace.bootstrap.instrumentation.java.concurrent.QueueTimerHelper;
2422
import datadog.trace.bootstrap.instrumentation.java.concurrent.State;
2523
import datadog.trace.bootstrap.instrumentation.java.concurrent.TPEHelper;
2624
import datadog.trace.bootstrap.instrumentation.java.concurrent.Wrapper;
@@ -150,10 +148,7 @@ public static void capture(
150148
if (TPEHelper.useWrapping(task)) {
151149
task = Wrapper.wrap(task);
152150
} else {
153-
ContextStore<Runnable, State> contextStore =
154-
InstrumentationContext.get(Runnable.class, State.class);
155-
TPEHelper.capture(contextStore, task);
156-
QueueTimerHelper.startQueuingTimer(contextStore, tpe.getClass(), task);
151+
TPEHelper.capture(InstrumentationContext.get(Runnable.class, State.class), tpe, task);
157152
}
158153
}
159154
}

0 commit comments

Comments
 (0)