diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-06-02 14:43:08 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-06-02 14:43:08 +0000 |
commit | 6daca073b0134833d0fc0a1c6b4f662c658a52d8 (patch) | |
tree | 7af2d41d8ba48dcc81a9fb44f1e286edaacc2d26 | |
parent | 6dd95e3b312f027bef0feee9f9272ff82caf2324 (diff) |
Ensure we can not pick the same candidate twice. This make it react a lot faster especially with few nodes.
2 files changed, 15 insertions, 12 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/AdaptiveLoadBalancer.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/AdaptiveLoadBalancer.java index 9d5ccf9f71d..6a68a6e122b 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/AdaptiveLoadBalancer.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/AdaptiveLoadBalancer.java @@ -30,14 +30,17 @@ class AdaptiveLoadBalancer extends LoadBalancer { entry = choices.get(0); metrics = getNodeMetrics(entry); } else { - int candidateA = 0; - int candidateB = 1; + int candA = 0; + int candB = 1; if (choices.size() > 2) { - candidateA = random.nextInt(choices.size()); - candidateB = random.nextInt(choices.size()); + candA = random.nextInt(choices.size()); + candB = random.nextInt(choices.size()); + while (candB == candA) { + candB = random.nextInt(choices.size()); + } } - entry = choices.get(candidateA); - Mirror.Entry entryB = choices.get(candidateB); + entry = choices.get(candA); + Mirror.Entry entryB = choices.get(candB); metrics = getNodeMetrics(entry); NodeMetrics metricsB = getNodeMetrics(entryB); if (metrics.pending() > metricsB.pending()) { diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancerTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancerTestCase.java index 9afbeecec83..088259b74ac 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancerTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancerTestCase.java @@ -101,13 +101,13 @@ public class LoadBalancerTestCase { sumPending += metrics.pending(); } assertEquals(9999, sentSum); - assertEquals(2636, sumPending); - assertEquals(1781, weights.get(0).sent()); - assertEquals(5585, weights.get(1).sent()); - assertEquals(2633, weights.get(2).sent()); - assertEquals(1318, weights.get(0).pending()); + assertEquals(2039, sumPending); + assertEquals(1332, weights.get(0).sent()); + assertEquals(6645, weights.get(1).sent()); + assertEquals(2022, weights.get(2).sent()); + assertEquals(1020, weights.get(0).pending()); assertEquals(0, weights.get(1).pending()); - assertEquals(1318, weights.get(2).pending()); + assertEquals(1019, weights.get(2).pending()); } @Test |