From ae071a4629c01ea0eedec056e4e855f9138a6cc1 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Mon, 21 Oct 2019 10:29:36 +0200 Subject: [PATCH] openvidu-server: filter quarantined nodes when getting less loaded one --- .../server/kurento/core/KurentoSessionManager.java | 2 +- .../java/io/openvidu/server/kurento/kms/KmsManager.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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 5a9ed38c..5ac12482 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 @@ -91,7 +91,7 @@ public class KurentoSessionManager extends SessionManager { Kms lessLoadedKms = null; try { - lessLoadedKms = this.kmsManager.getLessLoadedKms(); + lessLoadedKms = this.kmsManager.getLessLoadedAndNoQuarantinedKms(); } 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 1f182908..3409511c 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 @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -99,6 +100,12 @@ public abstract class KmsManager { return Collections.min(getKmsLoads()).kms; } + public synchronized Kms getLessLoadedAndNoQuarantinedKms() throws NoSuchElementException { + List kmsLoads = getKmsLoads().stream().filter(kmsLoad -> !kmsLoad.kms.isQuarantined()) + .collect(Collectors.toList()); + return Collections.min(kmsLoads).kms; + } + public Kms getKms(String kmsId) { return this.kmss.get(kmsId); }