From c43f211dd1de022accf76dd99d7c5f77686a1511 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Sun, 29 Mar 2020 21:22:41 +0200 Subject: [PATCH] openvidu-server: SessionManager concurrency fix for session not active. Catch onSessionClosed event exceptions --- .../java/io/openvidu/server/core/SessionManager.java | 12 ++++++++++-- .../openvidu/server/rpc/RpcNotificationService.java | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java index 6b950d79..5f4e60fc 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java @@ -286,7 +286,10 @@ public abstract class SessionManager { public Session storeSessionNotActive(Session sessionNotActive) { final String sessionId = sessionNotActive.getSessionId(); - this.sessionsNotActive.put(sessionId, sessionNotActive); + if (this.sessionsNotActive.putIfAbsent(sessionId, sessionNotActive) != null) { + log.warn("Concurrent initialization of session {}", sessionId); + return this.sessionsNotActive.get(sessionId); + } this.initializeCollections(sessionId); return sessionNotActive; } @@ -537,7 +540,12 @@ public abstract class SessionManager { final String mediaNodeId = session.getMediaNodeId(); if (session.close(reason)) { - sessionEventsHandler.onSessionClosed(session.getSessionId(), reason); + try { + sessionEventsHandler.onSessionClosed(session.getSessionId(), reason); + } catch (Exception e) { + log.error("Error recording 'sessionDestroyed' event for session {}: {} - {}", session.getSessionId(), + e.getClass().getName(), e.getMessage()); + } } this.cleanCollections(session.getSessionId()); diff --git a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcNotificationService.java b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcNotificationService.java index 81e77e9a..75d31ad9 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcNotificationService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcNotificationService.java @@ -43,7 +43,7 @@ public class RpcNotificationService { RpcConnection connection = new RpcConnection(t.getSession()); RpcConnection oldConnection = rpcConnections.putIfAbsent(participantPrivateId, connection); if (oldConnection != null) { - log.warn("Concurrent initialization of rpcSession #{}", participantPrivateId); + log.warn("Concurrent initialization of rpcSession {}", participantPrivateId); connection = oldConnection; } return connection;