Skip to content

Commit 33cc72c

Browse files
committed
Prevent Netty idle timers from retaining request context
1 parent b40cdeb commit 33cc72c

1 file changed

Lines changed: 19 additions & 0 deletions

File tree

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import static datadog.trace.instrumentation.java.concurrent.ConcurrentInstrumentationNames.EXECUTOR_INSTRUMENTATION_NAME;
1111
import static net.bytebuddy.matcher.ElementMatchers.isDeclaredBy;
1212
import static net.bytebuddy.matcher.ElementMatchers.isTypeInitializer;
13+
import static net.bytebuddy.matcher.ElementMatchers.returns;
14+
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1315
import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments;
1416

1517
import com.google.auto.service.AutoService;
@@ -61,6 +63,10 @@ public AsyncPropagatingDisableInstrumentation() {
6163
"io.netty.util.concurrent.GlobalEventExecutor",
6264
// shaded version
6365
"io.grpc.netty.shaded.io.netty.util.concurrent.GlobalEventExecutor");
66+
private static final ElementMatcher<TypeDescription> NETTY_IDLE_STATE_HANDLER =
67+
namedOneOf(
68+
"io.netty.handler.timeout.IdleStateHandler",
69+
"io.grpc.netty.shaded.io.netty.handler.timeout.IdleStateHandler");
6470
private static final ElementMatcher<TypeDescription> JAVA_HTTP_CLIENT =
6571
extendsClass(named("java.net.http.HttpClient"));
6672
private static final String LETTUCE_HANDSHAKE_HANDLER =
@@ -107,6 +113,8 @@ public String[] knownMatchingTypes() {
107113
LETTUCE_HANDSHAKE_HANDLER,
108114
"io.netty.util.concurrent.GlobalEventExecutor",
109115
"io.grpc.netty.shaded.io.netty.util.concurrent.GlobalEventExecutor",
116+
"io.netty.handler.timeout.IdleStateHandler",
117+
"io.grpc.netty.shaded.io.netty.handler.timeout.IdleStateHandler",
110118
"com.linecorp.armeria.client.HttpClientFactory",
111119
"com.linecorp.armeria.client.HttpChannelPool"
112120
};
@@ -215,6 +223,17 @@ public void methodAdvice(MethodTransformer transformer) {
215223
isTypeInitializer().and(isDeclaredBy(RXJAVA3_DISABLED_TYPE_INITIALIZERS)), advice);
216224
transformer.applyAdvice(
217225
isTypeInitializer().and(isDeclaredBy(NETTY_GLOBAL_EVENT_EXECUTOR)), advice);
226+
transformer.applyAdvice(
227+
named("initialize")
228+
.and(returns(void.class))
229+
.and(
230+
takesArgument(
231+
0,
232+
namedOneOf(
233+
"io.netty.channel.ChannelHandlerContext",
234+
"io.grpc.netty.shaded.io.netty.channel.ChannelHandlerContext")))
235+
.and(isDeclaredBy(NETTY_IDLE_STATE_HANDLER)),
236+
advice);
218237
transformer.applyAdvice(namedOneOf("sendAsync").and(isDeclaredBy(JAVA_HTTP_CLIENT)), advice);
219238
transformer.applyAdvice(
220239
named("channelRegistered").and(isDeclaredBy(named(LETTUCE_HANDSHAKE_HANDLER))), advice);

0 commit comments

Comments
 (0)