From 6ddcadc73cc1282fb8e98c29fad854aaa9b6fcd3 Mon Sep 17 00:00:00 2001 From: Thomas Spring Date: Mon, 21 Dec 2020 14:59:56 -0800 Subject: [PATCH] Weave WorkerTask and link onSubscribe to support subscribeOn with custom schedulers --- .../reactor/netty/TokenLinkingSubscriber.java | 4 ++-- .../core/scheduler/WorkerTask_Instrumentation.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 instrumentation/netty-reactor-0.8.0/src/main/java/reactor/core/scheduler/WorkerTask_Instrumentation.java diff --git a/instrumentation/netty-reactor-0.8.0/src/main/java/com/nr/instrumentation/reactor/netty/TokenLinkingSubscriber.java b/instrumentation/netty-reactor-0.8.0/src/main/java/com/nr/instrumentation/reactor/netty/TokenLinkingSubscriber.java index 289729fc40..b178c459c0 100644 --- a/instrumentation/netty-reactor-0.8.0/src/main/java/com/nr/instrumentation/reactor/netty/TokenLinkingSubscriber.java +++ b/instrumentation/netty-reactor-0.8.0/src/main/java/com/nr/instrumentation/reactor/netty/TokenLinkingSubscriber.java @@ -27,13 +27,13 @@ public class TokenLinkingSubscriber implements CoreSubscriber { public TokenLinkingSubscriber(Subscriber subscriber, Context ctx) { this.subscriber = subscriber; this.context = ctx; - // newrelic-token is added by spring-webflux-5.1 instrumentation + // newrelic-token is added by spring-webflux instrumentation this.token = ctx.getOrDefault("newrelic-token", null); } @Override public void onSubscribe(Subscription subscription) { - subscriber.onSubscribe(subscription); + withNRToken(() -> subscriber.onSubscribe(subscription)); } @Override diff --git a/instrumentation/netty-reactor-0.8.0/src/main/java/reactor/core/scheduler/WorkerTask_Instrumentation.java b/instrumentation/netty-reactor-0.8.0/src/main/java/reactor/core/scheduler/WorkerTask_Instrumentation.java new file mode 100644 index 0000000000..281f0c4356 --- /dev/null +++ b/instrumentation/netty-reactor-0.8.0/src/main/java/reactor/core/scheduler/WorkerTask_Instrumentation.java @@ -0,0 +1,14 @@ +package reactor.core.scheduler; + +import com.newrelic.api.agent.Trace; +import com.newrelic.api.agent.weaver.Weave; +import com.newrelic.api.agent.weaver.Weaver; + +@Weave(originalName = "reactor.core.scheduler.WorkerTask") +final class WorkerTask_Instrumentation { + + @Trace(async = true, excludeFromTransactionTrace = true) + public Void call() { + return Weaver.callOriginal(); + } +}