Merge pull request #357 from DataDog/ark/servlet-async

Close scope for async servlet requests
This commit is contained in:
Andrew Kent 2018-06-17 23:44:24 -07:00 committed by GitHub
commit 519f15bcc6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 1 deletions

View File

@ -128,6 +128,7 @@ public final class FilterChain3Instrumentation extends Instrumenter.Configurable
final AtomicBoolean activated = new AtomicBoolean(false);
// what if async is already finished? This would not be called
req.getAsyncContext().addListener(new TagSettingAsyncListener(activated, span));
scope.close();
} else {
Tags.HTTP_STATUS.set(span, resp.getStatus());
scope.close();

View File

@ -120,6 +120,7 @@ public final class HttpServlet3Instrumentation extends Instrumenter.Configurable
final AtomicBoolean activated = new AtomicBoolean(false);
// what if async is already finished? This would not be called
req.getAsyncContext().addListener(new TagSettingAsyncListener(activated, span));
scope.close();
} else {
Tags.HTTP_STATUS.set(span, resp.getStatus());
scope.close();

View File

@ -122,6 +122,31 @@ class JettyServlet3Test extends AgentTestRunner {
"sync" | "Hello Sync"
}
def "servlet instrumentation clears state after async request"() {
setup:
def request = new Request.Builder()
.url("http://localhost:$PORT/async")
.get()
.build()
def numTraces = 5
for (int i = 0; i < numTraces; ++i) {
client.newCall(request).execute()
}
expect:
assertTraces(writer, numTraces) {
for (int i = 0; i < numTraces; ++i) {
trace(i, 1) {
span(0) {
serviceName "unnamed-java-app"
operationName "servlet.request"
resourceName "GET /async"
}
}
}
}
}
def "test #path error servlet call"() {
setup:
def request = new Request.Builder()

View File

@ -39,7 +39,8 @@ public class ListWriter extends CopyOnWriteArrayList<List<DDSpan>> implements Wr
latches.add(latch);
}
if (!latch.await(20, TimeUnit.SECONDS)) {
throw new TimeoutException("Timeout waiting for " + number + " trace(s).");
throw new TimeoutException(
"Timeout waiting for " + number + " trace(s). ListWriter.size() == " + size());
}
}