Maxim Solodovnik created WICKET-6782:
----------------------------------------
Summary: WebSocket onClose/onError/onAbort is not being called
Key: WICKET-6782
URL: https://issues.apache.org/jira/browse/WICKET-6782
Project: Wicket
Issue Type: Bug
Components: wicket-native-websocket
Affects Versions: 9.0.0-M5
Reporter: Maxim Solodovnik
Assignee: Maxim Solodovnik
Fix For: 9.0.0-M6
WebSocket connection is closed on page reload,
but none of my onClose/onError/onAbort handlers are being called
{code:java}
ERROR 05-01 16:10:21.740 o.a.w.p.w.j.WicketEndpoint:100 [EventExec-e2-t9] - An
error occurred in web socket connection with id : 10
java.io.IOException: java.io.IOException: Broken pipe
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:315)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:258)
at
org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:612)
at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:497)
at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:459)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:313)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:191)
at
org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
at
org.apache.wicket.protocol.ws.javax.JavaxWebSocketConnection.sendMessage(JavaxWebSocketConnection.java:81)
at
org.apache.openmeetings.core.util.WebSocketHelper.lambda$sendClient$1(WebSocketHelper.java:75)
at
org.apache.openmeetings.core.util.WebSocketHelper.lambda$sendClient$2(WebSocketHelper.java:94)
at
org.apache.wicket.protocol.ws.WebSocketSettings$SameThreadExecutor.run(WebSocketSettings.java:393)
at
org.apache.openmeetings.core.util.WebSocketHelper.sendClient(WebSocketHelper.java:94)
at
org.apache.openmeetings.core.util.WebSocketHelper.sendClient(WebSocketHelper.java:73)
at
org.apache.openmeetings.core.remote.KurentoHandler.sendClient(KurentoHandler.java:209)
at
org.apache.openmeetings.core.remote.KStream.lambda$createEndpoint$5(KStream.java:224)
at
org.kurento.client.internal.client.RemoteObjectInvocationHandler.propagateEventTo(RemoteObjectInvocationHandler.java:281)
at
org.kurento.client.internal.client.RemoteObjectInvocationHandler$1.onEvent(RemoteObjectInvocationHandler.java:208)
at
org.kurento.client.internal.client.RemoteObject.fireEvent(RemoteObject.java:345)
at
org.kurento.client.internal.client.RomClientObjectManager.processEvent(RomClientObjectManager.java:58)
at
org.kurento.client.internal.transport.jsonrpc.RomClientJsonRpcClient.processEvent(RomClientJsonRpcClient.java:206)
at
org.kurento.client.internal.transport.jsonrpc.RomClientJsonRpcClient.access$000(RomClientJsonRpcClient.java:74)
at
org.kurento.client.internal.transport.jsonrpc.RomClientJsonRpcClient$1.handleRequest(RomClientJsonRpcClient.java:182)
at
org.kurento.jsonrpc.internal.JsonRpcHandlerManager.handleRequest(JsonRpcHandlerManager.java:142)
at
org.kurento.jsonrpc.client.AbstractJsonRpcClientWebSocket$15.run(AbstractJsonRpcClientWebSocket.java:577)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.io.IOException: Broken pipe
at java.base/sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:113)
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:79)
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:50)
at
java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:466)
at
org.apache.tomcat.util.net.SecureNioChannel.flush(SecureNioChannel.java:145)
at
org.apache.tomcat.util.net.SecureNioChannel.write(SecureNioChannel.java:851)
at
org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1491)
at
org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1015)
at
org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1426)
at
org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1352)
at
org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1323)
at
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:90)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:499)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)
... 25 common frames omitted
DEBUG 05-01 16:10:21.741 o.a.w.p.w.a.AbstractWebSocketProcessor:299
[EventExec-e2-t9] - Either there is no
connection(org.apache.wicket.protocol.ws.javax.JavaxWebSocketConnection@43539f89)
or it is closed.
DEBUG 05-01 16:10:21.741 o.a.w.p.w.j.WicketEndpoint:82 [EventExec-e2-t9] - Web
Socket connection with id '10' has been closed with code '1006' and reason:
Broken pipe
{code}
Here are some more details on this issue
In our code I'm using IWebSocketConnection.sendMessage(String) method
The call is wrapped with try/catch to correctly handle any exception [1]
The problem is hard to reproduce due to IOException should happen exactly at
time of sendMessage do it's job
(in original report author hammer the page with F5 until error will occur)
As a result my try/catch doesn't play, I got "zombie" IWebSocketConnection in
IWebSocketConnectionRegistry
and incorrect application state due to I'm expecting to get disconnect from
onClose/onError/onAbort of my WebSocketBehavior
[1]
[https://github.com/apache/openmeetings/blob/master/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java#L76]
--
This message was sent by Atlassian Jira
(v8.3.4#803005)