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