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 c3721c83b82a1e837a0d533ee41a8b5c7e138454
Author: zyl <[email protected]>
AuthorDate: Wed Jan 13 17:10:00 2021 +0800

    SCB-2178 Improve algorithm of loadBalance strage WeightedResponse
---
 .../TestWeightedResponseTimeRuleExt.java           | 57 ++++++++++++----------
 1 file changed, 32 insertions(+), 25 deletions(-)

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 3b21a70..b8d03bc 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
@@ -17,15 +17,15 @@
 
 package org.apache.servicecomb.loadbalance;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-
 import org.apache.servicecomb.core.Invocation;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
 public class TestWeightedResponseTimeRuleExt {
   @Test
   public void testRoundRobin() {
@@ -58,40 +58,47 @@ public class TestWeightedResponseTimeRuleExt {
     LoadBalancer loadBalancer = new LoadBalancer(rule, "testService");
     List<ServiceCombServer> servers = new ArrayList<>();
     Invocation invocation = Mockito.mock(Invocation.class);
-    for (int i = 0; i < 2; i++) {
-      ServiceCombServer server = Mockito.mock(ServiceCombServer.class);
-      Mockito.when(server.toString()).thenReturn("server " + i);
-      servers.add(server);
-      loadBalancer.getLoadBalancerStats().noteResponseTime(server, 20 * 
Math.pow(20, i + 1));
-    }
 
-    AtomicInteger server1 = new AtomicInteger(0);
-    AtomicInteger server2 = new AtomicInteger(0);
+    ServiceCombServer server1 = Mockito.mock(ServiceCombServer.class);
+    Mockito.when(server1.toString()).thenReturn("server " + 0);
+    servers.add(server1);
+    ServiceCombServer server2 = Mockito.mock(ServiceCombServer.class);
+    Mockito.when(server2.toString()).thenReturn("server " + 1);
+    servers.add(server2);
+
+    AtomicInteger serverCounter1 = new AtomicInteger(0);
+    AtomicInteger serverCounter2 = new AtomicInteger(0);
     for (int i = 0; i < 1000; i++) {
+      loadBalancer.getLoadBalancerStats().noteResponseTime(server1, 20);
+      loadBalancer.getLoadBalancerStats().noteResponseTime(server2, 400);
+      Thread.sleep(1);
       if (rule.choose(servers, invocation).toString().equals("server 0")) {
-        server1.incrementAndGet();
+        serverCounter1.incrementAndGet();
       } else {
-        server2.incrementAndGet();
+        serverCounter2.incrementAndGet();
       }
-      //此处是为了控制请求的时间窗口大小,使得策略中1分钟大小的时间窗口生效,并产生变化
-      Thread.sleep(1);
     }
-    double percent = (double) server1.get() / (server2.get() + server1.get());
+    double percent = (double) serverCounter1.get() / (serverCounter2.get() + 
serverCounter1.get());
     System.out.println("percent" + percent);
-    Assert.assertEquals("actually percent: " + percent, 0.70d < percent, 
percent < 0.90d);
-    server1.set(0);
-    server2.set(0);
-    Thread.sleep(1000);
+    Assert.assertTrue(percent > 0.60d);
+    Assert.assertTrue(percent < 0.90d);
+    serverCounter1.set(0);
+    serverCounter2.set(0);
+
+    Thread.sleep(2000);
     for (int i = 0; i < 1000; i++) {
+      loadBalancer.getLoadBalancerStats().noteResponseTime(server1, 20);
+      loadBalancer.getLoadBalancerStats().noteResponseTime(server2, 20);
+      Thread.sleep(1);
       if (rule.choose(servers, invocation).toString().equals("server 0")) {
-        server1.incrementAndGet();
+        serverCounter1.incrementAndGet();
       } else {
-        server2.incrementAndGet();
+        serverCounter2.incrementAndGet();
       }
     }
-    percent = (double) server1.get() / (server2.get() + server1.get());
+    percent = (double) serverCounter1.get() / (serverCounter2.get() + 
serverCounter1.get());
     System.out.println("percent" + percent);
-    Assert.assertEquals(0.50d, percent, 0);
+    Assert.assertEquals(0.50d, percent, 0.2);
   }
 
   @Test

Reply via email to