Hi
> Make sure you are using the latest 8.0.26 release. There have been some fixes
> around async dispatch. If you still see the issue then
> we'll need a test case (as simple as possible) that reproduces the issue for
> us to investigate.
I just upgraded to 8.0.26. But I see the same exception again:
Aug 26, 2015 9:42:41 AM org.apache.catalina.connector.CoyoteAdapter
asyncDispatch
SCHWERWIEGEND: Exception while processing an asynchronous request
java.lang.IllegalStateException: Calling [asyncError()] is not valid for a
request with Async state [MUST_COMPLETE]
at
org.apache.coyote.AsyncStateMachine.asyncError(AsyncStateMachine.java:351)
at
org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:820)
at org.apache.coyote.Request.action(Request.java:378)
at
org.apache.catalina.core.AsyncContextImpl.setErrorState(AsyncContextImpl.java:419)
at
org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:332)
at
org.apache.coyote.http11.AbstractHttp11Processor.asyncDispatch(AbstractHttp11Processor.java:1709)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:649)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
I *think* this happens in the following case:
1. A client opens an html file using https that gets dispatched to an Async
servlet.
2. The servlet calls startAsync, registers read/write/context handlers:
AsyncContext context = request.startAsync();
context.setTimeout( 0 );
ServletInputStream input = request.getInputStream();
ServletOutputStream output = response.getOutputStream();
ChannelProcessor processor = new ChannelProcessor( ... );
context.addListener( processor );
input.setReadListener( processor );
output.setWriteListener( processor );
3. The server writes some data to "output".
4. As the client is not sending data, "onAllDataRead" is called and the
reference to "input" is dropped.
5. "onWritePossible" is called, but there is no more data to send for now.
6. The client window is closed. (BTW: The servlet is not notified about that at
all.)
7. Later, an server event occurs and the server writes to "output" again (after
checking "isReady").
I think this is the point, the exception is logged.
I will try to create a testcase, but stripping down that code is far from easy
as it is in the middle of a framework.
I would also like to increase logging in tomcat, but I could not find out, how
to do so.
My current logging.properties consists of the following only:
handlers = java.util.logging.ConsoleHandler
.handlers = java.util.logging.ConsoleHandler
.level = TRACE
org.apache.level = TRACE
I suspect that should set any logger to TRACE, but only a few lines are
logged...
Regards,
Steffen
smime.p7s
Description: S/MIME cryptographic signature
