Skip to content
This repository was archived by the owner on Dec 23, 2023. It is now read-only.

Commit 4f0af55

Browse files
authored
create scope for servlet request. (#1699)
1 parent a1bea83 commit 4f0af55

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

contrib/http_servlet/src/main/java/io/opencensus/contrib/http/servlet/OcHttpServletFilter.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import com.google.common.annotations.VisibleForTesting;
2020
import io.opencensus.common.ExperimentalApi;
21+
import io.opencensus.common.Scope;
2122
import io.opencensus.contrib.http.HttpRequestContext;
2223
import io.opencensus.contrib.http.HttpServerHandler;
2324
import io.opencensus.trace.Tracing;
@@ -96,7 +97,12 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
9697
handler.handleMessageReceived(context, length);
9798
}
9899

99-
chain.doFilter(httpReq, httpResp);
100+
Scope scope = Tracing.getTracer().withSpan(handler.getSpanFromContext(context));
101+
try {
102+
chain.doFilter(httpReq, httpResp);
103+
} finally {
104+
scope.close();
105+
}
100106

101107
if (httpReq.isAsyncStarted()) {
102108
OcHttpServletListener listener = new OcHttpServletListener(handler, context);

contrib/http_servlet/src/main/java/io/opencensus/contrib/http/servlet/OcHttpServletListener.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919
import static com.google.common.base.Preconditions.checkNotNull;
2020

2121
import io.opencensus.common.ExperimentalApi;
22+
import io.opencensus.common.Scope;
2223
import io.opencensus.contrib.http.HttpRequestContext;
2324
import io.opencensus.contrib.http.HttpServerHandler;
25+
import io.opencensus.trace.Tracing;
2426
import java.io.Closeable;
27+
import javax.annotation.Nullable;
2528
import javax.servlet.AsyncContext;
2629
import javax.servlet.AsyncEvent;
2730
import javax.servlet.AsyncListener;
@@ -37,6 +40,7 @@ public final class OcHttpServletListener implements Closeable, AsyncListener {
3740
private final HttpRequestContext context;
3841
private final HttpServerHandler<HttpServletRequest, HttpServletResponse, HttpServletRequest>
3942
handler;
43+
@Nullable private Scope scope = null;
4044

4145
OcHttpServletListener(
4246
HttpServerHandler<HttpServletRequest, HttpServletResponse, HttpServletRequest> handler,
@@ -56,6 +60,9 @@ public void onComplete(AsyncEvent event) {
5660
if (response instanceof HttpServletResponse) {
5761
OcHttpServletUtil.recordMessageSentEvent(handler, context, (HttpServletResponse) response);
5862
}
63+
if (scope != null) {
64+
scope.close();
65+
}
5966
handler.handleEnd(
6067
context,
6168
(HttpServletRequest) event.getSuppliedRequest(),
@@ -66,6 +73,9 @@ public void onComplete(AsyncEvent event) {
6673

6774
@Override
6875
public void onError(AsyncEvent event) {
76+
if (scope != null) {
77+
scope.close();
78+
}
6979
handler.handleEnd(
7080
context,
7181
(HttpServletRequest) event.getSuppliedRequest(),
@@ -74,15 +84,21 @@ public void onError(AsyncEvent event) {
7484
}
7585

7686
@Override
87+
@SuppressWarnings(
88+
"MustBeClosedChecker") // Close will happen in onTimeout or onError or onComplete method
7789
public void onStartAsync(AsyncEvent event) {
7890
AsyncContext eventAsyncContext = event.getAsyncContext();
7991
if (eventAsyncContext != null) {
92+
this.scope = Tracing.getTracer().withSpan(handler.getSpanFromContext(context));
8093
eventAsyncContext.addListener(this, event.getSuppliedRequest(), event.getSuppliedResponse());
8194
}
8295
}
8396

8497
@Override
8598
public void onTimeout(AsyncEvent event) {
99+
if (scope != null) {
100+
scope.close();
101+
}
86102
handler.handleEnd(
87103
context,
88104
(HttpServletRequest) event.getSuppliedRequest(),

0 commit comments

Comments
 (0)