summaryrefslogtreecommitdiffstats
path: root/documentapi
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-06-02 14:43:08 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-06-02 14:43:08 +0000
commit6daca073b0134833d0fc0a1c6b4f662c658a52d8 (patch)
tree7af2d41d8ba48dcc81a9fb44f1e286edaacc2d26 /documentapi
parent6dd95e3b312f027bef0feee9f9272ff82caf2324 (diff)
Ensure we can not pick the same candidate twice. This make it react a lot faster especially with few nodes.
Diffstat (limited to 'documentapi')
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/AdaptiveLoadBalancer.java15
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancerTestCase.java12
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