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 9f02b97ee00b80ffdb501d8fd48c794e88388d32
Author: ken.lj <[email protected]>
AuthorDate: Wed Nov 21 14:38:40 2018 +0800

    Fix configurator bug
---
 .../cluster/configurator/AbstractConfigurator.java | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
index 449bafd..3b682ee 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
@@ -57,13 +57,12 @@ public abstract class AbstractConfigurator implements 
Configurator {
          */
         String apiVersion = 
configuratorUrl.getParameter(Constants.API_VERSION_KEY);
         if (StringUtils.isNotEmpty(apiVersion)) {
-            int configuratorPort = configuratorUrl.getPort();
-            if (configuratorPort == 0) {
-                configureIfMatch(NetUtils.getLocalHost(), url, 
configuratorUrl);
-            } else {
-                if (url.getPort() == configuratorPort) {
-                    configureIfMatch(configuratorUrl.getHost(), url, 
configuratorUrl);
-                }
+            String currentSide = url.getParameter(Constants.SIDE_KEY);
+            String configuratorSide = 
configuratorUrl.getParameter(Constants.SIDE_KEY);
+            if (currentSide.equals(configuratorSide) && 
Constants.CONSUMER.equals(configuratorSide) && 0 == configuratorUrl.getPort()) {
+                url = configureIfMatch(NetUtils.getLocalHost(), url);
+            } else if (currentSide.equals(configuratorSide) && 
Constants.PROVIDER.equals(configuratorSide) && url.getPort() == 
configuratorUrl.getPort()) {
+                url = configureIfMatch(url.getHost(), url);
             }
         }
         /**
@@ -80,21 +79,21 @@ public abstract class AbstractConfigurator implements 
Configurator {
         // If override url has port, means it is a provider address. We want 
to control a specific provider with this override url, it may take effect on 
the specific provider instance or on consumers holding this provider instance.
         if (configuratorUrl.getPort() != 0) {
             if (url.getPort() == configuratorUrl.getPort()) {
-                return configureIfMatch(url.getHost(), url, configuratorUrl);
+                return configureIfMatch(url.getHost(), url);
             }
         } else {// override url don't have a port, means the ip override url 
specify is a consumer address or 0.0.0.0
             // 1.If it is a consumer ip address, the intention is to control a 
specific consumer instance, it must takes effect at the consumer side, any 
provider received this override url should ignore;
             // 2.If the ip is 0.0.0.0, this override url can be used on 
consumer, and also can be used on provider
             if (url.getParameter(Constants.SIDE_KEY, 
Constants.PROVIDER).equals(Constants.CONSUMER)) {
-                return configureIfMatch(NetUtils.getLocalHost(), url, 
configuratorUrl);// NetUtils.getLocalHost is the ip address consumer registered 
to registry.
+                return configureIfMatch(NetUtils.getLocalHost(), url);// 
NetUtils.getLocalHost is the ip address consumer registered to registry.
             } else if (url.getParameter(Constants.SIDE_KEY, 
Constants.CONSUMER).equals(Constants.PROVIDER)) {
-                return configureIfMatch(Constants.ANYHOST_VALUE, url, 
configuratorUrl);// take effect on all providers, so address must be 0.0.0.0, 
otherwise it won't flow to this if branch
+                return configureIfMatch(Constants.ANYHOST_VALUE, url);// take 
effect on all providers, so address must be 0.0.0.0, otherwise it won't flow to 
this if branch
             }
         }
         return url;
     }
 
-    private URL configureIfMatch(String host, URL url, URL configuratorUrl) {
+    private URL configureIfMatch(String host, URL url) {
         if (Constants.ANYHOST_VALUE.equals(configuratorUrl.getHost()) || 
host.equals(configuratorUrl.getHost())) {
             // TODO, to support wildcards
             String providers = 
configuratorUrl.getParameter(Constants.OVERRIDE_PROVIDERS_KEY);
@@ -113,6 +112,7 @@ public abstract class AbstractConfigurator implements 
Configurator {
                     conditionKeys.add(Constants.VERSION_KEY);
                     conditionKeys.add(Constants.APPLICATION_KEY);
                     conditionKeys.add(Constants.SIDE_KEY);
+                    conditionKeys.add(Constants.API_VERSION_KEY);
                     for (Map.Entry<String, String> entry : 
configuratorUrl.getParameters().entrySet()) {
                         String key = entry.getKey();
                         String value = entry.getValue();

Reply via email to