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

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


The following commit(s) were added to refs/heads/3.0 by this push:
     new 3eff57a  Remove some local only parameters (#8291)
3eff57a is described below

commit 3eff57a7ca2d666cd0ea7b66e26dc9206f57fc45
Author: Albumen Kevin <[email protected]>
AuthorDate: Wed Jul 14 17:25:20 2021 +0800

    Remove some local only parameters (#8291)
---
 .../dubbo/rpc/cluster/ProviderURLMergeProcessor.java    |  2 ++
 .../dubbo/rpc/cluster/directory/AbstractDirectory.java  | 17 +++++++++++------
 .../apache/dubbo/rpc/cluster/support/ClusterUtils.java  | 14 ++++++++++++++
 3 files changed, 27 insertions(+), 6 deletions(-)

diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/ProviderURLMergeProcessor.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/ProviderURLMergeProcessor.java
index a548663..f38424e 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/ProviderURLMergeProcessor.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/ProviderURLMergeProcessor.java
@@ -33,6 +33,8 @@ public interface ProviderURLMergeProcessor {
      */
     URL mergeUrl(URL remoteUrl, Map<String, String> localParametersMap);
 
+    default Map<String, String> mergeLocalParams(Map<String, String> localMap) 
{ return localMap; }
+
     default boolean accept(URL providerUrl, Map<String, String> 
localParametersMap) {
         return true;
     }
diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
index 9e66c86..b8cb39a 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
@@ -26,6 +26,7 @@ import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.cluster.Directory;
 import org.apache.dubbo.rpc.cluster.Router;
 import org.apache.dubbo.rpc.cluster.RouterChain;
+import org.apache.dubbo.rpc.cluster.support.ClusterUtils;
 
 import java.util.Collections;
 import java.util.List;
@@ -73,18 +74,22 @@ public abstract class AbstractDirectory<T> implements 
Directory<T> {
 
         this.url = url.removeAttribute(REFER_KEY).removeAttribute(MONITOR_KEY);
 
-        Object referParams = url.getAttribute(REFER_KEY);
-        if (referParams != null) {
-            this.queryMap = (Map<String, String>) referParams;
-            this.consumerUrl = (URL)url.getAttribute(CONSUMER_URL_KEY);
+        Map<String, String> queryMap;
+        Object referParams =  url.getAttribute(REFER_KEY);
+        if (referParams instanceof Map) {
+            queryMap = (Map<String, String>) referParams;
+            this.consumerUrl = (URL) url.getAttribute(CONSUMER_URL_KEY);
         } else {
-            this.queryMap = 
StringUtils.parseQueryString(url.getParameterAndDecoded(REFER_KEY));
+            queryMap = 
StringUtils.parseQueryString(url.getParameterAndDecoded(REFER_KEY));
         }
 
+        // remove some local only parameters
+        this.queryMap = ClusterUtils.mergeLocalParams(queryMap);
+
         if (consumerUrl == null) {
             String host = StringUtils.isNotEmpty(queryMap.get("register.ip")) 
? queryMap.get("register.ip") : this.url.getHost();
             String path = queryMap.get(PATH_KEY);
-            String consumedProtocol = this.queryMap.get(PROTOCOL_KEY) == null 
? DUBBO : this.queryMap.get(PROTOCOL_KEY);
+            String consumedProtocol = queryMap.get(PROTOCOL_KEY) == null ? 
DUBBO : queryMap.get(PROTOCOL_KEY);
 
             URL consumerUrlFrom = this.url
                     .setHost(host)
diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/ClusterUtils.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/ClusterUtils.java
index 0ff3255..e2aa615 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/ClusterUtils.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/ClusterUtils.java
@@ -48,4 +48,18 @@ public class ClusterUtils {
         return providerURLMergeProcessor.mergeUrl(remoteUrl, localMap);
     }
 
+    public static Map<String, String> mergeLocalParams(Map<String, String> 
localMap) {
+        String ump = localMap.get(URL_MERGE_PROCESSOR_KEY);
+        ProviderURLMergeProcessor providerURLMergeProcessor;
+
+        if (StringUtils.isNotEmpty(ump)) {
+            providerURLMergeProcessor = 
ExtensionLoader.getExtensionLoader(ProviderURLMergeProcessor.class).getExtension(ump);
+        } else {
+            providerURLMergeProcessor = 
ExtensionLoader.getExtensionLoader(ProviderURLMergeProcessor.class).getExtension("default");
+        }
+
+        return providerURLMergeProcessor.mergeLocalParams(localMap);
+
+    }
+
 }

Reply via email to