Skip to content

Commit 3682733

Browse files
authored
Do not inspect reactor context when not needed (#8745)
1 parent 274f7b2 commit 3682733

File tree

1 file changed

+22
-1
lines changed
  • dd-java-agent/instrumentation/reactor-core-3.1/src/main/java/datadog/trace/instrumentation/reactor/core

1 file changed

+22
-1
lines changed

dd-java-agent/instrumentation/reactor-core-3.1/src/main/java/datadog/trace/instrumentation/reactor/core/ContextSpanHelper.java

+22-1
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,37 @@
44
import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan;
55
import javax.annotation.Nullable;
66
import reactor.core.CoreSubscriber;
7+
import reactor.core.publisher.Mono;
78
import reactor.util.context.Context;
89

910
public class ContextSpanHelper {
11+
12+
private static final Class<?> MONO_WITH_CONTEXT_CLASS = findMonoWithContextClass();
13+
1014
private static final String DD_SPAN_KEY = "dd.span";
1115

16+
private static Class<?> findMonoWithContextClass() {
17+
final ClassLoader classLoader = Mono.class.getClassLoader();
18+
// 3.4+
19+
try {
20+
return Class.forName(
21+
"reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber", false, classLoader);
22+
} catch (Throwable ignored) {
23+
}
24+
// < 3.4
25+
try {
26+
return Class.forName(
27+
"reactor.core.publisher.FluxContextStart$ContextStartSubscriber", false, classLoader);
28+
} catch (Throwable ignored) {
29+
}
30+
return null;
31+
}
32+
1233
private ContextSpanHelper() {}
1334

1435
@Nullable
1536
public static AgentSpan extractSpanFromSubscriberContext(final CoreSubscriber<?> subscriber) {
16-
if (subscriber == null) {
37+
if (MONO_WITH_CONTEXT_CLASS == null || !MONO_WITH_CONTEXT_CLASS.isInstance(subscriber)) {
1738
return null;
1839
}
1940
Context context = null;

0 commit comments

Comments
 (0)