From 470cc55ad1de72eb8a4a4e1c21d9a4af3c97f8e9 Mon Sep 17 00:00:00 2001 From: yavin Date: Mon, 16 Sep 2019 14:27:39 +0800 Subject: [PATCH 01/14] fix register config not take effect because of url simplified (#4397) --- .../org/apache/dubbo/registry/integration/RegistryProtocol.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java index 6329f1502..7335ed19f 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java @@ -215,7 +215,7 @@ public class RegistryProtocol implements Protocol { ProviderInvokerWrapper providerInvokerWrapper = ProviderConsumerRegTable.registerProvider(originInvoker, registryUrl, registeredProviderUrl); //to judge if we need to delay publish - boolean register = registeredProviderUrl.getParameter("register", true); + boolean register = providerUrl.getParameter(REGISTER_KEY, true); if (register) { register(registryUrl, registeredProviderUrl); providerInvokerWrapper.setReg(true); -- Gitee From dbb0a64a84d841f858cefbdaecae8bfe9f3788a1 Mon Sep 17 00:00:00 2001 From: myPrecious Date: Mon, 16 Sep 2019 16:30:58 +0800 Subject: [PATCH 02/14] [Dubbo-4984]Fix: type definition for String class (#5032) * type definition for String class * code format --- .../dubbo/metadata/definition/TypeDefinitionBuilder.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java index cb5ace512..b9f68e990 100755 --- a/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java +++ b/dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java @@ -55,6 +55,9 @@ public class TypeDefinitionBuilder { td = DefaultTypeBuilder.build(clazz, typeCache); td.setTypeBuilderName(DefaultTypeBuilder.class.getName()); } + if (clazz.equals(String.class)) { + td.setProperties(null); + } return td; } -- Gitee From fb1f98b60c70c9b7d76949b48367fd6d39794a5c Mon Sep 17 00:00:00 2001 From: cvictory Date: Tue, 17 Sep 2019 09:56:09 +0800 Subject: [PATCH 03/14] tag router supports anyhost (#4431) Fixes #4393 --- .../org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java | 5 +++++ 1 file changed, 5 insertions(+) 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 c96f6a225..d8b35bcd7 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 @@ -40,6 +40,7 @@ import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; +import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_VALUE; import static org.apache.dubbo.rpc.Constants.FORCE_USE_TAG; import static org.apache.dubbo.rpc.cluster.Constants.TAG_KEY; @@ -52,6 +53,7 @@ public class TagRouter extends AbstractRouter implements ConfigurationListener { private static final Logger logger = LoggerFactory.getLogger(TagRouter.class); private static final String RULE_SUFFIX = ".tag-router"; + private TagRouterRule tagRouterRule; private String application; @@ -212,6 +214,9 @@ public class TagRouter extends AbstractRouter implements ConfigurationListener { if (NetUtils.matchIpExpression(address, host, port)) { return true; } + if ((ANYHOST_VALUE + ":" + port).equals(address)) { + return true; + } } catch (UnknownHostException e) { logger.error("The format of ip address is invalid in tag route. Address :" + address, e); } catch (Exception e) { -- Gitee From a89b24c5d1d4c8636b37e6a5d59169087338f89f Mon Sep 17 00:00:00 2001 From: Zhiwei Zhao Date: Tue, 17 Sep 2019 09:58:30 +0800 Subject: [PATCH 04/14] fix 4694: consumer return quickly, when the provider interrupts abnormally (#4698) --- .../remoting/exchange/support/header/HeaderExchangeChannel.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeChannel.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeChannel.java index 2529ac7e4..e04f93036 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeChannel.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeChannel.java @@ -131,6 +131,8 @@ final class HeaderExchangeChannel implements ExchangeChannel { @Override public void close() { try { + // graceful close + DefaultFuture.closeChannel(channel); channel.close(); } catch (Throwable e) { logger.warn(e.getMessage(), e); -- Gitee From 3844ac700875ad444168bba190c685cebe6280c8 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Tue, 17 Sep 2019 17:07:11 +0800 Subject: [PATCH 05/14] throw exception whenever SPI extensions are in abnormal status when loading (#5072) --- .../dubbo/common/extension/ExtensionLoader.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java index 59c45144a..d95165377 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java @@ -492,12 +492,15 @@ public class ExtensionLoader { return (T) instance; } - private IllegalStateException findException(String name) { + private void findException(String name) { for (Map.Entry entry : exceptions.entrySet()) { if (entry.getKey().toLowerCase().contains(name.toLowerCase())) { - return entry.getValue(); + throw entry.getValue(); } } + } + + private IllegalStateException noExtensionException(String name) { StringBuilder buf = new StringBuilder("No such extension " + type.getName() + " by name " + name); @@ -519,9 +522,11 @@ public class ExtensionLoader { @SuppressWarnings("unchecked") private T createExtension(String name) { + // throws any possible exception in loading period. + findException(name); Class clazz = getExtensionClasses().get(name); if (clazz == null) { - throw findException(name); + throw noExtensionException(name); } try { T instance = (T) EXTENSION_INSTANCES.get(clazz); -- Gitee From 3222ea2f9bec7e89684cf8de8efe6eae4f73c811 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Wed, 18 Sep 2019 17:14:41 +0800 Subject: [PATCH 06/14] try to fix travis javax.ex dependency issue --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b346423fd..624ca6c41 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ sudo: false # faster builds jdk: - openjdk11 - - openjdk8 + - oraclejdk8 cache: directories: -- Gitee From d1ea5e0c84d4b72201aa8d87756141598d11d978 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Wed, 18 Sep 2019 17:51:45 +0800 Subject: [PATCH 07/14] try to fix travis javax.ex dependency issue --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 624ca6c41..52b86da7d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,10 +12,11 @@ cache: install: true script: + - rm -rf $HOME/.m2/repository/org/glassfish/javax.el/3.0.1-b08 - travis_wait 30 ./mvnw --batch-mode --no-transfer-progress clean install -DskipTests=false -Dcheckstyle.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true after_success: - bash <(curl -s https://codecov.io/bash) after_failure: - - if [ -f dubbo.log ]; then echo "------TAIL of dubbo.log------"; tail -n 1000 dubbo.log; echo "------END of dubbo.log------"; fi + - echo "build failed!" -- Gitee From 87c78878c639cfd0b055ed370d9daa4f4d9b1373 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Wed, 18 Sep 2019 17:56:50 +0800 Subject: [PATCH 08/14] try to fix travis javax.ex dependency issue --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 52b86da7d..a4bac41ef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ sudo: false # faster builds jdk: - openjdk11 - - oraclejdk8 + - openjdk8 cache: directories: -- Gitee From b53624e4e88a545a3478525bac58aac3ac12afba Mon Sep 17 00:00:00 2001 From: Junjian Peng Date: Wed, 18 Sep 2019 18:59:07 +0800 Subject: [PATCH 09/14] [Dubbo-4882] Add support for overriding Map properties in AbstractConfig.refresh (#4899) --- .../dubbo/common/utils/StringUtils.java | 27 +++++ .../dubbo/common/utils/ConfigUtilsTest.java | 10 ++ .../dubbo/common/utils/StringUtilsTest.java | 23 ++++ .../src/test/resources/parameters.properties | 1 + .../apache/dubbo/config/AbstractConfig.java | 104 ++++++++++++------ .../dubbo/config/AbstractConfigTest.java | 35 ++++++ 6 files changed, 166 insertions(+), 34 deletions(-) create mode 100644 dubbo-common/src/test/resources/parameters.properties diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java index 28aca4a2e..15bc93bef 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java @@ -25,6 +25,7 @@ import com.alibaba.fastjson.JSON; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -839,4 +840,30 @@ public final class StringUtils { return false; } } + + /** + * @param rawParameters format like '[{a:b},{c:d}]' + * @return + */ + public static Map parseParameters(String rawParameters) { + Pattern pattern = Pattern.compile("^\\[((\\s*\\{\\s*[\\w_\\-\\.]+\\s*:\\s*.+?\\s*\\}\\s*,?\\s*)+)\\s*\\]$"); + Pattern pairPattern = Pattern.compile("^\\{\\s*([\\w-_\\.]+)\\s*:\\s*(.+)\\s*\\}$"); + + Matcher matcher = pattern.matcher(rawParameters); + if (!matcher.matches()) { + return Collections.emptyMap(); + } + + String pairs = matcher.group(1); + String[] pairArr = pairs.split("\\s*,\\s*"); + + Map parameters = new HashMap<>(); + for (String pair : pairArr) { + Matcher pairMatcher = pairPattern.matcher(pair); + if (pairMatcher.matches()) { + parameters.put(pairMatcher.group(1), pairMatcher.group(2)); + } + } + return parameters; + } } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ConfigUtilsTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ConfigUtilsTest.java index b8c7a7379..21b941722 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ConfigUtilsTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ConfigUtilsTest.java @@ -257,4 +257,14 @@ public class ConfigUtilsTest { public void testGetPid() throws Exception { assertThat(ConfigUtils.getPid(), greaterThan(0)); } + + @Test + public void testPropertiesWithStructedValue() throws Exception { + Properties p = ConfigUtils.loadProperties("parameters.properties", false); + + Properties expected = new Properties(); + expected.put("dubbo.parameters", "[{a:b},{c_.d: r*}]"); + + assertEquals(expected, p); + } } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/StringUtilsTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/StringUtilsTest.java index 76a91c266..43303f93a 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/StringUtilsTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/StringUtilsTest.java @@ -310,4 +310,27 @@ public class StringUtilsTest { assertEquals("DUBBO_TAG1", StringUtils.toOSStyleKey("tag1")); } + @Test + public void testParseParameters() { + String legalStr = "[{key1:value1},{key2:value2}]"; + Map legalMap = StringUtils.parseParameters(legalStr); + assertEquals(2, legalMap.size()); + assertEquals("value2", legalMap.get("key2")); + + String legalSpaceStr = "[{key1: value1}, {key2 :value2}]"; + Map legalSpaceMap = StringUtils.parseParameters(legalSpaceStr); + assertEquals(2, legalSpaceMap.size()); + assertEquals("value2", legalSpaceMap.get("key2")); + + String legalSpecialStr = "[{key-1: value*.1}, {key.2 :value*.-_2}]"; + Map legalSpecialMap = StringUtils.parseParameters(legalSpecialStr); + assertEquals(2, legalSpecialMap.size()); + assertEquals("value*.1", legalSpecialMap.get("key-1")); + assertEquals("value*.-_2", legalSpecialMap.get("key.2")); + + String illegalStr = "[{key=value},{aa:bb}]"; + Map illegalMap = StringUtils.parseParameters(illegalStr); + assertEquals(0, illegalMap.size()); + } + } diff --git a/dubbo-common/src/test/resources/parameters.properties b/dubbo-common/src/test/resources/parameters.properties new file mode 100644 index 000000000..103a61af7 --- /dev/null +++ b/dubbo-common/src/test/resources/parameters.properties @@ -0,0 +1 @@ +dubbo.parameters=[{a:b},{c_.d: r*}] \ No newline at end of file diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java index 7f21f0aca..40c2f7598 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java @@ -36,6 +36,7 @@ import org.apache.dubbo.rpc.model.ConsumerMethodModel; import java.io.Serializable; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -45,6 +46,7 @@ import java.util.stream.Collectors; import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY; import static org.apache.dubbo.common.constants.CommonConstants.REMOVE_VALUE_PREFIX; +import static org.apache.dubbo.common.utils.ReflectUtils.findMethodByMethodSignature; /** * Utility methods and public methods for parsing configuration @@ -195,17 +197,9 @@ public abstract class AbstractConfig implements Serializable { } else if (parameter != null && parameter.required()) { throw new IllegalStateException(config.getClass().getSimpleName() + "." + key + " == null"); } - } else if ("getParameters".equals(name) - && Modifier.isPublic(method.getModifiers()) - && method.getParameterTypes().length == 0 - && method.getReturnType() == Map.class) { + } else if (isParametersGetter(method)) { Map map = (Map) method.invoke(config, new Object[0]); - if (map != null && map.size() > 0) { - String pre = (prefix != null && prefix.length() > 0 ? prefix + "." : ""); - for (Map.Entry entry : map.entrySet()) { - parameters.put(pre + entry.getKey().replace('-', '.'), entry.getValue()); - } - } + parameters.putAll(convert(map, prefix)); } } catch (Exception e) { throw new IllegalStateException(e.getMessage(), e); @@ -424,6 +418,58 @@ public abstract class AbstractConfig implements Serializable { return getter.substring(i, i + 1).toLowerCase() + getter.substring(i + 1); } + private static void invokeSetParameters(Class c, Object o, Map map) { + try { + Method method = findMethodByMethodSignature(c, "setParameters", new String[]{Map.class.getName()}); + if (method != null && isParametersSetter(method)) { + method.invoke(o, map); + } + } catch (Throwable t) { + // ignore + } + } + + private static Map invokeGetParameters(Class c, Object o) { + try { + Method method = findMethodByMethodSignature(c, "getParameters", null); + if (method != null && isParametersGetter(method)) { + return (Map) method.invoke(o); + } + } catch (Throwable t) { + // ignore + } + return null; + } + + private static boolean isParametersGetter(Method method) { + String name = method.getName(); + return ("getParameters".equals(name) + && Modifier.isPublic(method.getModifiers()) + && method.getParameterTypes().length == 0 + && method.getReturnType() == Map.class); + } + + private static boolean isParametersSetter(Method method) { + return ("setParameters".equals(method.getName()) + && Modifier.isPublic(method.getModifiers()) + && method.getParameterCount() == 1 + && Map.class == method.getParameterTypes()[0] + && method.getReturnType() == void.class); + } + + private static Map convert(Map parameters, String prefix) { + if (parameters == null || parameters.isEmpty()) { + return Collections.emptyMap(); + } + + Map result = new HashMap<>(); + String pre = (prefix != null && prefix.length() > 0 ? prefix + "." : ""); + for (Map.Entry entry : parameters.entrySet()) { + result.put(pre + entry.getKey().replace('-', '.'), entry.getValue()); + } + return result; + } + @Parameter(excluded = true) public String getId() { return id; @@ -521,17 +567,9 @@ public abstract class AbstractConfig implements Serializable { } else { metaData.put(key, null); } - } else if ("getParameters".equals(name) - && Modifier.isPublic(method.getModifiers()) - && method.getParameterTypes().length == 0 - && method.getReturnType() == Map.class) { + } else if (isParametersGetter(method)) { Map map = (Map) method.invoke(this, new Object[0]); - if (map != null && map.size() > 0) { -// String pre = (prefix != null && prefix.length() > 0 ? prefix + "." : ""); - for (Map.Entry entry : map.entrySet()) { - metaData.put(entry.getKey().replace('-', '.'), entry.getValue()); - } - } + metaData.putAll(convert(map, "")); } } catch (Exception e) { throw new IllegalStateException(e.getMessage(), e); @@ -549,10 +587,6 @@ public abstract class AbstractConfig implements Serializable { this.prefix = prefix; } - /** - * TODO: Currently, only support overriding of properties explicitly defined in Config class, doesn't support - * overriding of customized parameters stored in 'parameters'. - */ public void refresh() { try { CompositeConfiguration compositeConfiguration = Environment.getInstance().getConfiguration(getPrefix(), getId()); @@ -569,16 +603,18 @@ public abstract class AbstractConfig implements Serializable { Method[] methods = getClass().getMethods(); for (Method method : methods) { if (MethodUtils.isSetter(method)) { - try { - String value = StringUtils.trim(compositeConfiguration.getString(extractPropertyName(getClass(), method))); - // isTypeMatch() is called to avoid duplicate and incorrect update, for example, we have two 'setGeneric' methods in ReferenceConfig. - if (StringUtils.isNotEmpty(value) && ClassUtils.isTypeMatch(method.getParameterTypes()[0], value)) { - method.invoke(this, ClassUtils.convertPrimitive(method.getParameterTypes()[0], value)); - } - } catch (NoSuchMethodException e) { - logger.info("Failed to override the property " + method.getName() + " in " + - this.getClass().getSimpleName() + - ", please make sure every property has getter/setter method provided."); + String value = StringUtils.trim(compositeConfiguration.getString(extractPropertyName(getClass(), method))); + // isTypeMatch() is called to avoid duplicate and incorrect update, for example, we have two 'setGeneric' methods in ReferenceConfig. + if (StringUtils.isNotEmpty(value) && ClassUtils.isTypeMatch(method.getParameterTypes()[0], value)) { + method.invoke(this, ClassUtils.convertPrimitive(method.getParameterTypes()[0], value)); + } + } else if (isParametersSetter(method)) { + String value = StringUtils.trim(compositeConfiguration.getString(extractPropertyName(getClass(), method))); + if (StringUtils.isNotEmpty(value)) { + Map map = invokeGetParameters(getClass(), this); + map = map == null ? new HashMap<>() : map; + map.putAll(convert(StringUtils.parseParameters(value), "")); + invokeSetParameters(getClass(), this, map); } } } diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java index c481e32ba..4bac34f30 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java @@ -450,6 +450,41 @@ public class AbstractConfigTest { } } + @Test + public void testRefreshParameters() { + try { + Map parameters = new HashMap<>(); + parameters.put("key1", "value1"); + parameters.put("key2", "value2"); + OverrideConfig overrideConfig = new OverrideConfig(); + overrideConfig.setParameters(parameters); + + + Map external = new HashMap<>(); + external.put("dubbo.override.parameters", "[{key3:value3},{key4:value4},{key2:value5}]"); + Environment.getInstance().setExternalConfigMap(external); + + ConfigCenterConfig configCenter = new ConfigCenterConfig(); + overrideConfig.setConfigCenter(configCenter); + // Load configuration from system properties -> externalConfiguration -> RegistryConfig -> dubbo.properties + overrideConfig.refresh(); + + Assertions.assertEquals("value1", overrideConfig.getParameters().get("key1")); + Assertions.assertEquals("value5", overrideConfig.getParameters().get("key2")); + Assertions.assertEquals("value3", overrideConfig.getParameters().get("key3")); + Assertions.assertEquals("value4", overrideConfig.getParameters().get("key4")); + + System.setProperty("dubbo.override.parameters", "[{key3:value6}]"); + overrideConfig.refresh(); + + Assertions.assertEquals("value6", overrideConfig.getParameters().get("key3")); + Assertions.assertEquals("value4", overrideConfig.getParameters().get("key4")); + } finally { + System.clearProperty("dubbo.override.parameters"); + Environment.getInstance().clearExternalConfigs(); + } + } + @Test public void testOnlyPrefixedKeyTakeEffect() { try { -- Gitee From 5842dff899ca07d38b73678c1b5bb77b2947eae8 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Wed, 18 Sep 2019 19:59:30 +0800 Subject: [PATCH 10/14] fix set generic method error (#5079) --- .../dubbo/config/AbstractReferenceConfig.java | 14 +++++++--- .../apache/dubbo/config/ServiceConfig.java | 26 +++++++++---------- .../AbstractReferenceBuilderTest.java | 6 +++-- .../dubbo/rpc/support/ProtocolUtils.java | 11 +++++--- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java index 906759dc2..083ea6f0e 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java @@ -16,18 +16,19 @@ */ package org.apache.dubbo.config; +import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.support.Parameter; import org.apache.dubbo.remoting.Constants; import org.apache.dubbo.rpc.InvokerListener; import org.apache.dubbo.rpc.support.ProtocolUtils; -import static org.apache.dubbo.rpc.cluster.Constants.CLUSTER_STICKY_KEY; import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY; import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY; -import static org.apache.dubbo.rpc.Constants.LAZY_CONNECT_KEY; import static org.apache.dubbo.rpc.Constants.INVOKER_LISTENER_KEY; +import static org.apache.dubbo.rpc.Constants.LAZY_CONNECT_KEY; import static org.apache.dubbo.rpc.Constants.REFERENCE_FILTER_KEY; import static org.apache.dubbo.rpc.Constants.STUB_EVENT_KEY; +import static org.apache.dubbo.rpc.cluster.Constants.CLUSTER_STICKY_KEY; /** * AbstractConsumerConfig @@ -120,7 +121,14 @@ public abstract class AbstractReferenceConfig extends AbstractInterfaceConfig { } public void setGeneric(String generic) { - this.generic = generic; + if (StringUtils.isEmpty(generic)) { + return; + } + if (ProtocolUtils.isValidGenericValue(generic)) { + this.generic = generic; + } else { + throw new IllegalArgumentException("Unsupported generic type " + generic); + } } /** 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 07945adc1..300cdb8d8 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 @@ -65,34 +65,34 @@ import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_KEY; import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE; import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN; import static org.apache.dubbo.common.constants.CommonConstants.DUBBO; +import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_IP_TO_BIND; import static org.apache.dubbo.common.constants.CommonConstants.LOCALHOST_VALUE; import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY; +import static org.apache.dubbo.common.constants.CommonConstants.MONITOR_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE; import static org.apache.dubbo.common.constants.CommonConstants.REVISION_KEY; import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY; -import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_IP_TO_BIND; +import static org.apache.dubbo.common.constants.RegistryConstants.DYNAMIC_KEY; +import static org.apache.dubbo.common.utils.NetUtils.getAvailablePort; +import static org.apache.dubbo.common.utils.NetUtils.getLocalHost; +import static org.apache.dubbo.common.utils.NetUtils.isInvalidLocalHost; +import static org.apache.dubbo.common.utils.NetUtils.isInvalidPort; import static org.apache.dubbo.config.Constants.DUBBO_IP_TO_REGISTRY; import static org.apache.dubbo.config.Constants.DUBBO_PORT_TO_BIND; import static org.apache.dubbo.config.Constants.DUBBO_PORT_TO_REGISTRY; -import static org.apache.dubbo.config.Constants.REGISTER_KEY; -import static org.apache.dubbo.rpc.cluster.Constants.EXPORT_KEY; import static org.apache.dubbo.config.Constants.MULTICAST; import static org.apache.dubbo.config.Constants.PROTOCOLS_SUFFIX; -import static org.apache.dubbo.rpc.Constants.SCOPE_KEY; -import static org.apache.dubbo.rpc.Constants.SCOPE_LOCAL; +import static org.apache.dubbo.config.Constants.REGISTER_KEY; import static org.apache.dubbo.config.Constants.SCOPE_NONE; -import static org.apache.dubbo.rpc.Constants.SCOPE_REMOTE; -import static org.apache.dubbo.common.constants.CommonConstants.MONITOR_KEY; -import static org.apache.dubbo.common.constants.RegistryConstants.DYNAMIC_KEY; import static org.apache.dubbo.rpc.Constants.GENERIC_KEY; import static org.apache.dubbo.rpc.Constants.LOCAL_PROTOCOL; import static org.apache.dubbo.rpc.Constants.PROXY_KEY; +import static org.apache.dubbo.rpc.Constants.SCOPE_KEY; +import static org.apache.dubbo.rpc.Constants.SCOPE_LOCAL; +import static org.apache.dubbo.rpc.Constants.SCOPE_REMOTE; import static org.apache.dubbo.rpc.Constants.TOKEN_KEY; -import static org.apache.dubbo.common.utils.NetUtils.getAvailablePort; -import static org.apache.dubbo.common.utils.NetUtils.getLocalHost; -import static org.apache.dubbo.common.utils.NetUtils.isInvalidLocalHost; -import static org.apache.dubbo.common.utils.NetUtils.isInvalidPort; +import static org.apache.dubbo.rpc.cluster.Constants.EXPORT_KEY; /** * ServiceConfig @@ -1016,7 +1016,7 @@ public class ServiceConfig extends AbstractServiceConfig { if (StringUtils.isEmpty(generic)) { return; } - if (ProtocolUtils.isGeneric(generic)) { + if (ProtocolUtils.isValidGenericValue(generic)) { this.generic = generic; } else { throw new IllegalArgumentException("Unsupported generic type " + generic); diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/builders/AbstractReferenceBuilderTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/builders/AbstractReferenceBuilderTest.java index 2a5f69768..2936f009e 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/builders/AbstractReferenceBuilderTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/builders/AbstractReferenceBuilderTest.java @@ -21,6 +21,8 @@ import org.apache.dubbo.config.AbstractReferenceConfig; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_BEAN; + class AbstractReferenceBuilderTest { @Test @@ -53,8 +55,8 @@ class AbstractReferenceBuilderTest { @Test void generic1() { ReferenceBuilder builder = new ReferenceBuilder(); - builder.generic("generic"); - Assertions.assertEquals("generic", builder.build().getGeneric()); + builder.generic(GENERIC_SERIALIZATION_BEAN); + Assertions.assertEquals(GENERIC_SERIALIZATION_BEAN, builder.build().getGeneric()); } @Test diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/ProtocolUtils.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/ProtocolUtils.java index 922ea4901..b5b9ed6fb 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/ProtocolUtils.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/ProtocolUtils.java @@ -21,11 +21,11 @@ import org.apache.dubbo.common.utils.StringUtils; import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY; import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY; -import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_NATIVE_JAVA; -import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_DEFAULT; +import static org.apache.dubbo.rpc.Constants.GENERIC_RAW_RETURN; import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_BEAN; +import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_DEFAULT; +import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_NATIVE_JAVA; import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_PROTOBUF; -import static org.apache.dubbo.rpc.Constants.GENERIC_RAW_RETURN; public class ProtocolUtils { @@ -64,6 +64,11 @@ public class ProtocolUtils { } + public static boolean isValidGenericValue(String generic) { + return isGeneric(generic) || Boolean.FALSE.toString().equalsIgnoreCase(generic); + + } + public static boolean isDefaultGenericSerialization(String generic) { return isGeneric(generic) && GENERIC_SERIALIZATION_DEFAULT.equalsIgnoreCase(generic); -- Gitee From a3c89e2e47bcb4c690d454a7c2a6eca712b64a75 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Wed, 18 Sep 2019 20:00:03 +0800 Subject: [PATCH 11/14] delete 'config.' prefix for url generated from ConfigCenterConfig (#5078) --- .../common/constants/CommonConstants.java | 5 ++++ .../com/alibaba/dubbo/common/Constants.java | 1 - .../dubbo/config/ConfigCenterConfig.java | 16 +++---------- .../org/apache/dubbo/config/Constants.java | 5 ---- .../dubbo/config/ConfigCenterConfigTest.java | 6 ++--- .../apache/dubbo/configcenter/Constants.java | 24 ------------------- .../apollo/ApolloDynamicConfiguration.java | 10 ++++---- .../consul/ConsulDynamicConfiguration.java | 2 +- .../etcd/EtcdDynamicConfiguration.java | 2 +- .../ZookeeperDynamicConfiguration.java | 2 +- .../ZookeeperDynamicConfigurationFactory.java | 1 - 11 files changed, 19 insertions(+), 55 deletions(-) delete mode 100644 dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/Constants.java diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java index 15720acf9..a058ccadf 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java @@ -184,4 +184,9 @@ public interface CommonConstants { String DUBBO_LABELS = "dubbo.labels"; String DUBBO_ENV_KEYS = "dubbo.env.keys"; + + String CONFIG_CONFIGFILE_KEY = "config-file"; + String CONFIG_ENABLE_KEY = "highest-priority"; + String CONFIG_NAMESPACE_KEY = "namespace"; + String CHECK_KEY = "check"; } diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/Constants.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/Constants.java index 7b489a3e2..6373c048b 100644 --- a/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/Constants.java +++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/Constants.java @@ -36,7 +36,6 @@ public class Constants implements CommonConstants, org.apache.dubbo.rpc.Constants, org.apache.dubbo.rpc.protocol.dubbo.Constants, org.apache.dubbo.common.serialize.Constants, - org.apache.dubbo.configcenter.Constants, org.apache.dubbo.metadata.support.Constants, org.apache.dubbo.rpc.protocol.rest.Constants, org.apache.dubbo.registry.Constants { diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java index 28d3c5a56..1198826a9 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java @@ -28,16 +28,11 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_VALUE; +import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_CONFIGFILE_KEY; +import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_ENABLE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY; -import static org.apache.dubbo.config.Constants.CONFIG_CONFIGFILE_KEY; -import static org.apache.dubbo.config.Constants.CONFIG_ENABLE_KEY; -import static org.apache.dubbo.config.Constants.CONFIG_TIMEOUT_KEY; import static org.apache.dubbo.config.Constants.ZOOKEEPER_PROTOCOL; -import static org.apache.dubbo.configcenter.Constants.CONFIG_CHECK_KEY; -import static org.apache.dubbo.configcenter.Constants.CONFIG_CLUSTER_KEY; -import static org.apache.dubbo.configcenter.Constants.CONFIG_GROUP_KEY; -import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY; /** * ConfigCenterConfig @@ -82,7 +77,7 @@ public class ConfigCenterConfig extends AbstractConfig { /* If the Config Center product you use have some special parameters that is not covered by this class, you can add it to here. For example, with XML: - + */ private Map parameters; @@ -133,7 +128,6 @@ public class ConfigCenterConfig extends AbstractConfig { this.address = address; } - @Parameter(key = CONFIG_CLUSTER_KEY) public String getCluster() { return cluster; } @@ -142,7 +136,6 @@ public class ConfigCenterConfig extends AbstractConfig { this.cluster = cluster; } - @Parameter(key = CONFIG_NAMESPACE_KEY) public String getNamespace() { return namespace; } @@ -151,7 +144,6 @@ public class ConfigCenterConfig extends AbstractConfig { this.namespace = namespace; } - @Parameter(key = CONFIG_GROUP_KEY) public String getGroup() { return group; } @@ -160,7 +152,6 @@ public class ConfigCenterConfig extends AbstractConfig { this.group = group; } - @Parameter(key = CONFIG_CHECK_KEY) public Boolean isCheck() { return check; } @@ -194,7 +185,6 @@ public class ConfigCenterConfig extends AbstractConfig { this.password = password; } - @Parameter(key = CONFIG_TIMEOUT_KEY) public Long getTimeout() { return timeout; } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/Constants.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/Constants.java index 97b0b936f..610763e2c 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/Constants.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/Constants.java @@ -73,11 +73,6 @@ public interface Constants { */ String PRODUCTION_ENVIRONMENT = "product"; - String CONFIG_CONFIGFILE_KEY = "config.config-file"; - String CONFIG_ENABLE_KEY = "config.highest-priority"; - String CONFIG_TIMEOUT_KEY = "config.timeout"; - String CONFIG_APPNAME_KEY = "config.app-name"; - String MULTICAST = "multicast"; diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigCenterConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigCenterConfigTest.java index cf10ed50b..6221d6e22 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigCenterConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigCenterConfigTest.java @@ -37,9 +37,9 @@ public class ConfigCenterConfigTest { config.setGroup("group"); config.setAddress("zookeeper://127.0.0.1:2181"); - Assertions.assertEquals("zookeeper://127.0.0.1:2181/ConfigCenterConfig?config.check=true&" + - "config.config-file=dubbo.properties&config.group=group&config.highest-priority=true&" + - "config.namespace=namespace&config.timeout=3000", + Assertions.assertEquals("zookeeper://127.0.0.1:2181/ConfigCenterConfig?check=true&" + + "config-file=dubbo.properties&group=group&highest-priority=true&" + + "namespace=namespace&timeout=3000", config.toUrl().toFullString() ); } diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/Constants.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/Constants.java deleted file mode 100644 index fcf1a51fc..000000000 --- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/Constants.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.dubbo.configcenter; - -public interface Constants { - String CONFIG_CLUSTER_KEY = "config.cluster"; - String CONFIG_NAMESPACE_KEY = "config.namespace"; - String CONFIG_GROUP_KEY = "config.group"; - String CONFIG_CHECK_KEY = "config.check"; -} diff --git a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java index f2ba3510d..443341204 100644 --- a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java @@ -44,10 +44,10 @@ import java.util.stream.Collectors; import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_VALUE; import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY; +import static org.apache.dubbo.common.constants.CommonConstants.CHECK_KEY; +import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY; import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN; -import static org.apache.dubbo.configcenter.Constants.CONFIG_CHECK_KEY; -import static org.apache.dubbo.configcenter.Constants.CONFIG_CLUSTER_KEY; -import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY; +import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY; /** * Apollo implementation, https://github.com/ctripcorp/apollo @@ -70,7 +70,7 @@ public class ApolloDynamicConfiguration implements DynamicConfiguration { // Instead of using Dubbo's configuration, I would suggest use the original configuration method Apollo provides. String configEnv = url.getParameter(APOLLO_ENV_KEY); String configAddr = getAddressWithProtocolPrefix(url); - String configCluster = url.getParameter(CONFIG_CLUSTER_KEY); + String configCluster = url.getParameter(CLUSTER_KEY); if (configEnv != null) { System.setProperty(APOLLO_ENV_KEY, configEnv); } @@ -84,7 +84,7 @@ public class ApolloDynamicConfiguration implements DynamicConfiguration { dubboConfig = ConfigService.getConfig(url.getParameter(CONFIG_NAMESPACE_KEY, DEFAULT_GROUP)); dubboConfigFile = ConfigService.getConfigFile(url.getParameter(CONFIG_NAMESPACE_KEY, DEFAULT_GROUP), ConfigFileFormat.Properties); // Decide to fail or to continue when failed to connect to remote server. - boolean check = url.getParameter(CONFIG_CHECK_KEY, true); + boolean check = url.getParameter(CHECK_KEY, true); if (dubboConfig.getSourceType() != ConfigSourceType.REMOTE) { if (check) { throw new IllegalStateException("Failed to connect to config center, the config center is Apollo, " + diff --git a/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java index f57f6393f..c91994ee8 100644 --- a/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java @@ -39,9 +39,9 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ExecutorService; import static java.util.concurrent.Executors.newCachedThreadPool; +import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR; import static org.apache.dubbo.configcenter.ConfigChangeType.ADDED; -import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY; /** * config center implementation for consul diff --git a/dubbo-configcenter/dubbo-configcenter-etcd/src/main/java/org/apache/dubbo/configcenter/support/etcd/EtcdDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-etcd/src/main/java/org/apache/dubbo/configcenter/support/etcd/EtcdDynamicConfiguration.java index 1b1010593..b90266828 100644 --- a/dubbo-configcenter/dubbo-configcenter-etcd/src/main/java/org/apache/dubbo/configcenter/support/etcd/EtcdDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-etcd/src/main/java/org/apache/dubbo/configcenter/support/etcd/EtcdDynamicConfiguration.java @@ -40,8 +40,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import static java.nio.charset.StandardCharsets.UTF_8; +import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR; -import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY; /** * The etcd implementation of {@link DynamicConfiguration} diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java index 096b71c02..f11bbe819 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java @@ -32,8 +32,8 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR; -import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY; /** * diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationFactory.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationFactory.java index 4d78133db..90a49bec9 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationFactory.java +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationFactory.java @@ -32,7 +32,6 @@ public class ZookeeperDynamicConfigurationFactory extends AbstractDynamicConfigu this.zookeeperTransporter = zookeeperTransporter; } - @Override protected DynamicConfiguration createDynamicConfiguration(URL url) { return new ZookeeperDynamicConfiguration(url, zookeeperTransporter); -- Gitee From 46486bb34123fb1c973514a38f939c8fb9868191 Mon Sep 17 00:00:00 2001 From: bailei Date: Thu, 19 Sep 2019 13:20:02 +0800 Subject: [PATCH 12/14] [Dubbo-4331] Improve api doc (#5070) --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 91862d847..92c20a32a 100644 --- a/pom.xml +++ b/pom.xml @@ -289,6 +289,7 @@ attach-javadoc jar + aggregate @@ -315,6 +316,11 @@ http://docs.oracle.com/javase/8/docs/api none + + org.apache.dubbo.demo,org.apache.dubbo.demo.* + + Apache Dubbo ${project.version} API + Apache Dubbo ${project.version} API -- Gitee From 87631aa992448e09cad350b9141afbae1cca09ef Mon Sep 17 00:00:00 2001 From: bailei Date: Thu, 19 Sep 2019 14:02:22 +0800 Subject: [PATCH 13/14] [Dubbo-5049]support annotation config id property to be a alias for a config bean. Fixes #5049 (#5063) LGTM --- .../DubboConfigBindingBeanPostProcessor.java | 30 ++++++++++++++++++- ...bboConfigBindingBeanPostProcessorTest.java | 16 ++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java index 64327b72b..9b181cbc8 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java @@ -17,6 +17,7 @@ package org.apache.dubbo.config.spring.beans.factory.annotation; import org.apache.dubbo.common.utils.Assert; +import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.AbstractConfig; import org.apache.dubbo.config.spring.context.annotation.DubboConfigBindingRegistrar; import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfigBinding; @@ -29,6 +30,10 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.annotation.AnnotationAwareOrderComparator; @@ -49,7 +54,8 @@ import static org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncl * @since 2.5.8 */ -public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware, InitializingBean { +public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware, InitializingBean + , BeanDefinitionRegistryPostProcessor { private final Log log = LogFactory.getLog(getClass()); @@ -67,6 +73,8 @@ public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, A private ApplicationContext applicationContext; + private BeanDefinitionRegistry beanDefinitionRegistry; + private boolean ignoreUnknownFields = true; private boolean ignoreInvalidFields = true; @@ -145,6 +153,15 @@ public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, A @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof AbstractConfig) { + String id = ((AbstractConfig) bean).getId(); + if (beanDefinitionRegistry != null && beanDefinitionRegistry instanceof DefaultListableBeanFactory) { + DefaultListableBeanFactory factory = (DefaultListableBeanFactory) beanDefinitionRegistry; + if (!StringUtils.isBlank(id) && !factory.hasAlias(beanName, id)) { + beanDefinitionRegistry.registerAlias(beanName, id); + } + } + } return bean; } @@ -203,4 +220,15 @@ public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, A return defaultDubboConfigBinder; } + @Override + public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { + if (this.beanDefinitionRegistry == null) { + this.beanDefinitionRegistry = registry; + } + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + //do nothing here + } } diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java index 62a9a2664..301c1d9d0 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java @@ -17,6 +17,7 @@ package org.apache.dubbo.config.spring.beans.factory.annotation; import org.apache.dubbo.config.ApplicationConfig; +import org.apache.dubbo.config.ProtocolConfig; import org.apache.dubbo.config.spring.context.config.NamePropertyDefaultValueDubboConfigBeanCustomizer; import org.apache.dubbo.config.spring.context.properties.DefaultDubboConfigBinder; @@ -52,6 +53,14 @@ public class DubboConfigBindingBeanPostProcessorTest { return new ApplicationConfig(); } + @Bean("dubbo-demo-protocol") + public ProtocolConfig protocolConfig() { + ProtocolConfig protocolConfig = new ProtocolConfig(); + protocolConfig.setName("dubbo"); + protocolConfig.setId("customConfigAlias"); + return protocolConfig; + } + @Bean public DubboConfigBindingBeanPostProcessor bindingBeanPostProcessor() { return new DubboConfigBindingBeanPostProcessor("dubbo.application", "dubbo-demo-application"); @@ -65,8 +74,15 @@ public class DubboConfigBindingBeanPostProcessorTest { ApplicationConfig applicationConfig = applicationContext.getBean(ApplicationConfig.class); + String[] aliases = applicationContext.getAliases("dubbo-demo-protocol"); + ProtocolConfig protocolConfigByName = applicationContext.getBean("dubbo-demo-protocol", ProtocolConfig.class); + ProtocolConfig protocolConfigById = applicationContext.getBean(protocolConfigByName.getId(), ProtocolConfig.class); + Assert.assertEquals("dubbo-demo-application", applicationConfig.getName()); Assert.assertEquals("mercyblitz", applicationConfig.getOwner()); Assert.assertEquals("Apache", applicationConfig.getOrganization()); + + Assert.assertArrayEquals(new String[]{"customConfigAlias"}, aliases); + Assert.assertEquals(protocolConfigByName, protocolConfigById); } } \ No newline at end of file -- Gitee From 79c61669b339d4ef1d47d5977d234a79216254cc Mon Sep 17 00:00:00 2001 From: Yuhao Bi Date: Fri, 20 Sep 2019 10:36:02 +0800 Subject: [PATCH 14/14] Stabilize EtcdMetadataReportTest (#5088) --- .../dubbo/metadata/store/etcd/EtcdMetadataReportTest.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/dubbo-metadata-report/dubbo-metadata-report-etcd/src/test/java/org/apache/dubbo/metadata/store/etcd/EtcdMetadataReportTest.java b/dubbo-metadata-report/dubbo-metadata-report-etcd/src/test/java/org/apache/dubbo/metadata/store/etcd/EtcdMetadataReportTest.java index 2f45171b4..fcb7b7674 100644 --- a/dubbo-metadata-report/dubbo-metadata-report-etcd/src/test/java/org/apache/dubbo/metadata/store/etcd/EtcdMetadataReportTest.java +++ b/dubbo-metadata-report/dubbo-metadata-report-etcd/src/test/java/org/apache/dubbo/metadata/store/etcd/EtcdMetadataReportTest.java @@ -32,7 +32,6 @@ import io.etcd.jetcd.launcher.EtcdClusterFactory; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import java.net.URI; @@ -44,6 +43,7 @@ import java.util.concurrent.CompletableFuture; import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE; import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE; +import static org.apache.dubbo.metadata.support.Constants.SYNC_REPORT_KEY; /** * Unit test for etcd metadata report @@ -63,7 +63,7 @@ public class EtcdMetadataReportTest { etcdCluster.start(); etcdClientForTest = Client.builder().endpoints(etcdCluster.getClientEndpoints()).build(); List clientEndPoints = etcdCluster.getClientEndpoints(); - this.registryUrl = URL.valueOf("etcd://" + clientEndPoints.get(0).getHost() + ":" + clientEndPoints.get(0).getPort()); + this.registryUrl = URL.valueOf("etcd://" + clientEndPoints.get(0).getHost() + ":" + clientEndPoints.get(0).getPort()).addParameter(SYNC_REPORT_KEY, true); etcdMetadataReportFactory = new EtcdMetadataReportFactory(); this.etcdMetadataReport = (EtcdMetadataReport) etcdMetadataReportFactory.createMetadataReport(registryUrl); } @@ -74,7 +74,6 @@ public class EtcdMetadataReportTest { } @Test - @Disabled("Disabled because https://github.com/apache/dubbo/issues/4185") public void testStoreProvider() throws Exception { String version = "1.0.0"; String group = null; @@ -120,7 +119,6 @@ public class EtcdMetadataReportTest { ServiceDefinitionBuilder.buildFullDefinition(interfaceClass, url.getParameters()); etcdMetadataReport.storeProviderMetadata(providerMetadataIdentifier, fullServiceDefinition); - Thread.sleep(1000); return providerMetadataIdentifier; } @@ -131,7 +129,6 @@ public class EtcdMetadataReportTest { Map tmp = new HashMap<>(); tmp.put("paramConsumerTest", "etcdConsumer"); etcdMetadataReport.storeConsumerMetadata(consumerIdentifier, tmp); - Thread.sleep(1000); return consumerIdentifier; } } -- Gitee