You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2019/08/08 02:15:31 UTC
[servicecomb-java-chassis] 02/02: [SCB-1308] fix randomly failure
of TestServiceCombLoadBalancerStats
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 21d16aecb2b4cadee38e13a2a12a96945df37745
Author: yhs0092 <yh...@163.com>
AuthorDate: Fri Aug 2 10:54:37 2019 +0800
[SCB-1308] fix randomly failure of TestServiceCombLoadBalancerStats
---
.../TestServiceCombLoadBalancerStats.java | 49 +++++++++++++---------
1 file changed, 30 insertions(+), 19 deletions(-)
diff --git a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombLoadBalancerStats.java b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombLoadBalancerStats.java
index fb88452..faa3d89 100644
--- a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombLoadBalancerStats.java
+++ b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombLoadBalancerStats.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.loadbalance;
import static org.awaitility.Awaitility.await;
+import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -27,24 +28,38 @@ import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
import org.apache.servicecomb.serviceregistry.cache.CacheEndpoint;
import org.apache.servicecomb.serviceregistry.consumer.MicroserviceInstancePing;
+import org.junit.AfterClass;
import org.junit.Assert;
-import org.junit.BeforeClass;
+import org.junit.Before;
import org.junit.Test;
+import mockit.Deencapsulation;
import mockit.Expectations;
import mockit.Injectable;
import mockit.Mocked;
public class TestServiceCombLoadBalancerStats {
- @BeforeClass
- public static void beforeClass() {
- // avoid mock
+ @Before
+ public void before() {
+ // Ensure clean all of mocked server cache before running testMultiThread
+ // Or the mocked server without instance will cause NPE and the target server will never get ping mark failure
+ Map<ServiceCombServer, ServiceCombServerStats> pingView =
+ Deencapsulation.getField(ServiceCombLoadBalancerStats.INSTANCE, "pingView");
+ pingView.clear();
+ ServiceCombLoadBalancerStats.INSTANCE.init();
+ }
+
+ @AfterClass
+ public static void afterClass() {
+ Map<ServiceCombServer, ServiceCombServerStats> pingView =
+ Deencapsulation.getField(ServiceCombLoadBalancerStats.INSTANCE, "pingView");
+ pingView.clear();
ServiceCombLoadBalancerStats.INSTANCE.init();
}
@Test
public void testServiceExpire(@Injectable Transport transport, @Mocked SPIServiceUtils utils, @Injectable
- MicroserviceInstancePing ping) throws Exception {
+ MicroserviceInstancePing ping) {
MicroserviceInstance instance = new MicroserviceInstance();
instance.setInstanceId("instance1");
@@ -68,9 +83,7 @@ public class TestServiceCombLoadBalancerStats {
ServiceCombServerStats stats = serviceCombLoadBalancerStats.getServiceCombServerStats(serviceCombServer);
Assert.assertEquals(serviceCombLoadBalancerStats.getPingView().size(), 1);
await().atMost(5, TimeUnit.SECONDS)
- .until(() -> {
- return serviceCombLoadBalancerStats.getPingView().size() <= 0;
- });
+ .until(() -> serviceCombLoadBalancerStats.getPingView().size() <= 0);
Assert.assertEquals(serviceCombLoadBalancerStats.getPingView().size(), 0);
System.out.print(stats.getFailedRequests());
Assert.assertTrue(stats.getFailedRequests() >= 1);
@@ -108,7 +121,7 @@ public class TestServiceCombLoadBalancerStats {
}
@Test
- public void testMiltiThread(@Injectable Transport transport) throws Exception {
+ public void testMultiThread(@Injectable Transport transport) throws Exception {
long time = System.currentTimeMillis();
MicroserviceInstance instance = new MicroserviceInstance();
instance.setInstanceId("instance2");
@@ -117,15 +130,13 @@ public class TestServiceCombLoadBalancerStats {
CountDownLatch latch = new CountDownLatch(10);
for (int i = 0; i < 10; i++) {
- new Thread() {
- public void run() {
- ServiceCombLoadBalancerStats.INSTANCE.markFailure(serviceCombServer);
- ServiceCombLoadBalancerStats.INSTANCE.markFailure(serviceCombServer);
- ServiceCombLoadBalancerStats.INSTANCE.markSuccess(serviceCombServer);
- ServiceCombLoadBalancerStats.INSTANCE.markSuccess(serviceCombServer);
- latch.countDown();
- }
- }.start();
+ new Thread(() -> {
+ ServiceCombLoadBalancerStats.INSTANCE.markFailure(serviceCombServer);
+ ServiceCombLoadBalancerStats.INSTANCE.markFailure(serviceCombServer);
+ ServiceCombLoadBalancerStats.INSTANCE.markSuccess(serviceCombServer);
+ ServiceCombLoadBalancerStats.INSTANCE.markSuccess(serviceCombServer);
+ latch.countDown();
+ }).start();
}
latch.await(30, TimeUnit.SECONDS);
Assert.assertEquals(
@@ -152,7 +163,7 @@ public class TestServiceCombLoadBalancerStats {
System.currentTimeMillis() - beginTime <= 30000) {
Thread.sleep(2000);
rate = ServiceCombLoadBalancerStats.INSTANCE.getServiceCombServerStats(serviceCombServer).getFailedRequests();
- System.out.println("XXXTTTTT1" + rate);
+ System.out.println("failedRequests: " + rate);
}
Assert.assertTrue(System.currentTimeMillis() - beginTime < 30000);