From 5365bc855bd0702dba850d154915134324d44000 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Fri, 10 Apr 2020 11:00:20 +0200 Subject: [PATCH] OO-4631: shuffle the servers with same load after ordering them --- .../manager/BigBlueButtonManagerImpl.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java index b0becb11098..383671f8b87 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java +++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java @@ -27,7 +27,6 @@ import java.util.Comparator; import java.util.Date; import java.util.HashSet; import java.util.List; -import java.util.Random; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -388,7 +387,23 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager, Initializ return null; } Collections.sort(serversInfos, new ServerLoadComparator()); - return serversInfos.get(0).getServer(); + + double load = serversInfos.get(0).getLoad(); + List<BigBlueButtonServerInfos> sameLoadsServer = new ArrayList<>(); + for(BigBlueButtonServerInfos serverInfos : serversInfos) { + if(serverInfos.getLoad() == load) { + sameLoadsServer.add(serverInfos); + } + } + + if(sameLoadsServer.isEmpty()) { + return serversInfos.get(0).getServer(); + } else if(sameLoadsServer.size() == 1) { + return sameLoadsServer.get(0).getServer(); + } + + Collections.shuffle(sameLoadsServer); + return sameLoadsServer.get(0).getServer(); } private List<BigBlueButtonServerInfos> getServersInfos(List<BigBlueButtonServer> servers) { @@ -795,10 +810,7 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager, Initializ public int compare(BigBlueButtonServerInfos o1, BigBlueButtonServerInfos o2) { double l1 = o1.getLoad(); double l2 = o2.getLoad(); - if (l1 == l2) { - // random order for same load for equal distribution of server usage - return (new Random().nextBoolean() ? 1 : -1); - } return Double.compare(l1, l2); + return Double.compare(l1, l2); } } -- GitLab