Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Jetty 9.0.4 issue (also in 9.0.5-SNAPSHOT) with Spring MVC Async (test provided)

I was able to reproduce and debug the issue. I think there is a Jetty issue. If asyncContext.dispatch() is invoked quickly before the initial request processing thread has exited, the dispatch is held as it should be, but request.isAsyncStarted returns (incorrectly) false, so remaining code on the initial request processing thread doesn't realize the async processing has started.

Not sure if it matters but in such cases I do see calls to Response.getOutputStream() from within Jetty. Here is a sample stack trace:

Response.getOutputStream() line: 700
ErrorPageErrorHandler(ErrorHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 69
ErrorPageErrorHandler.handle(String, Request, HttpServletRequest, HttpServletResponse) line: 159
Response.sendError(int, String) line: 387
Response.sendError(int) line: 339
ServletHandler.doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 582
ServletHandler(ScopedHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 138
ConstraintSecurityHandler(SecurityHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 540
SessionHandler.doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 213
WebAppContext(ContextHandler).doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 1094
ServletHandler.doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 432
SessionHandler.doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 175
WebAppContext(ContextHandler).doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 1028
WebAppContext(ScopedHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 136
ContextHandlerCollection.handle(String, Request, HttpServletRequest, HttpServletResponse) line: 258
HandlerCollection.handle(String, Request, HttpServletRequest, HttpServletResponse) line: 109
RewriteHandler(HandlerWrapper).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 97
RewriteHandler.handle(String, Request, HttpServletRequest, HttpServletResponse) line: 317
Server(HandlerWrapper).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 97
Server.handle(HttpChannel<?>) line: 445
HttpConnection$HttpChannelOverHttp(HttpChannel<T>).handle() line: 267
HttpConnection.onFillable() line: 224
AbstractConnection$ReadCallback.run() line: 358
QueuedThreadPool.runJob(Runnable) line: 601
QueuedThreadPool$3.run() line: 532
Thread.run() line: 722

After all that the dispatch is executed still and calls to servletResponse.getWriter() fail with the originally reported "IllegalStateException: STREAM".

Rossen



Back to the top