This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit bd8a230c1472c1e9463b880c5ee3abab8b33e721 Author: zyl <[email protected]> AuthorDate: Wed Jan 13 16:04:28 2021 +0800 SCB-2178 Improve algorithm of loadBalance strage WeightedResponse #修改测试用例,使得策略第一次会直接使用WeightedResponse --- .../servicecomb/loadbalance/WeightedResponseTimeRuleExt.java | 4 ++-- .../loadbalance/TestWeightedResponseTimeRuleExt.java | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/WeightedResponseTimeRuleExt.java b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/WeightedResponseTimeRuleExt.java index d96f6d4..7a6fe6c 100644 --- a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/WeightedResponseTimeRuleExt.java +++ b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/WeightedResponseTimeRuleExt.java @@ -36,7 +36,7 @@ public class WeightedResponseTimeRuleExt extends RoundRobinRuleExt { private LoadBalancer loadBalancer; - private double totalWeightsCache = 0d; + private double totalWeightsCache = -1d; @Override public void setLoadBalancer(LoadBalancer loadBalancer) { @@ -66,7 +66,7 @@ public class WeightedResponseTimeRuleExt extends RoundRobinRuleExt { } private List<Double> calculateTotalWeights(List<ServiceCombServer> servers) { - if (totalWeightsCache > MIN_GAP * servers.size()) { + if (Double.compare(totalWeightsCache, 0) < 0 || Double.compare(totalWeightsCache, MIN_GAP * servers.size()) > 0) { return doCalculateTotalWeights(servers); } // 10% possibilities to use weighed response rule when the normal access is very fast. diff --git a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestWeightedResponseTimeRuleExt.java b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestWeightedResponseTimeRuleExt.java index 9011f66..912d942 100644 --- a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestWeightedResponseTimeRuleExt.java +++ b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestWeightedResponseTimeRuleExt.java @@ -62,12 +62,12 @@ public class TestWeightedResponseTimeRuleExt { ServiceCombServer server = Mockito.mock(ServiceCombServer.class); Mockito.when(server.toString()).thenReturn("server " + i); servers.add(server); - loadBalancer.getLoadBalancerStats().noteResponseTime(server, 20 * Math.pow(4, i + 1)); + loadBalancer.getLoadBalancerStats().noteResponseTime(server, 20 * Math.pow(10, i + 1)); } AtomicInteger server1 = new AtomicInteger(0); AtomicInteger server2 = new AtomicInteger(0); - for (int i = 0; i < 2000; i++) { + for (int i = 0; i < 1000; i++) { if (rule.choose(servers, invocation).toString().equals("server 0")) { server1.incrementAndGet(); } else { @@ -78,11 +78,11 @@ public class TestWeightedResponseTimeRuleExt { } double percent = (double) server1.get() / (server2.get() + server1.get()); System.out.println("percent" + percent); - Assert.assertEquals("actually percent: " + percent, 0.50d < percent, percent < 0.90d); + Assert.assertEquals("actually percent: " + percent, 0.70d < percent, percent < 0.90d); server1.set(0); server2.set(0); Thread.sleep(1000); - for (int i = 0; i < 2000; i++) { + for (int i = 0; i < 1000; i++) { if (rule.choose(servers, invocation).toString().equals("server 0")) { server1.incrementAndGet(); } else { @@ -91,7 +91,7 @@ public class TestWeightedResponseTimeRuleExt { } percent = (double) server1.get() / (server2.get() + server1.get()); System.out.println("percent" + percent); - Assert.assertEquals(0.50d, percent,0); + Assert.assertEquals(0.50d, percent, 0); } @Test
