You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2018/09/07 11:03:55 UTC

[incubator-dubbo] branch dev-metadata updated: Fix problem when rule need to run at runtime.

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

liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/dev-metadata by this push:
     new a5695af  Fix problem when rule need to run at runtime.
a5695af is described below

commit a5695af6873f3319644ed4d6b662054a76f6e2cf
Author: ken.lj <ke...@gmail.com>
AuthorDate: Fri Sep 7 19:03:35 2018 +0800

    Fix problem when rule need to run at runtime.
---
 .../src/main/java/org/apache/dubbo/rpc/cluster/Router.java          | 3 ++-
 .../java/org/apache/dubbo/rpc/cluster/router/InvokerTreeCache.java  | 4 ++++
 .../apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java  | 6 ------
 .../rpc/cluster/router/condition/config/ConfigConditionRouter.java  | 3 +++
 .../org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java    | 6 ------
 .../java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java     | 6 +++++-
 6 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
index a9f2e79..de1c251 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcException;
+import org.apache.dubbo.rpc.cluster.router.TreeNode;
 
 import java.util.List;
 import java.util.Map;
@@ -67,7 +68,7 @@ public interface Router extends Comparable<Router> {
     }
 
     default String getKey() {
-        return "";
+        return TreeNode.FAILOVER_KEY;
     }
 
     default boolean isForce() {
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/InvokerTreeCache.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/InvokerTreeCache.java
index 8575760..7a497a3 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/InvokerTreeCache.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/InvokerTreeCache.java
@@ -101,6 +101,10 @@ public class InvokerTreeCache<T> {
             // FIXME check force logic here
             String forceKey = "force." + failoverNode.getConditionKey();
             if (Boolean.valueOf(invocation.getAttachment(forceKey, url.getParameter(forceKey, "false")))) {
+                /**
+                 * This may mistakely return empty list for runtime routers
+                 * see {@link org.apache.dubbo.rpc.cluster.router.tag.TagRouter.getKey()} for the workaround.
+                 */
                 return Collections.emptyList();
             }
             return getInvokers(failoverNode, url, invocation);
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
index 176aef9..f1fc6c7 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
@@ -28,7 +28,6 @@ import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.cluster.Router;
 import org.apache.dubbo.rpc.cluster.router.AbstractRouter;
-import org.apache.dubbo.rpc.cluster.router.TreeNode;
 
 import java.text.ParseException;
 import java.util.ArrayList;
@@ -190,11 +189,6 @@ public class ConditionRouter extends AbstractRouter implements Comparable<Router
     }
 
     @Override
-    public String getKey() {
-        return TreeNode.FAILOVER_KEY;
-    }
-
-    @Override
     public URL getUrl() {
         return url;
     }
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ConfigConditionRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ConfigConditionRouter.java
index 68c51d6..fb6e731 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ConfigConditionRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ConfigConditionRouter.java
@@ -174,6 +174,9 @@ public class ConfigConditionRouter extends AbstractRouter implements Configurati
 
     @Override
     public String getKey() {
+        if (isRuntime()) {
+            return super.getKey();
+        }
         return TreeNode.FAILOVER_KEY;
     }
 
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
index 25cf160..514ebda 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
@@ -26,7 +26,6 @@ import org.apache.dubbo.rpc.RpcContext;
 import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.cluster.Router;
 import org.apache.dubbo.rpc.cluster.router.AbstractRouter;
-import org.apache.dubbo.rpc.cluster.router.TreeNode;
 
 import javax.script.Bindings;
 import javax.script.Compilable;
@@ -122,11 +121,6 @@ public class ScriptRouter extends AbstractRouter {
     }
 
     @Override
-    public String getKey() {
-        return TreeNode.FAILOVER_KEY;
-    }
-
-    @Override
     public boolean isForce() {
         return url.getParameter(Constants.FORCE_KEY, false);
     }
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
index 008c1e5..4638815 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
@@ -131,7 +131,7 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
             }
             // dynamic tag group doesn't have any item about the requested app OR it's null after filtered by dynamic tag group but force=false.
             // check static tag
-            result = filterInvoker(invokers, invoker -> invoker.getUrl().getParameter(Constants.TAG_KEY).equals(tag));
+            result = filterInvoker(invokers, invoker -> tag.equals(invoker.getUrl().getParameter(Constants.TAG_KEY)));
             if (CollectionUtils.isNotEmpty(result) || url.getParameter(Constants.FORCE_USE_TAG, true)) {
                 return result;
             }
@@ -219,7 +219,11 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
         return tagRouterRule != null && tagRouterRule.isRuntime();
     }
 
+    @Override
     public String getKey() {
+        if (isRuntime()) {
+            return super.getKey();
+        }
         return Constants.TAG_KEY;
     }