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

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new a64c3d4  fix #7453 add elements repeatedly (#7454)
a64c3d4 is described below

commit a64c3d4accbaee9ec8617e78e6d59c49f6e2790b
Author: xiaoheng1 <[email protected]>
AuthorDate: Sun Mar 28 15:44:32 2021 +0800

    fix #7453 add elements repeatedly (#7454)
---
 .../cluster/configurator/AbstractConfigurator.java  | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 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 166479c..108810d 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
@@ -47,6 +47,8 @@ import static 
org.apache.dubbo.rpc.cluster.Constants.OVERRIDE_PROVIDERS_KEY;
  */
 public abstract class AbstractConfigurator implements Configurator {
 
+    private static final String TILDE = "~";
+
     private final URL configuratorUrl;
 
     public AbstractConfigurator(URL url) {
@@ -76,7 +78,8 @@ public abstract class AbstractConfigurator implements 
Configurator {
             String configuratorSide = configuratorUrl.getParameter(SIDE_KEY);
             if (currentSide.equals(configuratorSide) && 
CONSUMER.equals(configuratorSide) && 0 == configuratorUrl.getPort()) {
                 url = configureIfMatch(NetUtils.getLocalHost(), url);
-            } else if (currentSide.equals(configuratorSide) && 
PROVIDER.equals(configuratorSide) && url.getPort() == 
configuratorUrl.getPort()) {
+            } else if (currentSide.equals(configuratorSide) && 
PROVIDER.equals(configuratorSide) &&
+                    url.getPort() == configuratorUrl.getPort()) {
                 url = configureIfMatch(url.getHost(), url);
             }
         }
@@ -138,10 +141,13 @@ public abstract class AbstractConfigurator implements 
Configurator {
                     for (Map.Entry<String, String> entry : 
configuratorUrl.getParameters().entrySet()) {
                         String key = entry.getKey();
                         String value = entry.getValue();
-                        if (key.startsWith("~") || APPLICATION_KEY.equals(key) 
|| SIDE_KEY.equals(key)) {
-                            conditionKeys.add(key);
+                        boolean startWithTilde = startWithTilde(key);
+                        if (startWithTilde || APPLICATION_KEY.equals(key) || 
SIDE_KEY.equals(key)) {
+                            if (startWithTilde) {
+                                conditionKeys.add(key);
+                            }
                             if (value != null && !ANY_VALUE.equals(value)
-                                    && 
!value.equals(url.getParameter(key.startsWith("~") ? key.substring(1) : key))) {
+                                    && 
!value.equals(url.getParameter(startWithTilde ? key.substring(1) : key))) {
                                 return url;
                             }
                         }
@@ -153,6 +159,13 @@ public abstract class AbstractConfigurator implements 
Configurator {
         return url;
     }
 
+    private boolean startWithTilde(String key) {
+        if (StringUtils.isNotEmpty(key) && key.startsWith(TILDE)) {
+            return true;
+        }
+        return false;
+    }
+
     protected abstract URL doConfigure(URL currentUrl, URL configUrl);
 
 }

Reply via email to