Skip to content

Commit 5e93fc5

Browse files
amarzialijandro996
authored andcommitted
Prevent Netty idle timers from retaining request context (#12503)
Prevent Netty idle timers from retaining request context Co-authored-by: andrea.marziali <andrea.marziali@datadoghq.com>
1 parent 01b021b commit 5e93fc5

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 =
@@ -108,6 +114,8 @@ public String[] knownMatchingTypes() {
108114
LETTUCE_HANDSHAKE_HANDLER,
109115
"io.netty.util.concurrent.GlobalEventExecutor",
110116
"io.grpc.netty.shaded.io.netty.util.concurrent.GlobalEventExecutor",
117+
"io.netty.handler.timeout.IdleStateHandler",
118+
"io.grpc.netty.shaded.io.netty.handler.timeout.IdleStateHandler",
111119
"com.linecorp.armeria.client.HttpClientFactory",
112120
"com.linecorp.armeria.client.HttpChannelPool"
113121
};
@@ -220,6 +228,17 @@ public void methodAdvice(MethodTransformer transformer) {
220228
isTypeInitializer().and(isDeclaredBy(RXJAVA3_DISABLED_TYPE_INITIALIZERS)), advice);
221229
transformer.applyAdvice(
222230
isTypeInitializer().and(isDeclaredBy(NETTY_GLOBAL_EVENT_EXECUTOR)), advice);
231+
transformer.applyAdvice(
232+
named("initialize")
233+
.and(returns(void.class))
234+
.and(
235+
takesArgument(
236+
0,
237+
namedOneOf(
238+
"io.netty.channel.ChannelHandlerContext",
239+
"io.grpc.netty.shaded.io.netty.channel.ChannelHandlerContext")))
240+
.and(isDeclaredBy(NETTY_IDLE_STATE_HANDLER)),
241+
advice);
223242
transformer.applyAdvice(namedOneOf("sendAsync").and(isDeclaredBy(JAVA_HTTP_CLIENT)), advice);
224243
transformer.applyAdvice(
225244
named("channelRegistered").and(isDeclaredBy(named(LETTUCE_HANDSHAKE_HANDLER))), advice);

0 commit comments

Comments
 (0)