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)); }