You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/12/23 05:25:19 UTC

[dubbo] branch 3.0 updated: Fix ut in MeshRuleRouterTest (#9473)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 4b2a2af  Fix ut in MeshRuleRouterTest (#9473)
4b2a2af is described below

commit 4b2a2afb8901469eaeb4448c04b98b311432fffa
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu Dec 23 13:25:05 2021 +0800

    Fix ut in MeshRuleRouterTest (#9473)
---
 .../cluster/router/mesh/route/MeshRuleRouter.java  |  5 ++-
 .../router/mesh/route/MeshRuleRouterTest.java      | 52 +++++++++++-----------
 2 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
index 59168b5..a2c337a 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
@@ -218,7 +218,7 @@ public abstract class MeshRuleRouter<T> extends AbstractStateRouter<T> implement
         do {
             BitList<Invoker<T>> result = meshRuleCache.getSubsetInvokers(appName, subset);
 
-            if (CollectionUtils.isNotEmpty(result) && !availableInvokers.and(result).isEmpty()) {
+            if (CollectionUtils.isNotEmpty(result) && !availableInvokers.clone().and(result).isEmpty()) {
                 return subset;
             }
 
@@ -229,6 +229,9 @@ public abstract class MeshRuleRouter<T> extends AbstractStateRouter<T> implement
             }
             dubboDestination = dubboRouteDestination.getDestination();
 
+            if (dubboDestination == null) {
+                break;
+            }
             subset = dubboDestination.getSubset();
         } while (true);
 
diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouterTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouterTest.java
index 5fde444..feaff0b 100644
--- a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouterTest.java
+++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouterTest.java
@@ -264,8 +264,8 @@ public class MeshRuleRouterTest {
     public void testRoute1() {
         StandardMeshRuleRouter<Object> meshRuleRouter = new StandardMeshRuleRouter<>(url);
         BitList<Invoker<Object>> invokers = new BitList<>(Arrays.asList(createInvoker(""), createInvoker("unknown"), createInvoker("app1")));
-        assertEquals(invokers, meshRuleRouter.route(invokers, null, null, false).getResult());
-        assertEquals("MeshRuleCache has not been built. Skip route.", meshRuleRouter.route(invokers, null, null, true).getMessage());
+        assertEquals(invokers, meshRuleRouter.route(invokers.clone(), null, null, false).getResult());
+        assertEquals("MeshRuleCache has not been built. Skip route.", meshRuleRouter.route(invokers.clone(), null, null, true).getMessage());
     }
 
     @Test
@@ -292,21 +292,21 @@ public class MeshRuleRouterTest {
 
         rpcInvocation.setServiceName("ccc");
         rpcInvocation.setAttachment("trafficLabel", "xxx");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().size());
-        assertEquals(isolation, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().get(0));
-        assertEquals("Match App: app1 Subset: isolation ", meshRuleRouter.route(invokers, null, rpcInvocation, true).getMessage());
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().size());
+        assertEquals(isolation, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().get(0));
+        assertEquals("Match App: app1 Subset: isolation ", meshRuleRouter.route(invokers.clone(), null, rpcInvocation, true).getMessage());
 
         rpcInvocation.setAttachment("trafficLabel", "testing-trunk");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().size());
-        assertEquals(testingTrunk, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().size());
+        assertEquals(testingTrunk, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setAttachment("trafficLabel", null);
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().size());
-        assertEquals(testing, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().size());
+        assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setServiceName("aaa");
-        assertEquals(invokers, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult());
-        assertEquals("Empty protection after routed.", meshRuleRouter.route(invokers, null, rpcInvocation, true).getMessage());
+        assertEquals(invokers, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult());
+        assertEquals("Empty protection after routed.", meshRuleRouter.route(invokers.clone(), null, rpcInvocation, true).getMessage());
 
         rules = new LinkedList<>();
         rules.add(yaml.load(rule1));
@@ -315,23 +315,23 @@ public class MeshRuleRouterTest {
 
         rpcInvocation.setServiceName("ccc");
         rpcInvocation.setAttachment("trafficLabel", "xxx");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().size());
-        assertEquals(isolation, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().size());
+        assertEquals(isolation, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setAttachment("trafficLabel", "testing-trunk");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().size());
-        assertEquals(testingTrunk, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().size());
+        assertEquals(testingTrunk, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setAttachment("trafficLabel", "testing");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().size());
-        assertEquals(testing, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().size());
+        assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setServiceName("aaa");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().size());
-        assertEquals(testing, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().size());
+        assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setAttachment("trafficLabel",null);
-        assertEquals(invokers, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult());
+        assertEquals(invokers, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult());
 
         rules = new LinkedList<>();
         rules.add(yaml.load(rule1));
@@ -343,7 +343,7 @@ public class MeshRuleRouterTest {
         int testingCount = 0;
         int isolationCount = 0;
         for (int i = 0; i < 1000; i++) {
-            BitList<Invoker<Object>> result = meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult();
+            BitList<Invoker<Object>> result = meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult();
             assertEquals(1, result.size());
             if (result.contains(testing)) {
                 testingCount++;
@@ -355,15 +355,15 @@ public class MeshRuleRouterTest {
 
         invokers.removeAll(Arrays.asList(isolation, testingTrunk));
         for (int i = 0; i < 1000; i++) {
-            assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().size());
-            assertEquals(testing, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().get(0));
+            assertEquals(1, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().size());
+            assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().get(0));
         }
 
         meshRuleRouter.notify(invokers);
 
         for (int i = 0; i < 1000; i++) {
-            assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().size());
-            assertEquals(testing, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult().get(0));
+            assertEquals(1, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().size());
+            assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult().get(0));
         }
 
         Invoker<Object> mock = createInvoker(Collections.singletonMap("env-sign", "mock"));
@@ -371,7 +371,7 @@ public class MeshRuleRouterTest {
 
         meshRuleRouter.notify(invokers);
         invokers.removeAll(Arrays.asList(isolation, testingTrunk, testing));
-        assertEquals(invokers, meshRuleRouter.route(invokers, null, rpcInvocation, false).getResult());
+        assertEquals(invokers, meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult());
 
     }
 }