Skip to content

Commit 413e296

Browse files
authored
netty move leftover virtual fields + update distribution example (#15233)
1 parent 9544ab0 commit 413e296

File tree

13 files changed

+86
-60
lines changed

13 files changed

+86
-60
lines changed

examples/distro/instrumentation/servlet-3/src/main/java/com/example/javaagent/instrumentation/DemoServlet3HelperClass.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
package com.example.javaagent.instrumentation;
77

88
import com.example.javaagent.bootstrap.AgentApi;
9+
import io.opentelemetry.instrumentation.api.util.VirtualField;
10+
import java.util.concurrent.atomic.AtomicInteger;
11+
import javax.servlet.ServletResponse;
912

1013
public final class DemoServlet3HelperClass {
1114

15+
public static final VirtualField<ServletResponse, AtomicInteger> VIRTUAL_FIELD =
16+
VirtualField.find(ServletResponse.class, AtomicInteger.class);
17+
1218
public static void doSomething(int number) {
1319
// call the api in bootstrap class loader
1420
AgentApi.doSomething(number);

examples/distro/instrumentation/servlet-3/src/main/java/com/example/javaagent/instrumentation/DemoServlet3Instrumentation.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
1212
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1313

14-
import io.opentelemetry.instrumentation.api.util.VirtualField;
1514
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1615
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1716
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@@ -45,12 +44,10 @@ public static class DemoServlet3Advice {
4544
public static void onEnter(@Advice.Argument(value = 1) ServletResponse response) {
4645
// VirtualField depends on muzzle-generation. Using it here to verify that muzzle-generation
4746
// was set up.
48-
VirtualField<ServletResponse, AtomicInteger> virtualField =
49-
VirtualField.find(ServletResponse.class, AtomicInteger.class);
50-
AtomicInteger counter = virtualField.get(response);
47+
AtomicInteger counter = DemoServlet3HelperClass.VIRTUAL_FIELD.get(response);
5148
if (counter == null) {
5249
counter = new AtomicInteger();
53-
virtualField.set(response, counter);
50+
DemoServlet3HelperClass.VIRTUAL_FIELD.set(response, counter);
5451
}
5552
DemoServlet3HelperClass.doSomething(counter.incrementAndGet());
5653

instrumentation/finagle-http-23.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finaglehttp/v23_11/Helpers.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626

2727
public final class Helpers {
2828

29+
private static final VirtualField<ChannelHandler, ChannelHandler> CHANNEL_HANDLER =
30+
VirtualField.find(ChannelHandler.class, ChannelHandler.class);
31+
2932
private Helpers() {}
3033

3134
public static final Local<Context> CONTEXT_LOCAL = new Local<>();
@@ -52,8 +55,7 @@ protected void initChannel(C channel) throws Exception {
5255
channel.pipeline().context(Http2StreamFrameToHttpObjectCodec.class);
5356
if (codecCtx != null) {
5457
if (channel.pipeline().get(HttpServerTracingHandler.class) == null) {
55-
VirtualField<ChannelHandler, ChannelHandler> virtualField =
56-
VirtualField.find(ChannelHandler.class, ChannelHandler.class);
58+
5759
ChannelHandler ourHandler =
5860
NettyServerSingletons.serverTelemetry()
5961
.createCombinedHandler(NettyHttpServerResponseBeforeCommitHandler.INSTANCE);
@@ -62,7 +64,7 @@ protected void initChannel(C channel) throws Exception {
6264
.pipeline()
6365
.addAfter(codecCtx.name(), ourHandler.getClass().getName(), ourHandler);
6466
// attach this in this way to match up with how netty instrumentation expects things
65-
virtualField.set(codecCtx.handler(), ourHandler);
67+
CHANNEL_HANDLER.set(codecCtx.handler(), ourHandler);
6668
}
6769
}
6870
}
@@ -93,15 +95,13 @@ protected void initChannel(C channel) throws Exception {
9395
channel.pipeline().context(Http2StreamFrameToHttpObjectCodec.class);
9496
if (codecCtx != null) {
9597
if (channel.pipeline().get(HttpClientTracingHandler.class) == null) {
96-
VirtualField<ChannelHandler, ChannelHandler> virtualField =
97-
VirtualField.find(ChannelHandler.class, ChannelHandler.class);
9898
ChannelHandler ourHandler = clientHandlerFactory().createCombinedHandler();
9999

100100
channel
101101
.pipeline()
102102
.addAfter(codecCtx.name(), ourHandler.getClass().getName(), ourHandler);
103103
// attach this in this way to match up with how netty instrumentation expects things
104-
virtualField.set(codecCtx.handler(), ourHandler);
104+
CHANNEL_HANDLER.set(codecCtx.handler(), ourHandler);
105105
}
106106
}
107107
}

instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/ChannelFutureListenerInstrumentation.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,18 @@
77

88
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
99
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
10+
import static io.opentelemetry.javaagent.instrumentation.netty.v3_8.VirtualFieldHelper.CONNECTION_CONTEXT;
1011
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
1112
import static net.bytebuddy.matcher.ElementMatchers.named;
1213
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1314

1415
import io.opentelemetry.context.Context;
1516
import io.opentelemetry.context.Scope;
16-
import io.opentelemetry.instrumentation.api.util.VirtualField;
1717
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1818
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1919
import net.bytebuddy.asm.Advice;
2020
import net.bytebuddy.description.type.TypeDescription;
2121
import net.bytebuddy.matcher.ElementMatcher;
22-
import org.jboss.netty.channel.Channel;
2322
import org.jboss.netty.channel.ChannelFuture;
2423

2524
public class ChannelFutureListenerInstrumentation implements TypeInstrumentation {
@@ -58,10 +57,7 @@ public static Scope activateScope(@Advice.Argument(0) ChannelFuture future) {
5857
return null;
5958
}
6059

61-
VirtualField<Channel, NettyConnectionContext> virtualField =
62-
VirtualField.find(Channel.class, NettyConnectionContext.class);
63-
64-
NettyConnectionContext connectionContext = virtualField.get(future.getChannel());
60+
NettyConnectionContext connectionContext = CONNECTION_CONTEXT.get(future.getChannel());
6561
if (connectionContext == null) {
6662
return null;
6763
}

instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyChannelInstrumentation.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
99
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
10+
import static io.opentelemetry.javaagent.instrumentation.netty.v3_8.VirtualFieldHelper.CONNECTION_CONTEXT;
1011
import static io.opentelemetry.javaagent.instrumentation.netty.v3_8.client.NettyClientSingletons.connectionInstrumenter;
1112
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
1213
import static net.bytebuddy.matcher.ElementMatchers.named;
@@ -16,7 +17,6 @@
1617
import io.opentelemetry.api.trace.Span;
1718
import io.opentelemetry.context.Context;
1819
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil;
19-
import io.opentelemetry.instrumentation.api.util.VirtualField;
2020
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
2121
import io.opentelemetry.instrumentation.netty.common.internal.Timer;
2222
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
@@ -65,12 +65,10 @@ public static NettyScope onEnter(
6565
return null;
6666
}
6767

68-
VirtualField<Channel, NettyConnectionContext> virtualField =
69-
VirtualField.find(Channel.class, NettyConnectionContext.class);
70-
if (virtualField.get(channel) != null) {
68+
if (CONNECTION_CONTEXT.get(channel) != null) {
7169
return null;
7270
}
73-
virtualField.set(channel, new NettyConnectionContext(parentContext));
71+
CONNECTION_CONTEXT.set(channel, new NettyConnectionContext(parentContext));
7472

7573
NettyConnectionRequest request = NettyConnectionRequest.connect(remoteAddress);
7674
Timer timer = Timer.start();

instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyInstrumentationModule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
4040
new NettyChannelPipelineInstrumentation(),
4141
new DefaultChannelPipelineInstrumentation());
4242
}
43+
44+
@Override
45+
public boolean isIndyReady() {
46+
return true;
47+
}
4348
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.netty.v3_8;
7+
8+
import io.opentelemetry.instrumentation.api.util.VirtualField;
9+
import org.jboss.netty.channel.Channel;
10+
11+
public class VirtualFieldHelper {
12+
13+
public static final VirtualField<Channel, NettyConnectionContext> CONNECTION_CONTEXT =
14+
VirtualField.find(Channel.class, NettyConnectionContext.class);
15+
16+
private VirtualFieldHelper() {}
17+
}

instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/NettyChannelPipelineInstrumentation.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.javaagent.instrumentation.netty.v4_0;
77

8+
import static io.opentelemetry.javaagent.instrumentation.netty.v4.common.VirtualFieldHelper.CHANNEL_HANDLER;
89
import static io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.NettyClientSingletons.sslInstrumenter;
910
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
1011
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
@@ -19,7 +20,6 @@
1920
import io.netty.handler.codec.http.HttpResponseDecoder;
2021
import io.netty.handler.codec.http.HttpResponseEncoder;
2122
import io.netty.handler.codec.http.HttpServerCodec;
22-
import io.opentelemetry.instrumentation.api.util.VirtualField;
2323
import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettySslInstrumentationHandler;
2424
import io.opentelemetry.javaagent.bootstrap.CallDepth;
2525
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@@ -70,11 +70,8 @@ public static void addHandler(
7070
return;
7171
}
7272

73-
VirtualField<ChannelHandler, ChannelHandler> instrumentationHandlerField =
74-
VirtualField.find(ChannelHandler.class, ChannelHandler.class);
75-
7673
// don't add another instrumentation handler if there already is one attached
77-
if (instrumentationHandlerField.get(handler) != null) {
74+
if (CHANNEL_HANDLER.get(handler) != null) {
7875
return;
7976
}
8077

@@ -103,7 +100,7 @@ public static void addHandler(
103100
try {
104101
pipeline.addLast(ourHandler.getClass().getName(), ourHandler);
105102
// associate our handle with original handler so they could be removed together
106-
instrumentationHandlerField.set(handler, ourHandler);
103+
CHANNEL_HANDLER.set(handler, ourHandler);
107104
} catch (IllegalArgumentException e) {
108105
// Prevented adding duplicate handlers.
109106
}

instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/NettyInstrumentationModule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
4646
new NettyChannelPipelineInstrumentation(),
4747
new AbstractChannelHandlerContextInstrumentation());
4848
}
49+
50+
@Override
51+
public boolean isIndyReady() {
52+
return true;
53+
}
4954
}

instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyChannelPipelineInstrumentation.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.javaagent.instrumentation.netty.v4_1;
77

8+
import static io.opentelemetry.javaagent.instrumentation.netty.v4.common.VirtualFieldHelper.CHANNEL_HANDLER;
89
import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.NettyClientSingletons.clientHandlerFactory;
910
import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.NettyClientSingletons.sslInstrumenter;
1011
import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.NettyServerSingletons.serverTelemetry;
@@ -22,7 +23,6 @@
2223
import io.netty.handler.codec.http.HttpResponseDecoder;
2324
import io.netty.handler.codec.http.HttpResponseEncoder;
2425
import io.netty.handler.codec.http.HttpServerCodec;
25-
import io.opentelemetry.instrumentation.api.util.VirtualField;
2626
import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettySslInstrumentationHandler;
2727
import io.opentelemetry.javaagent.bootstrap.CallDepth;
2828
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@@ -78,11 +78,8 @@ public static void addHandler(
7878
return;
7979
}
8080

81-
VirtualField<ChannelHandler, ChannelHandler> instrumentationHandlerField =
82-
VirtualField.find(ChannelHandler.class, ChannelHandler.class);
83-
8481
// don't add another instrumentation handler if there already is one attached
85-
if (instrumentationHandlerField.get(handler) != null) {
82+
if (CHANNEL_HANDLER.get(handler) != null) {
8683
return;
8784
}
8885

@@ -126,7 +123,7 @@ public static void addHandler(
126123
try {
127124
pipeline.addAfter(name, ourHandler.getClass().getName(), ourHandler);
128125
// associate our handle with original handler so they could be removed together
129-
instrumentationHandlerField.set(handler, ourHandler);
126+
CHANNEL_HANDLER.set(handler, ourHandler);
130127
} catch (IllegalArgumentException e) {
131128
// Prevented adding duplicate handlers.
132129
}

0 commit comments

Comments
 (0)