https://issues.apache.org/bugzilla/show_bug.cgi?id=57489

            Bug ID: 57489
           Summary: java.util.concurrent.ExecutionException:
                    java.io.IOException: Key must be cancelled
           Product: Tomcat 8
           Version: 8.0.15
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: major
          Priority: P2
         Component: WebSocket
          Assignee: dev@tomcat.apache.org
          Reporter: wodenc...@gmail.com

Hello all,

we have been trying to track down the cause of some strange exceptions produced
by our application, that are related to the websocket connection somehow being
dropped.

This happens in multiple deployments of the application, but this one in
particular is on a Windows 8 Machine.

2015-01-22 15:14:09,599 CST WARN  [null] - Duplicate resource
7143de60-6212-4a06-8e2b-ce266c1d9769. Could be caused by a dead connection not
detected by your server. Replacing the old one with the fresh one 
2015-01-22 15:14:09,599 CST ERROR [null] - java.io.IOException:  
     at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:276)
 
     at
org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:536) 
     at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:464) 
     at org.apache.tomcat.websocket.WsSession.close(WsSession.java:441) 
     at org.apache.tomcat.websocket.WsSession.close(WsSession.java:435) 
     at
org.atmosphere.container.version.JSR356WebSocket.close(JSR356WebSocket.java:142)
 
     at org.atmosphere.websocket.WebSocket.close(WebSocket.java:273) 
     at
org.atmosphere.cpr.AtmosphereResponse.close(AtmosphereResponse.java:848) 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.cancel(AtmosphereResourceImpl.java:779)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.close(AtmosphereResourceImpl.java:855)
 
     at
com.vaadin.server.communication.AtmospherePushConnection.disconnect(AtmospherePushConnection.java:305)
 
     at
com.vaadin.server.communication.PushHandler.disconnect(PushHandler.java:430) 
     at
com.vaadin.server.communication.PushHandler.onDisconnect(PushHandler.java:330) 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.onDisconnect(AtmosphereResourceImpl.java:715)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:618)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:598)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.dirtyClose(AtmosphereResourceImpl.java:864)
 
     at
org.atmosphere.cpr.DefaultBroadcaster.addAtmosphereResource(DefaultBroadcaster.java:1370)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.suspend(AtmosphereResourceImpl.java:408)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.suspend(AtmosphereResourceImpl.java:324)
 
     at com.vaadin.server.communication.PushHandler$2.run(PushHandler.java:131) 
     at
com.vaadin.server.communication.PushHandler.callWithUi(PushHandler.java:253) 
     at
com.vaadin.server.communication.PushHandler.access$200(PushHandler.java:56) 
     at
com.vaadin.server.communication.PushHandler$1.onRequest(PushHandler.java:74) 
     at
org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:205) 
     at
org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:104)
 
     at
org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:66)
 
     at
org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2075)
 
     at
org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:570)
 
     at
org.atmosphere.websocket.DefaultWebSocketProcessor.open(DefaultWebSocketProcessor.java:215)
 
     at org.atmosphere.container.JSR356Endpoint.onOpen(JSR356Endpoint.java:198) 
     at
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.init(WsHttpUpgradeHandler.java:138)
 
     at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
 
     at
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
 
     at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)
 
     at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)
 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 
     at java.lang.Thread.run(Unknown Source) 
Caused by: java.util.concurrent.ExecutionException: java.io.IOException: Key
must be cancelled 
     at
org.apache.tomcat.websocket.FutureToSendHandler.get(FutureToSendHandler.java:102)
 
     at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:269)
 
     ... 39 more 
Caused by: java.io.IOException: Key must be cancelled 
     at
org.apache.coyote.http11.upgrade.NioServletOutputStream.doWriteInternal(NioServletOutputStream.java:84)
 
     at
org.apache.coyote.http11.upgrade.NioServletOutputStream.doWrite(NioServletOutputStream.java:61)
 
     at
org.apache.coyote.http11.upgrade.AbstractServletOutputStream.writeInternal(AbstractServletOutputStream.java:162)
 
     at
org.apache.coyote.http11.upgrade.AbstractServletOutputStream.write(AbstractServletOutputStream.java:129)
 
     at
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.onWritePossible(WsRemoteEndpointImplServer.java:99)
 
     at
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:81)
 
     at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:444)
 
     at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessage(WsRemoteEndpointImplBase.java:335)
 
     at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:264)
 
     ... 39 more 
Caused by: java.util.concurrent.ExecutionException: 
     at
org.apache.tomcat.websocket.FutureToSendHandler.get(FutureToSendHandler.java:102)
 
     at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:269)
 
     at
org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:536) 
     at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:464) 
     at org.apache.tomcat.websocket.WsSession.close(WsSession.java:441) 
     at org.apache.tomcat.websocket.WsSession.close(WsSession.java:435) 
     at
org.atmosphere.container.version.JSR356WebSocket.close(JSR356WebSocket.java:142)
 
     at org.atmosphere.websocket.WebSocket.close(WebSocket.java:273) 
     at
org.atmosphere.cpr.AtmosphereResponse.close(AtmosphereResponse.java:848) 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.cancel(AtmosphereResourceImpl.java:779)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.close(AtmosphereResourceImpl.java:855)
 
     at
com.vaadin.server.communication.AtmospherePushConnection.disconnect(AtmospherePushConnection.java:305)
 
     at
com.vaadin.server.communication.PushHandler.disconnect(PushHandler.java:430) 
     at
com.vaadin.server.communication.PushHandler.onDisconnect(PushHandler.java:330) 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.onDisconnect(AtmosphereResourceImpl.java:715)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:618)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:598)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.dirtyClose(AtmosphereResourceImpl.java:864)
 
     at
org.atmosphere.cpr.DefaultBroadcaster.addAtmosphereResource(DefaultBroadcaster.java:1370)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.suspend(AtmosphereResourceImpl.java:408)
 
     at
org.atmosphere.cpr.AtmosphereResourceImpl.suspend(AtmosphereResourceImpl.java:324)
 
     at com.vaadin.server.communication.PushHandler$2.run(PushHandler.java:131) 
     at
com.vaadin.server.communication.PushHandler.callWithUi(PushHandler.java:253) 
     at
com.vaadin.server.communication.PushHandler.access$200(PushHandler.java:56) 
     at
com.vaadin.server.communication.PushHandler$1.onRequest(PushHandler.java:74) 
     at
org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:205) 
     at
org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:104)
 
     at
org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:66)
 
     at
org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2075)
 
     at
org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:570)
 
     at
org.atmosphere.websocket.DefaultWebSocketProcessor.open(DefaultWebSocketProcessor.java:215)
 
     at org.atmosphere.container.JSR356Endpoint.onOpen(JSR356Endpoint.java:198) 
     at
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.init(WsHttpUpgradeHandler.java:138)
 
     at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
 
     at
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
 
     at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)
 
     at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)
 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 
     at java.lang.Thread.run(Unknown Source) 
Caused by: java.io.IOException: Key must be cancelled 
     at
org.apache.coyote.http11.upgrade.NioServletOutputStream.doWriteInternal(NioServletOutputStream.java:84)
 
     at
org.apache.coyote.http11.upgrade.NioServletOutputStream.doWrite(NioServletOutputStream.java:61)
 
     at
org.apache.coyote.http11.upgrade.AbstractServletOutputStream.writeInternal(AbstractServletOutputStream.java:162)
 
     at
org.apache.coyote.http11.upgrade.AbstractServletOutputStream.write(AbstractServletOutputStream.java:129)
 
     at
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.onWritePossible(WsRemoteEndpointImplServer.java:99)
 
     at
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:81)
 
     at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:444)
 
     at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessage(WsRemoteEndpointImplBase.java:335)
 
     at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:264)
 
     ... 39 more

Java 8
NIO connector

I reported this to the Atmosphere maintainer, who responded with the following:

jfarcand     
9:53 AM (6 hours ago)
Hi,
please file a bug in Tomcat, this is clearly an issue with NIO/Tomcat
implementation. It may happens less frequently with 2.2.5-SNAPSHOT, but still
the issue is with Tomcat.

Thanks

-- Jeanfrancois
On 2015-01-23 10:47 AM, Chris Boyd wrote:
Caused by: java.io.IOException: Key must be cancelled 
     at
org.apache.coyote.http11.upgrade.NioServletOutputStream.doWriteInternal(NioServletOutputStream.java:84)
 
     at
org.apache.coyote.http11.upgrade.NioServletOutputStream.doWrite(NioServletOutputStream.java:61)
 
     at
org.apache.coyote.http11.upgrade.AbstractServletOutputStream.writeInternal(AbstractServletOutputStream.java:162)

-- 
You are receiving this mail because:
You are the assignee for the bug.

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

Reply via email to