From 96440b9f26794e9e754261328dd20eec2c72061e Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Thu, 2 Apr 2020 01:49:51 +0200 Subject: [PATCH] openvidu-server: filter non connected KMSs when getting less loaded --- .../server/kurento/core/KurentoSessionManager.java | 2 +- .../java/io/openvidu/server/kurento/kms/KmsManager.java | 9 +++++---- .../server/recording/service/RecordingManager.java | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index 47c69588..aeea47bb 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -111,7 +111,7 @@ public class KurentoSessionManager extends SessionManager { lockAcquired = true; Kms lessLoadedKms = null; try { - lessLoadedKms = this.kmsManager.getLessLoadedAndRunningKms(); + lessLoadedKms = this.kmsManager.getLessLoadedConnectedAndRunningKms(); } catch (NoSuchElementException e) { // Restore session not active this.cleanCollections(sessionId); diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java index 3c2a1cb1..97593a21 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java @@ -102,9 +102,9 @@ public abstract class KmsManager { return this.kmss.remove(kmsId); } - public synchronized Kms getLessLoadedAndRunningKms() throws NoSuchElementException { - List kmsLoads = getKmsLoads().stream() - .filter(kmsLoad -> mediaNodeStatusManager.isRunning(kmsLoad.kms.getId())).collect(Collectors.toList()); + public synchronized Kms getLessLoadedConnectedAndRunningKms() throws NoSuchElementException { + List kmsLoads = getKmsLoads().stream().filter(kmsLoad -> kmsLoad.kms.isKurentoClientConnected() + && mediaNodeStatusManager.isRunning(kmsLoad.kms.getId())).collect(Collectors.toList()); return Collections.min(kmsLoads).kms; } @@ -183,7 +183,8 @@ public abstract class KmsManager { @Override public void connected() { final Kms kms = kmss.get(kmsId); - // TODO: This should be done here instead of after KurentoClient.create method returns + // TODO: This should be done here instead of after KurentoClient.create method + // returns // kms.setKurentoClientConnected(true); // kms.setTimeOfKurentoClientConnection(System.currentTimeMillis()); log.info("Kurento Client is now connected to KMS {} with uri {}", kmsId, kms.getUri()); diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java index 76936104..b2117810 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java @@ -629,7 +629,7 @@ public class RecordingManager { log.warn("No KMSs were defined in kms.uris array. Recording path check aborted"); } else { - MediaPipeline pipeline = this.kmsManager.getLessLoadedAndRunningKms().getKurentoClient() + MediaPipeline pipeline = this.kmsManager.getLessLoadedConnectedAndRunningKms().getKurentoClient() .createMediaPipeline(); RecorderEndpoint recorder = new RecorderEndpoint.Builder(pipeline, "file://" + testFilePath).build();