Skip to content

Commit df78352

Browse files
authored
chore: enable executors otel module by default (#431)
* revert 2dff526 * enable executors module * upload jar as artifact * null the context attrs after usage
1 parent 70d9db9 commit df78352

File tree

9 files changed

+88
-327
lines changed

9 files changed

+88
-327
lines changed

.github/workflows/build.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ jobs:
4545
env:
4646
JVM_OPTS: -Xmx1g --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED
4747
TERM: dumb
48+
49+
- name: Upload jar as pipeline artifact
50+
uses: actions/upload-artifact@v4
51+
with:
52+
name: javaagent
53+
path: javaagent/build/libs/*-all.jar
54+
if-no-files-found: error
55+
retention-days: 5
4856
muzzle:
4957
runs-on: ubuntu-latest
5058
steps:

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.client.HttpClientRequestTracingHandler;
3737
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.client.HttpClientResponseTracingHandler;
3838
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.client.HttpClientTracingHandler;
39-
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.client.OtelHttpClientRequestTracingHandler;
4039
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.server.HttpServerBlockingRequestHandler;
4140
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.server.HttpServerRequestTracingHandler;
4241
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.server.HttpServerResponseTracingHandler;
@@ -136,13 +135,14 @@ public static void addHandler(
136135
HttpClientTracingHandler.class.getName(),
137136
new HttpClientTracingHandler());
138137

139-
// add our custom request handler to start spans with proper context propagation
138+
// add OTEL request handler to start spans
140139
pipeline.addAfter(
141140
HttpClientTracingHandler.class.getName(),
142141
io.opentelemetry.javaagent.instrumentation.netty.v4_0.client
143142
.HttpClientRequestTracingHandler.class
144143
.getName(),
145-
new OtelHttpClientRequestTracingHandler());
144+
new io.opentelemetry.javaagent.instrumentation.netty.v4_0.client
145+
.HttpClientRequestTracingHandler());
146146
} else if (handler instanceof HttpRequestEncoder) {
147147
pipeline.addLast(
148148
HttpClientRequestTracingHandler.class.getName(),

instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/OtelHttpClientRequestTracingHandler.java

Lines changed: 0 additions & 117 deletions
This file was deleted.

instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerRequestTracingHandler.java

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,8 @@
2727
import io.opentelemetry.api.common.AttributeKey;
2828
import io.opentelemetry.api.trace.Span;
2929
import io.opentelemetry.context.Context;
30-
import io.opentelemetry.context.Scope;
3130
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys;
3231
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils;
33-
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.client.OtelHttpClientRequestTracingHandler;
3432
import java.nio.charset.Charset;
3533
import java.util.HashMap;
3634
import java.util.Map;
@@ -59,54 +57,47 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) {
5957
ctx.fireChannelRead(msg);
6058
return;
6159
}
60+
Span span = Span.fromContext(context);
6261

63-
// Store the server context in our ThreadLocal for later use by client handlers
64-
// This is CRITICAL for proper context propagation to client spans
65-
OtelHttpClientRequestTracingHandler.storeServerContext(context);
62+
if (msg instanceof HttpRequest) {
63+
HttpRequest httpRequest = (HttpRequest) msg;
6664

67-
try (Scope ignored = context.makeCurrent()) {
68-
Span span = Span.fromContext(context);
69-
70-
if (msg instanceof HttpRequest) {
71-
HttpRequest httpRequest = (HttpRequest) msg;
72-
73-
Map<String, String> headersMap = headersToMap(httpRequest);
74-
if (instrumentationConfig.httpHeaders().request()) {
75-
headersMap.forEach(span::setAttribute);
76-
}
77-
// used by blocking handler
78-
channel.attr(AttributeKeys.REQUEST_HEADERS).set(headersMap);
65+
Map<String, String> headersMap = headersToMap(httpRequest);
66+
if (instrumentationConfig.httpHeaders().request()) {
67+
headersMap.forEach(span::setAttribute);
68+
}
69+
// used by blocking handler
70+
channel.attr(AttributeKeys.REQUEST_HEADERS).set(headersMap);
7971

80-
CharSequence contentType = DataCaptureUtils.getContentType(httpRequest);
81-
if (instrumentationConfig.httpBody().request()
82-
&& contentType != null
83-
&& ContentTypeUtils.shouldCapture(contentType.toString())) {
72+
CharSequence contentType = DataCaptureUtils.getContentType(httpRequest);
73+
if (instrumentationConfig.httpBody().request()
74+
&& contentType != null
75+
&& ContentTypeUtils.shouldCapture(contentType.toString())) {
8476

85-
CharSequence contentLengthHeader = DataCaptureUtils.getContentLength(httpRequest);
86-
int contentLength = ContentLengthUtils.parseLength(contentLengthHeader);
77+
CharSequence contentLengthHeader = DataCaptureUtils.getContentLength(httpRequest);
78+
int contentLength = ContentLengthUtils.parseLength(contentLengthHeader);
8779

88-
String charsetString = ContentTypeUtils.parseCharset(contentType.toString());
89-
Charset charset = ContentTypeCharsetUtils.toCharset(charsetString);
80+
String charsetString = ContentTypeUtils.parseCharset(contentType.toString());
81+
Charset charset = ContentTypeCharsetUtils.toCharset(charsetString);
9082

91-
// set the buffer to capture response body
92-
// the buffer is used byt captureBody method
93-
Attribute<BoundedByteArrayOutputStream> bufferAttr =
94-
ctx.channel().attr(AttributeKeys.REQUEST_BODY_BUFFER);
95-
bufferAttr.set(BoundedBuffersFactory.createStream(contentLength, charset));
83+
// set the buffer to capture response body
84+
// the buffer is used byt captureBody method
85+
Attribute<BoundedByteArrayOutputStream> bufferAttr =
86+
ctx.channel().attr(AttributeKeys.REQUEST_BODY_BUFFER);
87+
bufferAttr.set(BoundedBuffersFactory.createStream(contentLength, charset));
9688

97-
channel.attr(AttributeKeys.CHARSET).set(charset);
98-
}
89+
channel.attr(AttributeKeys.CHARSET).set(charset);
9990
}
91+
}
10092

101-
if ((msg instanceof HttpContent || msg instanceof ByteBuf)
102-
&& instrumentationConfig.httpBody().request()) {
103-
Charset charset = channel.attr(AttributeKeys.CHARSET).get();
104-
if (charset == null) {
105-
charset = ContentTypeCharsetUtils.getDefaultCharset();
106-
}
107-
DataCaptureUtils.captureBody(
108-
span, channel, AttributeKeys.REQUEST_BODY_BUFFER, msg, null, charset);
93+
if ((msg instanceof HttpContent || msg instanceof ByteBuf)
94+
&& instrumentationConfig.httpBody().request()) {
95+
Charset charset = channel.attr(AttributeKeys.CHARSET).get();
96+
if (charset == null) {
97+
charset = ContentTypeCharsetUtils.getDefaultCharset();
10998
}
99+
DataCaptureUtils.captureBody(
100+
span, channel, AttributeKeys.REQUEST_BODY_BUFFER, msg, null, charset);
110101
}
111102

112103
ctx.fireChannelRead(msg);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.client.HttpClientRequestTracingHandler;
3737
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.client.HttpClientResponseTracingHandler;
3838
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.client.HttpClientTracingHandler;
39-
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.client.OtelHttpClientRequestTracingHandler;
4039
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.server.HttpServerBlockingRequestHandler;
4140
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.server.HttpServerRequestTracingHandler;
4241
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.server.HttpServerResponseTracingHandler;
@@ -134,13 +133,14 @@ public static void addHandler(
134133
HttpClientTracingHandler.class.getName(),
135134
new HttpClientTracingHandler());
136135

137-
// add our custom request handler to start spans with proper context propagation
136+
// add OTEL request handler to start spans
138137
pipeline.addAfter(
139138
HttpClientTracingHandler.class.getName(),
140139
io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler
141140
.class
142141
.getName(),
143-
new OtelHttpClientRequestTracingHandler(NettyClientSingletons.instrumenter()));
142+
new io.opentelemetry.instrumentation.netty.v4_1.internal.client
143+
.HttpClientRequestTracingHandler(NettyClientSingletons.instrumenter()));
144144
} else if (handler instanceof HttpRequestEncoder) {
145145
pipeline.addLast(
146146
HttpClientRequestTracingHandler.class.getName(),

instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,16 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) {
120120
span.setStatus(code >= 100 && code < 400 ? StatusCode.UNSET : StatusCode.ERROR);
121121
}
122122
if (msg instanceof LastHttpContent) {
123+
// When we end the span, we should set the client context and client parent attr to null.
124+
// so that for the next request a new context is made and stored in channel.
125+
ctx.channel()
126+
.attr(io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys.CLIENT_CONTEXT)
127+
.set(null);
128+
ctx.channel()
129+
.attr(
130+
io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys
131+
.CLIENT_PARENT_CONTEXT)
132+
.set(null);
123133
span.end();
124134
}
125135
}

0 commit comments

Comments
 (0)