You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by hu...@apache.org on 2019/04/26 02:54:34 UTC

[incubator-dubbo] branch master updated: [Dubbo-3875] dubbo TagRouter does not work with dubbo:parameter. (#3883)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new d2be44d  [Dubbo-3875] dubbo TagRouter does not work with dubbo:parameter. (#3883)
d2be44d is described below

commit d2be44d672a70eb2efd22bebf49f5885c7866da8
Author: ken.lj <ke...@gmail.com>
AuthorDate: Fri Apr 26 10:54:26 2019 +0800

    [Dubbo-3875] dubbo TagRouter does not work with dubbo:parameter. (#3883)
    
    * avoid 'dubbo.tag' from provider side being override on consumer side
    * not necessary to keep 'default.' prefix for configs come from ConsumerConfig and ProviderConfig
    * fix ut caused by removing of 'default.' prefix
---
 .../dubbo/rpc/cluster/support/ClusterUtils.java    | 30 +++++++++-------------
 .../dubbo/config/AbstractInterfaceConfig.java      | 11 ++++++++
 .../apache/dubbo/config/AbstractServiceConfig.java | 14 ++--------
 .../org/apache/dubbo/config/ReferenceConfig.java   | 22 ++++++----------
 .../org/apache/dubbo/config/ServiceConfig.java     |  4 ++-
 .../apache/dubbo/config/annotation/Reference.java  |  5 ++++
 .../config/builders/AbstractInterfaceBuilder.java  | 10 ++++++++
 .../config/builders/AbstractServiceBuilder.java    | 11 +-------
 .../org/apache/dubbo/config/ServiceConfigTest.java |  2 +-
 .../dubbo/config/url/InvokerSideConfigUrlTest.java | 13 +++-------
 .../org/apache/dubbo/config/url/UrlTestBase.java   |  8 +-----
 .../src/main/resources/META-INF/compat/dubbo.xsd   | 12 ++++-----
 .../src/main/resources/META-INF/dubbo.xsd          | 12 ++++-----
 13 files changed, 69 insertions(+), 85 deletions(-)

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 37b3e71..e6ed749 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
@@ -95,24 +95,11 @@ public class ClusterUtils {
         }
         if (remoteMap != null && remoteMap.size() > 0) {
             // Use version passed from provider side
-            String dubbo = remoteMap.get(Constants.DUBBO_VERSION_KEY);
-            if (dubbo != null && dubbo.length() > 0) {
-                map.put(Constants.DUBBO_VERSION_KEY, dubbo);
-            }
-            String version = remoteMap.get(Constants.VERSION_KEY);
-            if (version != null && version.length() > 0) {
-                map.put(Constants.VERSION_KEY, version);
-            }
-            String methods = remoteMap.get(Constants.METHODS_KEY);
-            if (methods != null && methods.length() > 0) {
-                map.put(Constants.METHODS_KEY, methods);
-            }
-            // Reserve timestamp of provider url.
-            String remoteTimestamp = remoteMap.get(Constants.TIMESTAMP_KEY);
-            if (remoteTimestamp != null && remoteTimestamp.length() > 0) {
-                map.put(Constants.REMOTE_TIMESTAMP_KEY, remoteMap.get(Constants.TIMESTAMP_KEY));
-            }
-
+            reserveRemoteValue(Constants.DUBBO_VERSION_KEY, map, remoteMap);
+            reserveRemoteValue(Constants.VERSION_KEY, map, remoteMap);
+            reserveRemoteValue(Constants.METHODS_KEY, map, remoteMap);
+            reserveRemoteValue(Constants.TIMESTAMP_KEY, map, remoteMap);
+            reserveRemoteValue(Constants.TAG_KEY, map, remoteMap);
             // TODO, for compatibility consideration, we cannot simply change the value behind APPLICATION_KEY from Consumer to Provider. So just add an extra key here.
             // Reserve application name from provider.
             map.put(Constants.REMOTE_APPLICATION_KEY, remoteMap.get(Constants.APPLICATION_KEY));
@@ -135,4 +122,11 @@ public class ClusterUtils {
         return remoteUrl.clearParameters().addParameters(map);
     }
 
+    private static void reserveRemoteValue(String key, Map<String, String> map, Map<String, String> remoteMap) {
+        String remoteValue = remoteMap.get(key);
+        if (StringUtils.isNotEmpty(remoteValue)) {
+            map.put(key, remoteValue);
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index 57cb6c3..59cdd5c 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -155,6 +155,8 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
     // the scope for referring/exporting a service, if it's local, it means searching in current JVM only.
     private String scope;
 
+    protected String tag;
+
     /**
      * Check whether the registry config is exists, and then conversion it to {@link RegistryConfig}
      */
@@ -837,4 +839,13 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
     public void setMetrics(MetricsConfig metrics) {
         this.metrics = metrics;
     }
+
+    @Parameter(key = Constants.TAG_KEY, useKeyAsProperty = false)
+    public String getTag() {
+        return tag;
+    }
+
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
 }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java
index 0fb2909..35607fa 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java
@@ -17,8 +17,8 @@
 package org.apache.dubbo.config;
 
 import org.apache.dubbo.common.Constants;
-import org.apache.dubbo.config.context.ConfigManager;
 import org.apache.dubbo.common.utils.CollectionUtils;
+import org.apache.dubbo.config.context.ConfigManager;
 import org.apache.dubbo.config.support.Parameter;
 import org.apache.dubbo.rpc.ExporterListener;
 
@@ -92,8 +92,7 @@ public abstract class AbstractServiceConfig extends AbstractInterfaceConfig {
      */
     protected List<ProtocolConfig> protocols;
     protected String protocolIds;
-    // provider tag
-    protected String tag;
+
     // max allowed execute times
     private Integer executes;
 
@@ -288,13 +287,4 @@ public abstract class AbstractServiceConfig extends AbstractInterfaceConfig {
     public void setSerialization(String serialization) {
         this.serialization = serialization;
     }
-
-    @Parameter(key = Constants.TAG_KEY, useKeyAsProperty = false)
-    public String getTag() {
-        return tag;
-    }
-
-    public void setTag(String tag) {
-        this.tag = tag;
-    }
 }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 87ccdf3..18008b9 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -280,7 +280,9 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
         appendParameters(map, metrics);
         appendParameters(map, application);
         appendParameters(map, module);
-        appendParameters(map, consumer, Constants.DEFAULT_KEY);
+        // remove 'default.' prefix for configs from ConsumerConfig
+        // appendParameters(map, consumer, Constants.DEFAULT_KEY);
+        appendParameters(map, consumer);
         appendParameters(map, this);
         Map<String, Object> attributes = null;
         if (CollectionUtils.isNotEmpty(methods)) {
@@ -457,22 +459,14 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
     }
 
     private void checkDefault() {
-        createConsumerIfAbsent();
-    }
-
-    private void createConsumerIfAbsent() {
         if (consumer != null) {
             return;
         }
-        setConsumer(
-                        ConfigManager.getInstance()
-                            .getDefaultConsumer()
-                            .orElseGet(() -> {
-                                ConsumerConfig consumerConfig = new ConsumerConfig();
-                                consumerConfig.refresh();
-                                return consumerConfig;
-                            })
-                );
+        setConsumer(ConfigManager.getInstance().getDefaultConsumer().orElseGet(() -> {
+            ConsumerConfig consumerConfig = new ConsumerConfig();
+            consumerConfig.refresh();
+            return consumerConfig;
+        }));
     }
 
     private void completeCompoundConfigs() {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 1f14dd2..9e24ac9 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -431,7 +431,9 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
         appendParameters(map, metrics);
         appendParameters(map, application);
         appendParameters(map, module);
-        appendParameters(map, provider, Constants.DEFAULT_KEY);
+        // remove 'default.' prefix for configs from ProviderConfig
+        // appendParameters(map, provider, Constants.DEFAULT_KEY);
+        appendParameters(map, provider);
         appendParameters(map, protocolConfig);
         appendParameters(map, this);
         if (CollectionUtils.isNotEmpty(methods)) {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java
index bdbbd35..c4851bd 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java
@@ -258,6 +258,11 @@ public @interface Reference {
     String protocol() default "";
 
     /**
+     * Service tag name
+     */
+    String tag() default "";
+
+    /**
      * methods support
      * @return
      */
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/AbstractInterfaceBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/AbstractInterfaceBuilder.java
index e8272d0..fbc6912 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/AbstractInterfaceBuilder.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/AbstractInterfaceBuilder.java
@@ -121,6 +121,8 @@ public abstract class AbstractInterfaceBuilder<T extends AbstractInterfaceConfig
     // the scope for referring/exporting a service, if it's local, it means searching in current JVM only.
     private String scope;
 
+    private String tag;
+
     /**
      * @param local
      * @see org.apache.dubbo.config.builders.AbstractInterfaceBuilder#stub(String)
@@ -267,6 +269,11 @@ public abstract class AbstractInterfaceBuilder<T extends AbstractInterfaceConfig
         return getThis();
     }
 
+    public B tag(String tag) {
+        this.tag = tag;
+        return getThis();
+    }
+
     @Override
     public void build(T instance) {
         super.build(instance);
@@ -331,5 +338,8 @@ public abstract class AbstractInterfaceBuilder<T extends AbstractInterfaceConfig
         if (!StringUtils.isEmpty(scope)) {
             instance.setScope(scope);
         }
+        if (StringUtils.isNotEmpty(tag)) {
+            instance.setTag(tag);
+        }
     }
 }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/AbstractServiceBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/AbstractServiceBuilder.java
index 5b16602..88bfbc2 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/AbstractServiceBuilder.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/AbstractServiceBuilder.java
@@ -88,8 +88,7 @@ public abstract class AbstractServiceBuilder<T extends AbstractServiceConfig, B
      */
     protected List<ProtocolConfig> protocols;
     protected String protocolIds;
-    // provider tag
-    protected String tag;
+
     // max allowed execute times
     private Integer executes;
 
@@ -197,11 +196,6 @@ public abstract class AbstractServiceBuilder<T extends AbstractServiceConfig, B
         return getThis();
     }
 
-    public B tag(String tag) {
-        this.tag = tag;
-        return getThis();
-    }
-
     public B executes(Integer executes) {
         this.executes = executes;
         return getThis();
@@ -262,9 +256,6 @@ public abstract class AbstractServiceBuilder<T extends AbstractServiceConfig, B
         if (!StringUtils.isEmpty(protocolIds)) {
             instance.setProtocolIds(protocolIds);
         }
-        if (tag != null) {
-            instance.setTag(tag);
-        }
         if (executes != null) {
             instance.setExecutes(executes);
         }
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
index 296538c..2dff18b 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
@@ -134,7 +134,7 @@ public class ServiceConfigTest {
         assertThat(url.getParameters(), hasEntry(Constants.APPLICATION_KEY, "app"));
         assertThat(url.getParameters(), hasKey(Constants.BIND_IP_KEY));
         assertThat(url.getParameters(), hasKey(Constants.BIND_PORT_KEY));
-        assertThat(url.getParameters(), hasEntry(Constants.DEFAULT_KEY + "." + Constants.EXPORT_KEY, "true"));
+        assertThat(url.getParameters(), hasEntry(Constants.EXPORT_KEY, "true"));
         assertThat(url.getParameters(), hasEntry("echo.0.callback", "false"));
         assertThat(url.getParameters(), hasEntry(Constants.GENERIC_KEY, "false"));
         assertThat(url.getParameters(), hasEntry(Constants.INTERFACE_KEY, DemoService.class.getName()));
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java
index da0f607..1155ec4 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java
@@ -28,8 +28,8 @@ import org.apache.dubbo.config.context.ConfigManager;
 import org.apache.dubbo.config.mock.MockRegistry;
 
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
@@ -112,18 +112,11 @@ public class InvokerSideConfigUrlTest extends UrlTestBase {
             //{"", "", "", "", "", "", "", "", "", ""}, 
     };
 
-    private Object consumerConfTable[][] = {
-            {"timeout", "default.timeout", "int", 5000, 8000, "", "", "", "", ""},
-            {"retries", "default.retries", "int", 2, 5, "", "", "", "", ""},
-            {"loadbalance", "default.loadbalance", "string", "random", "leastactive", "", "", "", "", ""},
-            {"async", "default.async", "boolean", false, true, "", "", "", "", ""},
-            {"connections", "default.connections", "int", 100, 5, "", "", "", "", ""},
+    private Object consumerConfTable[][] = {{"timeout", "timeout", "int", 5000, 8000, "", "", "", "", ""}, {"retries", "retries", "int", 2, 5, "", "", "", "", ""}, {"loadbalance", "loadbalance", "string", "random", "leastactive", "", "", "", "", ""}, {"async", "async", "boolean", false, true, "", "", "", "", ""}, {"connections", "connections", "int", 100, 5, "", "", "", "", ""},
 //            {"generic", "generic", "boolean", false, false, "", "", "", "", ""}, 
             {"check", "check", "boolean", true, false, "", "", "", "", ""},
             {"proxy", "proxy", "string", "javassist", "jdk", "javassist", "", "", "", ""},
-            {"owner", "owner", "string", "", "haomin", "", "", "", "", ""},
-            {"actives", "default.actives", "int", 0, 5, "", "", "", "", ""},
-            {"cluster", "default.cluster", "string", "failover", "forking", "", "", "", "", ""},
+            {"owner", "owner", "string", "", "haomin", "", "", "", "", ""}, {"actives", "actives", "int", 0, 5, "", "", "", "", ""}, {"cluster", "cluster", "string", "failover", "forking", "", "", "", "", ""},
             {"filter", "", "string", "", "", "", "", "", "", ""},
             {"listener", "", "string", "", "", "", "", "", "", ""},
 //            {"", "", "", "", "", "", "", "", "", ""}, 
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/UrlTestBase.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/UrlTestBase.java
index a752842..950b89e 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/UrlTestBase.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/UrlTestBase.java
@@ -81,13 +81,7 @@ public class UrlTestBase {
             //            {"subscribe", "subscribe", "boolean", true, false, "", "", "", "", ""},
             {"dynamic", "dynamic", "boolean", true, false, "", "", "", "", ""},
     };
-    protected Object provConfTable[][] = {
-            {"cluster", "default.cluster", "string", "string", "failover", "failfast", "failsafe", "", "", ""},
-            {"async", "default.async", "boolean", false, true, "", "", "", "", ""},
-            {"loadbalance", "default.loadbalance", "string", "random", "leastactive", "", "", "", "", ""},
-            {"connections", "default.connections", "int", 0, 60, "", "", "", "", ""},
-            {"retries", "default.retries", "int", 2, 60, "", "", "", "", ""},
-            {"timeout", "default.timeout", "int", 5000, 60, "", "", "", "", ""},
+    protected Object provConfTable[][] = {{"cluster", "cluster", "string", "string", "failover", "failfast", "failsafe", "", "", ""}, {"async", "async", "boolean", false, true, "", "", "", "", ""}, {"loadbalance", "loadbalance", "string", "random", "leastactive", "", "", "", "", ""}, {"connections", "connections", "int", 0, 60, "", "", "", "", ""}, {"retries", "retries", "int", 2, 60, "", "", "", "", ""}, {"timeout", "timeout", "int", 5000, 60, "", "", "", "", ""},
             //change by fengting listener 没有缺省值
             //{"listener", "exporter.listener", "string", "", "", "", "", "", "", ""},
             //{"filter", "service.filter", "string", "", "", "", "", "", "", ""},
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
index 01996ae..9e179ef 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
@@ -172,6 +172,12 @@
                             <![CDATA[ Defines the service visibility, choise:[local remote]. default is remote, which can be invoked by network。  ]]></xsd:documentation>
                     </xsd:annotation>
                 </xsd:attribute>
+                <xsd:attribute name="tag" type="xsd:string">
+                    <xsd:annotation>
+                        <xsd:documentation>
+                            <![CDATA[ Defines the service tag]]></xsd:documentation>
+                    </xsd:annotation>
+                </xsd:attribute>
             </xsd:extension>
         </xsd:complexContent>
     </xsd:complexType>
@@ -317,12 +323,6 @@
                         <xsd:documentation><![CDATA[ The serialization protocol of service. ]]></xsd:documentation>
                     </xsd:annotation>
                 </xsd:attribute>
-                <xsd:attribute name="tag" type="xsd:string">
-                    <xsd:annotation>
-                        <xsd:documentation>
-                            <![CDATA[ Defines the service tag]]></xsd:documentation>
-                    </xsd:annotation>
-                </xsd:attribute>
                 <xsd:anyAttribute namespace="##other" processContents="lax"/>
             </xsd:extension>
         </xsd:complexContent>
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
index 33ff3ad..e517f0c 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
@@ -172,6 +172,12 @@
                             <![CDATA[ Defines the service visibility, choise:[local remote]. default is remote, which can be invoked by network。  ]]></xsd:documentation>
                     </xsd:annotation>
                 </xsd:attribute>
+                <xsd:attribute name="tag" type="xsd:string">
+                    <xsd:annotation>
+                        <xsd:documentation>
+                            <![CDATA[ Defines the service tag]]></xsd:documentation>
+                    </xsd:annotation>
+                </xsd:attribute>
             </xsd:extension>
         </xsd:complexContent>
     </xsd:complexType>
@@ -317,12 +323,6 @@
                         <xsd:documentation><![CDATA[ The serialization protocol of service. ]]></xsd:documentation>
                     </xsd:annotation>
                 </xsd:attribute>
-                <xsd:attribute name="tag" type="xsd:string">
-                    <xsd:annotation>
-                        <xsd:documentation>
-                            <![CDATA[ Defines the service tag]]></xsd:documentation>
-                    </xsd:annotation>
-                </xsd:attribute>
                 <xsd:anyAttribute namespace="##other" processContents="lax"/>
             </xsd:extension>
         </xsd:complexContent>