You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Maxim Solodovnik (Jira)" <ji...@apache.org> on 2020/05/06 08:25:00 UTC

[jira] [Created] (WICKET-6782) WebSocket onClose/onError/onAbort is not being called

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)