Hello,
We deployed OV in EC2 instance and without using docker. Below are the steps to reproduce the issue:
- User 1 and 2 join a session using two different web applications running same version of ov browser-client (v2.15)
- User 1 ends the session (
session.disconnect()
), which broadcasts streamDestroyed
event. This event is handled on both ends.
- User 1 side calls
removeUserData
immediately, when streamDestroyed
is received
- User 2 side calls
session.disconnect()
and removeUserData
after 3 sec. when streamDestroyed
is received
Below is the error I see on the server side:
> [INFO] 2020-07-27 11:51:51,027 [SessionHandler-plarhqau87eqnupk3fjqc5lg0a-e118-t0] io.openvidu.server.kurento.core.KurentoParticipant - PARTICIPANT con_Lv7gJ4xlDY: Is now receiving video from con_PyWSmqnPCC in room shahbaz987
> [ERROR] 2020-07-27 11:51:51,030 [SessionHandler-plarhqau87eqnupk3fjqc5lg0a-e118-t0] org.kurento.jsonrpc.internal.ws.JsonRpcWebSocketHandler - Trying to send a message to a closed session
> [ERROR] 2020-07-27 11:51:51,042 [AbstractJsonRpcClientWebSocket-reqResEventExec-e2-t353] io.openvidu.server.rpc.RpcNotificationService - Exception sending notification 'iceCandidate': {"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:2 1 TCP 1015022079 18.190.24.147 9 typ host tcptype active"} to participant with private id plarhqau87eqnupk3fjqc5lg0a
> org.kurento.commons.exception.KurentoException: Exception while sending message '{"method":"iceCandidate","params":{"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:2 1 TCP 1015022079 18.190.24.147 9 typ host tcptype active"},"jsonrpc":"2.0"}' to websocket with native sessionId 'b753b2f3-0f1c-e644-7acf-c045b3857b3c'
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.sendRequestWebSocket(WebSocketServerSession.java:123)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.access$000(WebSocketServerSession.java:49)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession$1.internalSendRequest(WebSocketServerSession.java:74)
> at org.kurento.jsonrpc.internal.JsonRpcRequestSenderHelper.sendRequest(JsonRpcRequestSenderHelper.java:75)
> at org.kurento.jsonrpc.internal.JsonRpcRequestSenderHelper.sendNotification(JsonRpcRequestSenderHelper.java:156)
> at org.kurento.jsonrpc.internal.server.ServerSession.sendNotification(ServerSession.java:121)
> at io.openvidu.server.rpc.RpcNotificationService.sendNotification(RpcNotificationService.java:105)
> at io.openvidu.server.kurento.core.KurentoSessionEventsHandler.onIceCandidate(KurentoSessionEventsHandler.java:44)
> at io.openvidu.server.kurento.core.KurentoSession.sendIceCandidate(KurentoSession.java:163)
> at io.openvidu.server.kurento.core.KurentoParticipant.sendIceCandidate(KurentoParticipant.java:414)
> at io.openvidu.server.kurento.endpoint.MediaEndpoint.lambda$registerOnIceCandidateEventListener$0(MediaEndpoint.java:540)
> 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.lang.IllegalStateException: Message will not be sent because the WebSocket session has been closed
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:430)
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250)
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:223)
> at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49)
> at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:215)
> at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:106)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.sendRequestWebSocket(WebSocketServerSession.java:119)
> ... 24 common frames omitted
> [ERROR] 2020-07-27 11:51:51,050 [AbstractJsonRpcClientWebSocket-reqResEventExec-e2-t353] io.openvidu.server.rpc.RpcNotificationService - Exception sending notification 'iceCandidate': {"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:3 1 TCP 1010827775 18.190.24.147 63428 typ host tcptype passive"} to participant with private id plarhqau87eqnupk3fjqc5lg0a
> org.kurento.commons.exception.KurentoException: Exception while sending message '{"method":"iceCandidate","params":{"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:3 1 TCP 1010827775 18.190.24.147 63428 typ host tcptype passive"},"jsonrpc":"2.0"}' to websocket with native sessionId 'b753b2f3-0f1c-e644-7acf-c045b3857b3c'
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.sendRequestWebSocket(WebSocketServerSession.java:123)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.access$000(WebSocketServerSession.java:49)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession$1.internalSendRequest(WebSocketServerSession.java:74)
> at org.kurento.jsonrpc.internal.JsonRpcRequestSenderHelper.sendRequest(JsonRpcRequestSenderHelper.java:75)
> at org.kurento.jsonrpc.internal.JsonRpcRequestSenderHelper.sendNotification(JsonRpcRequestSenderHelper.java:156)
> at org.kurento.jsonrpc.internal.server.ServerSession.sendNotification(ServerSession.java:121)
> at io.openvidu.server.rpc.RpcNotificationService.sendNotification(RpcNotificationService.java:105)
> at io.openvidu.server.kurento.core.KurentoSessionEventsHandler.onIceCandidate(KurentoSessionEventsHandler.java:44)
> at io.openvidu.server.kurento.core.KurentoSession.sendIceCandidate(KurentoSession.java:163)
> at io.openvidu.server.kurento.core.KurentoParticipant.sendIceCandidate(KurentoParticipant.java:414)
> at io.openvidu.server.kurento.endpoint.MediaEndpoint.lambda$registerOnIceCandidateEventListener$0(MediaEndpoint.java:540)
> 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.lang.IllegalStateException: The remote endpoint was in state [TEXT_PARTIAL_WRITING] which is an invalid state for called method
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1234)
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textPartialStart(WsRemoteEndpointImplBase.java:1191)
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:222)
> at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49)
> at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:215)
> at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:106)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.sendRequestWebSocket(WebSocketServerSession.java:119)
> ... 24 common frames omitted
> [ERROR] 2020-07-27 11:51:51,052 [AbstractJsonRpcClientWebSocket-reqResEventExec-e2-t353] io.openvidu.server.rpc.RpcNotificationService - Exception sending notification 'iceCandidate': {"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:1 2 UDP 2013266430 18.190.24.147 16626 typ host"} to participant with private id plarhqau87eqnupk3fjqc5lg0a
> org.kurento.commons.exception.KurentoException: Exception while sending message '{"method":"iceCandidate","params":{"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:1 2 UDP 2013266430 18.190.24.147 16626 typ host"},"jsonrpc":"2.0"}' to websocket with native sessionId 'b753b2f3-0f1c-e644-7acf-c045b3857b3c'
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.sendRequestWebSocket(WebSocketServerSession.java:123)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.access$000(WebSocketServerSession.java:49)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession$1.internalSendRequest(WebSocketServerSession.java:74)
> at org.kurento.jsonrpc.internal.JsonRpcRequestSenderHelper.sendRequest(JsonRpcRequestSenderHelper.java:75)
> at org.kurento.jsonrpc.internal.JsonRpcRequestSenderHelper.sendNotification(JsonRpcRequestSenderHelper.java:156)
> at org.kurento.jsonrpc.internal.server.ServerSession.sendNotification(ServerSession.java:121)
> at io.openvidu.server.rpc.RpcNotificationService.sendNotification(RpcNotificationService.java:105)
> at io.openvidu.server.kurento.core.KurentoSessionEventsHandler.onIceCandidate(KurentoSessionEventsHandler.java:44)
> at io.openvidu.server.kurento.core.KurentoSession.sendIceCandidate(KurentoSession.java:163)
> at io.openvidu.server.kurento.core.KurentoParticipant.sendIceCandidate(KurentoParticipant.java:414)
> at io.openvidu.server.kurento.endpoint.MediaEndpoint.lambda$registerOnIceCandidateEventListener$0(MediaEndpoint.java:540)
> 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.lang.IllegalStateException: The remote endpoint was in state [TEXT_PARTIAL_WRITING] which is an invalid state for called method
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1234)
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textPartialStart(WsRemoteEndpointImplBase.java:1191)
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:222)
> at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49)
> at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:215)
> at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:106)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.sendRequestWebSocket(WebSocketServerSession.java:119)
> ... 24 common frames omitted
> [ERROR] 2020-07-27 11:51:51,055 [AbstractJsonRpcClientWebSocket-reqResEventExec-e2-t353] io.openvidu.server.rpc.RpcNotificationService - Exception sending notification 'iceCandidate': {"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:2 2 TCP 1015022078 18.190.24.147 9 typ host tcptype active"} to participant with private id plarhqau87eqnupk3fjqc5lg0a
> org.kurento.commons.exception.KurentoException: Exception while sending message '{"method":"iceCandidate","params":{"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:2 2 TCP 1015022078 18.190.24.147 9 typ host tcptype active"},"jsonrpc":"2.0"}' to websocket with native sessionId 'b753b2f3-0f1c-e644-7acf-c045b3857b3c'
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.sendRequestWebSocket(WebSocketServerSession.java:123)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.access$000(WebSocketServerSession.java:49)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession$1.internalSendRequest(WebSocketServerSession.java:74)
> at org.kurento.jsonrpc.internal.JsonRpcRequestSenderHelper.sendRequest(JsonRpcRequestSenderHelper.java:75)
> at org.kurento.jsonrpc.internal.JsonRpcRequestSenderHelper.sendNotification(JsonRpcRequestSenderHelper.java:156)
> at org.kurento.jsonrpc.internal.server.ServerSession.sendNotification(ServerSession.java:121)
> at io.openvidu.server.rpc.RpcNotificationService.sendNotification(RpcNotificationService.java:105)
> at io.openvidu.server.kurento.core.KurentoSessionEventsHandler.onIceCandidate(KurentoSessionEventsHandler.java:44)
> at io.openvidu.server.kurento.core.KurentoSession.sendIceCandidate(KurentoSession.java:163)
> at io.openvidu.server.kurento.core.KurentoParticipant.sendIceCandidate(KurentoParticipant.java:414)
> at io.openvidu.server.kurento.endpoint.MediaEndpoint.lambda$registerOnIceCandidateEventListener$0(MediaEndpoint.java:540)
> 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.lang.IllegalStateException: The remote endpoint was in state [TEXT_PARTIAL_WRITING] which is an invalid state for called method
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1234)
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textPartialStart(WsRemoteEndpointImplBase.java:1191)
> at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:222)
> at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49)
> at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:215)
> at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:106)
> at org.kurento.jsonrpc.internal.ws.WebSocketServerSession.sendRequestWebSocket(WebSocketServerSession.java:119)
> ... 24 common frames omitted
> [ERROR] 2020-07-27 11:51:51,056 [AbstractJsonRpcClientWebSocket-reqResEventExec-e2-t353] io.openvidu.server.rpc.RpcNotificationService - Exception sending notification 'iceCandidate': {"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:3 2 TCP 1010827774 18.190.24.147 40860 typ host tcptype passive"} to participant with private id plarhqau87eqnupk3fjqc5lg0a
> org.kurento.commons.exception.KurentoException: Exception while sending message '{"method":"iceCandidate","params":{"senderConnectionId":"con_PyWSmqnPCC","endpointName":"con_Lv7gJ4xlDY_str_CAM_IPTp_con_PyWSmqnPCC","sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:3 2 TCP 1010827774 18.190.24.147 40860 typ host tcptype passive"},"jsonrpc":"2.0"}' to websocket with native sessionId 'b753b2f3-0f1c-e644-7acf-c045b3857b3c'