From 91d24ccd42bf5fcfd63f0c653e2cb2a1947488e6 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 10 Sep 2021 13:10:52 +0200 Subject: [PATCH] openvidu-server: improved concurrent Session initializaion --- .../io/openvidu/server/core/SessionManager.java | 13 ++++++++++--- .../openvidu/server/rest/SessionRestController.java | 12 ++++++++---- 2 files changed, 18 insertions(+), 7 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 f54d64b1..0e352cfd 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 @@ -304,18 +304,25 @@ public abstract class SessionManager { return null; } + /** + * @return null if concurrent storing of session + */ public Session storeSessionNotActive(String sessionId, SessionProperties sessionProperties) { Session sessionNotActive = this .storeSessionNotActive(new Session(sessionId, sessionProperties, openviduConfig, recordingManager)); - sessionEventsHandler.onSessionCreated(sessionNotActive); - return sessionNotActive; + if (sessionNotActive == null) { + return null; + } else { + sessionEventsHandler.onSessionCreated(sessionNotActive); + return sessionNotActive; + } } public Session storeSessionNotActive(Session sessionNotActive) { final String sessionId = sessionNotActive.getSessionId(); if (this.sessionsNotActive.putIfAbsent(sessionId, sessionNotActive) != null) { log.warn("Concurrent initialization of session {}", sessionId); - return this.sessionsNotActive.get(sessionId); + return null; } this.initializeCollections(sessionId); return sessionNotActive; diff --git a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java index 1574514f..523738cc 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java @@ -121,11 +121,15 @@ public class SessionRestController { } Session sessionNotActive = sessionManager.storeSessionNotActive(sessionId, sessionProperties); - log.info("New session {} created {}", sessionId, this.sessionManager.getSessionsWithNotActive().stream() - .map(Session::getSessionId).collect(Collectors.toList()).toString()); - return new ResponseEntity<>(sessionNotActive.toJson(false, false).toString(), RestUtils.getResponseHeaders(), - HttpStatus.OK); + if (sessionNotActive == null) { + return new ResponseEntity<>(HttpStatus.CONFLICT); + } else { + log.info("New session {} created {}", sessionId, this.sessionManager.getSessionsWithNotActive().stream() + .map(Session::getSessionId).collect(Collectors.toList()).toString()); + return new ResponseEntity<>(sessionNotActive.toJson(false, false).toString(), + RestUtils.getResponseHeaders(), HttpStatus.OK); + } } @RequestMapping(value = "/sessions/{sessionId}", method = RequestMethod.GET)