Skip to content

Commit 940bce8

Browse files
authored
Use context instead of request attributes for servlet async instrumentation (#13493)
1 parent 33024dc commit 940bce8

File tree

21 files changed

+158
-113
lines changed

21 files changed

+158
-113
lines changed

instrumentation/jetty/jetty-11.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/v11_0/Jetty11HandlerAdvice.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public static void onEnter(
4545
scope = context.makeCurrent();
4646

4747
// Must be set here since Jetty handlers can use startAsync outside of servlet scope.
48-
helper().setAsyncListenerResponse(request, response);
48+
helper().setAsyncListenerResponse(context, response);
4949

5050
HttpServerResponseCustomizerHolder.getCustomizer()
5151
.customize(context, response, Jetty11ResponseMutator.INSTANCE);

instrumentation/jetty/jetty-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/v12_0/Jetty12Helper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import io.opentelemetry.context.Context;
99
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1010
import io.opentelemetry.javaagent.bootstrap.servlet.AppServerBridge;
11-
import io.opentelemetry.javaagent.instrumentation.servlet.ServletHelper;
11+
import io.opentelemetry.javaagent.bootstrap.servlet.ServletAsyncContext;
1212
import javax.annotation.Nullable;
1313
import org.eclipse.jetty.server.HttpStream;
1414
import org.eclipse.jetty.server.Request;
@@ -54,7 +54,7 @@ public void end(Context context, Request request, Response response, @Nullable T
5454
error = AppServerBridge.getException(context);
5555
}
5656
if (error == null) {
57-
error = (Throwable) request.getAttribute(ServletHelper.ASYNC_EXCEPTION_ATTRIBUTE);
57+
error = ServletAsyncContext.getAsyncException(context);
5858
}
5959

6060
instrumenter.end(context, request, response, error);

instrumentation/jetty/jetty-8.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/v8_0/Jetty8HandlerAdvice.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public static void onEnter(
4545
scope = context.makeCurrent();
4646

4747
// Must be set here since Jetty handlers can use startAsync outside of servlet scope.
48-
helper().setAsyncListenerResponse(request, response);
48+
helper().setAsyncListenerResponse(context, response);
4949

5050
HttpServerResponseCustomizerHolder.getCustomizer()
5151
.customize(context, response, Jetty8ResponseMutator.INSTANCE);

instrumentation/jetty/jetty-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/common/JettyHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void end(
4141
}
4242

4343
ServletResponseContext<RESPONSE> responseContext = new ServletResponseContext<>(response);
44-
if (throwable != null || mustEndOnHandlerMethodExit(request)) {
44+
if (throwable != null || mustEndOnHandlerMethodExit(context)) {
4545
instrumenter.end(context, requestContext, responseContext, throwable);
4646
}
4747
}

instrumentation/liberty/liberty-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/LibertyHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void end(
4040
}
4141

4242
ServletResponseContext<RESPONSE> responseContext = new ServletResponseContext<>(response);
43-
if (throwable != null || mustEndOnHandlerMethodExit(request)) {
43+
if (throwable != null || mustEndOnHandlerMethodExit(context)) {
4444
instrumenter.end(context, requestContext, responseContext, throwable);
4545
}
4646
}

instrumentation/liberty/liberty-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/LibertyWebAppInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public static void onEnter() {
125125

126126
// Must be set here since Liberty RequestProcessors can use startAsync outside of servlet
127127
// scope.
128-
helper().setAsyncListenerResponse(requestInfo.getRequest(), requestInfo.getResponse());
128+
helper().setAsyncListenerResponse(context, requestInfo.getResponse());
129129

130130
HttpServerResponseCustomizerHolder.getCustomizer()
131131
.customize(context, requestInfo.getResponse(), Servlet3Accessor.INSTANCE);

instrumentation/servlet/servlet-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/Servlet3Advice.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public static void onEnter(
6060
requestContext = new ServletRequestContext<>(httpServletRequest, servletOrFilter);
6161
if (attachedContext == null && helper().shouldStart(currentContext, requestContext)) {
6262
context = helper().start(currentContext, requestContext);
63-
helper().setAsyncListenerResponse(httpServletRequest, (HttpServletResponse) response);
63+
helper().setAsyncListenerResponse(context, (HttpServletResponse) response);
6464

6565
contextToUpdate = context;
6666
} else if (attachedContext != null

instrumentation/servlet/servlet-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/Servlet3AsyncContextStartAdvice.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,13 @@
77

88
import static io.opentelemetry.javaagent.instrumentation.servlet.v3_0.Servlet3Singletons.helper;
99

10-
import javax.servlet.AsyncContext;
11-
import javax.servlet.ServletRequest;
12-
import javax.servlet.http.HttpServletRequest;
1310
import net.bytebuddy.asm.Advice;
1411

1512
@SuppressWarnings("unused")
1613
public class Servlet3AsyncContextStartAdvice {
1714

1815
@Advice.OnMethodEnter(suppress = Throwable.class)
19-
public static void start(
20-
@Advice.This AsyncContext asyncContext,
21-
@Advice.Argument(value = 0, readOnly = false) Runnable runnable) {
22-
ServletRequest request = asyncContext.getRequest();
23-
if (request instanceof HttpServletRequest) {
24-
runnable = helper().wrapAsyncRunnable((HttpServletRequest) request, runnable);
25-
}
16+
public static void start(@Advice.Argument(value = 0, readOnly = false) Runnable runnable) {
17+
runnable = helper().wrapAsyncRunnable(runnable);
2618
}
2719
}

instrumentation/servlet/servlet-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/Servlet3AsyncStartAdvice.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static io.opentelemetry.javaagent.instrumentation.servlet.v3_0.Servlet3Singletons.helper;
99

1010
import io.opentelemetry.javaagent.bootstrap.CallDepth;
11+
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1112
import javax.servlet.AsyncContext;
1213
import javax.servlet.ServletRequest;
1314
import javax.servlet.http.HttpServletRequest;
@@ -36,9 +37,7 @@ public static void startAsyncExit(
3637
if (servletRequest instanceof HttpServletRequest) {
3738
HttpServletRequest request = (HttpServletRequest) servletRequest;
3839

39-
if (!helper().isAsyncListenerAttached(request)) {
40-
helper().attachAsyncListener(request);
41-
}
40+
helper().attachAsyncListener(request, Java8BytecodeBridge.currentContext());
4241
}
4342
}
4443
}

instrumentation/servlet/servlet-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v5_0/async/AsyncContextStartAdvice.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,13 @@
77

88
import static io.opentelemetry.javaagent.instrumentation.servlet.v5_0.Servlet5Singletons.helper;
99

10-
import jakarta.servlet.AsyncContext;
11-
import jakarta.servlet.ServletRequest;
12-
import jakarta.servlet.http.HttpServletRequest;
1310
import net.bytebuddy.asm.Advice;
1411

1512
@SuppressWarnings("unused")
1613
public class AsyncContextStartAdvice {
1714

1815
@Advice.OnMethodEnter(suppress = Throwable.class)
19-
public static void start(
20-
@Advice.This AsyncContext asyncContext,
21-
@Advice.Argument(value = 0, readOnly = false) Runnable runnable) {
22-
ServletRequest request = asyncContext.getRequest();
23-
if (request instanceof HttpServletRequest) {
24-
runnable = helper().wrapAsyncRunnable((HttpServletRequest) request, runnable);
25-
}
16+
public static void start(@Advice.Argument(value = 0, readOnly = false) Runnable runnable) {
17+
runnable = helper().wrapAsyncRunnable(runnable);
2618
}
2719
}

0 commit comments

Comments
 (0)