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/11 07:05:46 UTC

[incubator-dubbo] 01/02: Support enabled property.

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

commit e37319d3eaeeec9cf0d4b2c331e5c43b089eecf4
Author: ken.lj <ke...@gmail.com>
AuthorDate: Tue Sep 11 14:56:58 2018 +0800

    Support enabled property.
---
 .../java/org/apache/dubbo/rpc/cluster/Router.java  |  4 +
 .../dubbo/rpc/cluster/router/AbstractRouter.java   | 11 +--
 .../rpc/cluster/router/AbstractRouterRule.java     |  2 +-
 .../condition/config/ConfigConditionRouter.java    | 91 ++++++++++++++--------
 .../dubbo/rpc/cluster/router/tag/TagRouter.java    |  5 +-
 5 files changed, 69 insertions(+), 44 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 de1c251..65cf69f 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
@@ -75,4 +75,8 @@ public interface Router extends Comparable<Router> {
         return false;
     }
 
+    default int getPriority() {
+        return 0;
+    }
+
 }
\ No newline at end of file
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
index ff87e34..f814336 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
@@ -35,7 +35,6 @@ public abstract class AbstractRouter implements Router {
     protected int priority;
     protected boolean force;
     protected boolean enabled;
-    protected boolean dynamic;
     protected RouterChain routerChain;
     protected URL url;
 
@@ -57,7 +56,7 @@ public abstract class AbstractRouter implements Router {
     public <T> Map<String, List<Invoker<T>>> preRoute(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException {
         Map<String, List<Invoker<T>>> map = new HashMap<>();
 
-        if (CollectionUtils.isEmpty(invokers)) {
+        if (CollectionUtils.isEmpty(invokers) || !isEnabled()) {
             return map;
         }
 
@@ -91,14 +90,6 @@ public abstract class AbstractRouter implements Router {
         this.enabled = enabled;
     }
 
-    public boolean isDynamic() {
-        return dynamic;
-    }
-
-    public void setDynamic(boolean dynamic) {
-        this.dynamic = dynamic;
-    }
-
     public int getPriority() {
         return priority;
     }
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouterRule.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouterRule.java
index cb6fa9c..b5755e9 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouterRule.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouterRule.java
@@ -21,7 +21,7 @@ package org.apache.dubbo.rpc.cluster.router;
  */
 public abstract class AbstractRouterRule {
     private String rawRule;
-    private boolean runtime = false;
+    private boolean runtime = true;
     private boolean force = false;
     private boolean valid = true;
     private boolean enabled = true;
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 fb6e731..f6f1cc3 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
@@ -116,11 +116,15 @@ public class ConfigConditionRouter extends AbstractRouter implements Configurati
         }
 
         // only one branch, always use the failover key
-        for (Router router : appConditionRouters) {
-            invokers = router.route(invokers, url, invocation);
+        if (isAppRuleEnabled()) {
+            for (Router router : appConditionRouters) {
+                invokers = router.route(invokers, url, invocation);
+            }
         }
-        for (Router router : conditionRouters) {
-            invokers = router.route(invokers, url, invocation);
+        if (isRuleEnabled()) {
+            for (Router router : conditionRouters) {
+                invokers = router.route(invokers, url, invocation);
+            }
         }
         map.put(TreeNode.FAILOVER_KEY, invokers);
 
@@ -131,45 +135,32 @@ public class ConfigConditionRouter extends AbstractRouter implements Configurati
     public <T> List<Invoker<T>> route(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException {
         if (CollectionUtils.isEmpty(invokers)
                 || (conditionRouters.size() == 0 && appConditionRouters.size() == 0)
-                ) {
+                || !isEnabled()) {
             return invokers;
         }
 
-        for (Router router : appConditionRouters) {
-            invokers = router.route(invokers, url, invocation);
+
+        if (isAppRuleEnabled()) {
+            for (Router router : appConditionRouters) {
+                invokers = router.route(invokers, url, invocation);
+            }
         }
-        for (Router router : conditionRouters) {
-            invokers = router.route(invokers, url, invocation);
+        if (isRuleEnabled()) {
+            for (Router router : conditionRouters) {
+                invokers = router.route(invokers, url, invocation);
+            }
         }
         return invokers;
     }
 
     @Override
     public boolean isRuntime() {
-        return (routerRule != null && routerRule.isValid() && routerRule.isRuntime())
-                || (appRouterRule != null && appRouterRule.isValid() && appRouterRule.isRuntime());
-    }
-
-    private void generateConditions() {
-        if (routerRule != null && routerRule.isValid()) {
-            conditionRouters.clear();
-            routerRule.getConditions().forEach(condition -> {
-                // All sub rules have the same force, runtime value.
-                ConditionRouter subRouter = new ConditionRouter(condition, routerRule.isForce());
-                conditionRouters.add(subRouter);
-            });
-        }
+        return isRuleRuntime() || isAppRuleRuntime();
     }
 
-    private void generateAppConditions() {
-        if (appRouterRule != null && appRouterRule.isValid()) {
-            appConditionRouters.clear();
-            appRouterRule.getConditions().forEach(condition -> {
-                // All sub rules have the same force, runtime value.
-                ConditionRouter subRouter = new ConditionRouter(condition, appRouterRule.isForce());
-                appConditionRouters.add(subRouter);
-            });
-        }
+    @Override
+    public boolean isEnabled() {
+        return isAppRuleEnabled() || isRuleEnabled();
     }
 
     @Override
@@ -195,4 +186,42 @@ public class ConfigConditionRouter extends AbstractRouter implements Configurati
     public int compareTo(Router o) {
         return 0;
     }
+
+    private boolean isAppRuleEnabled() {
+        return appRouterRule != null && appRouterRule.isValid() && appRouterRule.isEnabled();
+    }
+
+    private boolean isRuleEnabled() {
+        return routerRule != null && routerRule.isValid() && routerRule.isEnabled();
+    }
+
+    private boolean isAppRuleRuntime() {
+        return appRouterRule != null && appRouterRule.isValid() && appRouterRule.isRuntime();
+    }
+
+    private boolean isRuleRuntime() {
+        return routerRule != null && routerRule.isValid() && routerRule.isRuntime();
+    }
+
+    private void generateConditions() {
+        if (routerRule != null && routerRule.isValid()) {
+            conditionRouters.clear();
+            routerRule.getConditions().forEach(condition -> {
+                // All sub rules have the same force, runtime value.
+                ConditionRouter subRouter = new ConditionRouter(condition, routerRule.isForce());
+                conditionRouters.add(subRouter);
+            });
+        }
+    }
+
+    private void generateAppConditions() {
+        if (appRouterRule != null && appRouterRule.isValid()) {
+            appConditionRouters.clear();
+            appRouterRule.getConditions().forEach(condition -> {
+                // All sub rules have the same force, runtime value.
+                ConditionRouter subRouter = new ConditionRouter(condition, appRouterRule.isForce());
+                appConditionRouters.add(subRouter);
+            });
+        }
+    }
 }
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 9d14d96..8dd11fa 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
@@ -112,7 +112,8 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
 
         checkAndInit(invokers.get(0).getUrl());
 
-        if (tagRouterRule == null || !tagRouterRule.isValid()) {
+        if (tagRouterRule == null || !tagRouterRule.isValid() || !tagRouterRule.isEnabled()) {
+
             return invokers;
         }
 
@@ -172,7 +173,7 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
 
         checkAndInit(invokers.get(0).getUrl());
 
-        if (tagRouterRule == null || !tagRouterRule.isValid() || isRuntime()) {
+        if (tagRouterRule == null || !tagRouterRule.isValid() || !tagRouterRule.isEnabled() || isRuntime()) {
             map.put(TreeNode.FAILOVER_KEY, invokers);
             return map;
         }