Hi Mark,

> -----Original Message-----
> From: Mark Thomas [mailto:ma...@apache.org]
> Sent: Tuesday, October 1, 2013 8:39 PM
> To: Tomcat Developers List
> Subject: 8.0.x / 7.0.x progress
> 
> Pulling together information from multiple threads:
> 
> 8.0.x trunk appears to be stable (i.e. no longer crashes) but the
> FormAuthenticator unit tests are very slow (24 minutes). This needs to
> be resolved.

I noticed something strange with the Snake WebSocket example when running 
current trunk (r1528211) on Windows (x64) with 64-bit version of tcnative-1.dll 
(version 1.1.29 - from Mladen: 
http://people.apache.org/~mturk/native/tomcat-native-win32-x86_64-r1528132.zip).

If I open the snake.xhtml with Firefox and with Chrome, press the "up" key so 
that the snakes move, and then close Chrome, Tomcat does not seem to realize 
that the underlying TCP connection of the WebSocket connection has been closed, 
and the snake keeps running. However if I do this with IE 10 or Firefox (open 
snake.xhtml, press key, close the browser) then the corresponding snakes 
disappear. (Maybe Chrome does not send some "Close Websocket" message before 
closing/aborting the TCP connection.)

When I do this a few times, then eventually when I open snake.xhtml in Chrome, 
it will only display "Info: WebSocket closed." (and no snakes are visible), and 
Tomcat prints following exceptions:

01-Oct-2013 23:16:00.340 SEVERE [http-apr-8080-exec-1] 
org.apache.tomcat.websocket.pojo.PojoEndpointBase.onError No error handling 
configured for [websocket.snake.SnakeAnnotation] and the following error 
occurred
 java.io.IOException: java.util.concurrent.ExecutionException: 
java.io.EOFException
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:226)
        at 
org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:474)
        at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:438)
        at 
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.close(WsHttpUpgradeHandler.java:172)
        at 
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.access$200(WsHttpUpgradeHandler.java:45)
        at 
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler$WsReadListener.onDataAvailable(WsHttpUpgradeHandler.java:194)
        at 
org.apache.coyote.http11.upgrade.AbstractServletInputStream.onDataAvailable(AbstractServletInputStream.java:169)
        at 
org.apache.coyote.http11.upgrade.AbstractProcessor.upgradeDispatch(AbstractProcessor.java:95)
        at 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:638)
        at 
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:282)
        at 
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2399)
        at 
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2388)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:724)
Caused by: java.util.concurrent.ExecutionException: java.io.EOFException
        at 
org.apache.tomcat.websocket.FutureToSendHandler.get(FutureToSendHandler.java:102)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:222)
        ... 14 more
Caused by: java.io.EOFException
        at 
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doClose(WsRemoteEndpointImplServer.java:121)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.close(WsRemoteEndpointImplBase.java:536)
        at 
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.onWritePossible(WsRemoteEndpointImplServer.java:102)
        at 
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:71)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:358)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessage(WsRemoteEndpointImplBase.java:259)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:217)
        ... 14 more


Rarely then I also get the following exception in SnakeTimer.broadcast(String 
message), but this is probably caused by a concurrency issue (e.g. if the timer 
starts to loop over the snakes to send some messages, but at the same time one 
of the websocket connections has been closed which is handled by another 
thread):

01-Oct-2013 23:16:00.346 SEVERE [SnakeTimer Timer] 
websocket.snake.SnakeTimer$1.run Caught to prevent timer from shutting down
 java.lang.IllegalStateException: Message will not be sent because the 
WebSocket session has been closed
[...]


If I try the same with the NIO connector, then the behavior is different: The 
corresponding snake disappears if I close Chrome, and each time I close Chrome 
I immediately get the exception (but not if I close Firefox or IE):

01-Oct-2013 23:24:02.589 SEVERE [http-nio-8080-exec-1] 
org.apache.tomcat.websocket.pojo.PojoEndpointBase.onError No error handling 
configured for [websocket.snake.SnakeAnnotation] and the following error 
occurred
 java.io.IOException: java.util.concurrent.ExecutionException: 
java.io.EOFException
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:226)
        at 
org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:474)
        at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:438)
        at 
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.close(WsHttpUpgradeHandler.java:172)
        at 
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.access$200(WsHttpUpgradeHandler.java:45)
        at 
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler$WsReadListener.onDataAvailable(WsHttpUpgradeHandler.java:198)
        at 
org.apache.coyote.http11.upgrade.AbstractServletInputStream.onDataAvailable(AbstractServletInputStream.java:169)
        at 
org.apache.coyote.http11.upgrade.AbstractProcessor.upgradeDispatch(AbstractProcessor.java:95)
        at 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:638)
        at 
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
        at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1618)
        at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1576)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:724)
Caused by: java.util.concurrent.ExecutionException: java.io.EOFException
        at 
org.apache.tomcat.websocket.FutureToSendHandler.get(FutureToSendHandler.java:102)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:222)
        ... 14 more
Caused by: java.io.EOFException
        at 
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doClose(WsRemoteEndpointImplServer.java:121)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.close(WsRemoteEndpointImplBase.java:536)
        at 
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.onWritePossible(WsRemoteEndpointImplServer.java:102)
        at 
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:71)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:358)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessage(WsRemoteEndpointImplBase.java:259)
        at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:217)
        ... 14 more


>From what I read from the exceptions, I think that these exceptions themselves 
>are OK since the connection closed abnormally and no Error handling is 
>configured - but it seems that the APR connector does not handle the 
>connection abort correctly.

The behavior with 8.0.0-RC1 seems to be the same.


Regards,
Konstantin Preißer


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to