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

Reply via email to