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 b01e251a541fb73c41fcc3e458efbf65c36fdde7
Author: ken.lj <ken.lj...@gmail.com>
AuthorDate: Tue Dec 4 13:45:10 2018 +0800

    fix problem when creating router chain for StaticDirectory (consume multi 
groups)
---
 .../src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java    | 1 +
 .../java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java   | 2 +-
 .../rpc/cluster/router/condition/config/ConfigConditionRouter.java | 7 +++++--
 .../java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java    | 4 +++-
 .../org/apache/dubbo/registry/integration/RegistryDirectory.java   | 2 +-
 5 files changed, 11 insertions(+), 5 deletions(-)

diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java
index 2848904..3dfa325 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java
@@ -140,6 +140,7 @@ public class RouterChain<T> {
             parentNode.addChild(node);
             // Only when we have more routers and the sub-lis is not empty.
             if (i < routers.size() && CollectionUtils.isNotEmpty(list)) {
+                node.setInvokers(null); // only store invoker list in leaf 
nodes.
                 Router nextRouter = routers.get(i);
                 doRoute(nextRouter, i + 1, node, nextRouter.preRoute(list, 
url, invocation), url, invocation);
             }
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 dc8b63b..56f24ca 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
@@ -29,7 +29,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * TODO Extract more code here if necessary
+ * TODO Extract more code to here if necessary
  */
 public abstract class AbstractRouter implements Router {
     protected int priority;
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 cf1f336..91fe434 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
@@ -77,7 +77,7 @@ public class ConfigConditionRouter extends AbstractRouter 
implements Configurati
     @Override
     public synchronized void process(ConfigChangeEvent event) {
         if (logger.isInfoEnabled()) {
-            logger.info("Notification of tag rule, change type is: " + 
event.getChangeType() + ", raw rule is:\n " + event.getNewValue());
+            logger.info("Notification of condition rule, change type is: " + 
event.getChangeType() + ", raw rule is:\n " + event.getNewValue());
         }
 
         if (event.getChangeType().equals(ConfigChangeType.DELETED)) {
@@ -102,7 +102,10 @@ public class ConfigConditionRouter extends AbstractRouter 
implements Configurati
                 logger.error("Failed to parse the raw condition rule and it 
will not take effect, please check if the condition rule matches with the 
template, the raw rule is:\n " + event.getNewValue(), e);
             }
         }
-        routerChain.notifyRuleChanged();
+
+        if (routerChain != null) {
+            routerChain.notifyRuleChanged();
+        }
     }
 
     @Override
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 a8477e0..1c86eb1 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
@@ -110,7 +110,9 @@ public class TagRouter extends AbstractRouter implements 
Comparable<Router>, Con
             } else {
                 this.tagRouterRule = TagRuleParser.parse(event.getNewValue());
             }
-            routerChain.notifyRuleChanged();
+            if (routerChain != null) {
+                routerChain.notifyRuleChanged();
+            }
         } catch (Exception e) {
             logger.error("Failed to parse the raw tag router rule and it will 
not take effect, please check if the rule matches with the template, the raw 
rule is:\n ", e);
         }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
index e352de5..fea5824 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
@@ -381,7 +381,7 @@ public class RegistryDirectory<T> extends 
AbstractDirectory<T> implements Notify
                 for (List<Invoker<T>> groupList : groupMap.values()) {
                     StaticDirectory<T> staticDirectory = new 
StaticDirectory<>(groupList);
                     Map<String, List<Invoker<T>>> methodGroupInvokers = new 
HashMap<>();
-                    methodGroupInvokers.put(method, groupInvokers);
+                    methodGroupInvokers.put(method, groupList);
                     staticDirectory.buildRouterChain(methodGroupInvokers, 
dynamicConfiguration);
                     groupInvokers.add(cluster.join(staticDirectory));
                 }

Reply via email to