eclipse-ee4j / eclipse-ee4j/jersey
AsyncContext.complete() called multiple times when using @Suspend and AsyncResponse
- Dominant language
- Java
- Stars
- 730
- Forks
- 382
- PR merge metrics
- No merged PRs in 30d
Description
We’ve run into a bug with @Suspend and AsyncResponse in Jersey. It seems that in some cases the underlying response is resumed multiple times, which causes problems for servers like Jetty which recycle response objects. Please see the test case ([https://github.com/cberner/presto/blob/jetty_ise/presto-tests/src/main/java/com/facebook/presto/tests/TestJettyISE.java](https://github.com/cberner/presto/blob/jetty_ise/presto-tests/src/main/java/com/facebook/presto/tests/TestJettyISE.java)) which results in the following error, and often a 500 being returned to the client, after running for a few minutes:
2016-06-22 00:13:50 WARNING Attempt to release request processing resources has failed for a request.
java.lang.IllegalStateException: AsyncContext completed and/or Request lifecycle recycled
at org.eclipse.jetty.server.AsyncContextState.state(AsyncContextState.java:54)
at org.eclipse.jetty.server.AsyncContextState.complete(AsyncContextState.java:99)
at org.glassfish.jersey.servlet.async.AsyncContextDelegateProviderImpl$ExtensionImpl.complete(AsyncContextDelegateProviderImpl.java:125)
at org.glassfish.jersey.servlet.internal.ResponseWriter.commit(ResponseWriter.java:197)
at org.glassfish.jersey.server.ContainerResponse.close(ContainerResponse.java:413)
at org.glassfish.jersey.server.ServerRuntime$Responder.release(ServerRuntime.java:810)
at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:435)
at org.glassfish.jersey.server.ServerRuntime$AsyncResponder$3.run(ServerRuntime.java:934)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:966)
at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:922)
at com.facebook.presto.tests.TestJettyISE$MyTestResource.lambda$getResults$0(TestJettyISE.java:144)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
#### Affected Versions
[2.23.1]
Contributor guide
Assessment
This issue has not been assessed yet.