This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit 9897aa3d7273e3eb96910cfdc09709a77cae50b0 Author: ken.lj <[email protected]> AuthorDate: Mon Dec 24 14:49:22 2018 +0800 remove appConfigs cache to support one service/reference registered more than one time (if users don't explicitly add id, cache can not work properly) --- .../apache/dubbo/common/config/Environment.java | 37 +++------------------- .../org/apache/dubbo/config/AbstractConfig.java | 16 +++++++--- 2 files changed, 17 insertions(+), 36 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java index 74c9d30..4526fbc 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java @@ -35,7 +35,6 @@ public class Environment { private Map<String, EnvironmentConfiguration> environmentConfigs = new ConcurrentHashMap<>(); private Map<String, InmemoryConfiguration> externalConfigs = new ConcurrentHashMap<>(); private Map<String, InmemoryConfiguration> appExternalConfigs = new ConcurrentHashMap<>(); - private Map<String, InmemoryConfiguration> appConfigs = new ConcurrentHashMap<>(); private Map<String, String> externalConfigurationMap = new HashMap<>(); private Map<String, String> appExternalConfigurationMap = new HashMap<>(); @@ -79,10 +78,6 @@ public class Environment { return environmentConfigs.computeIfAbsent(toKey(prefix, id), k -> new EnvironmentConfiguration(prefix, id)); } - public InmemoryConfiguration getAppConfig(String prefix, String id) { - return appConfigs.get(toKey(prefix, id)); - } - public void setExternalConfigMap(Map<String, String> externalConfiguration) { this.externalConfigurationMap = externalConfiguration; } @@ -99,14 +94,6 @@ public class Environment { return appExternalConfigurationMap; } - public void addAppConfig(String prefix, String id, Map<String, String> properties) { - appConfigs.computeIfAbsent(toKey(prefix, id), k -> { - InmemoryConfiguration configuration = new InmemoryConfiguration(prefix, id); - configuration.addProperties(properties); - return configuration; - }); - } - public void updateExternalConfigurationMap(Map<String, String> externalMap) { this.externalConfigurationMap.putAll(externalMap); } @@ -124,27 +111,13 @@ public class Environment { * @param id * @return */ - public Configuration getConfiguration(String prefix, String id) { + public CompositeConfiguration getConfiguration(String prefix, String id) { CompositeConfiguration compositeConfiguration = new CompositeConfiguration(); - InmemoryConfiguration appConfig = this.getAppConfig(prefix, id); // Config center has the highest priority - if (!configCenterFirst) { - compositeConfiguration.addConfiguration(this.getSystemConfig(prefix, id)); - if (appConfig != null) { - compositeConfiguration.addConfiguration(appConfig); - } - compositeConfiguration.addConfiguration(this.getAppExternalConfig(prefix, id)); - compositeConfiguration.addConfiguration(this.getExternalConfig(prefix, id)); - compositeConfiguration.addConfiguration(this.getPropertiesConfig(prefix, id)); - } else { - compositeConfiguration.addConfiguration(this.getSystemConfig(prefix, id)); - compositeConfiguration.addConfiguration(this.getAppExternalConfig(prefix, id)); - compositeConfiguration.addConfiguration(this.getExternalConfig(prefix, id)); - if (appConfig != null) { - compositeConfiguration.addConfiguration(appConfig); - } - compositeConfiguration.addConfiguration(this.getPropertiesConfig(prefix, id)); - } + compositeConfiguration.addConfiguration(this.getSystemConfig(prefix, id)); + compositeConfiguration.addConfiguration(this.getAppExternalConfig(prefix, id)); + compositeConfiguration.addConfiguration(this.getExternalConfig(prefix, id)); + compositeConfiguration.addConfiguration(this.getPropertiesConfig(prefix, id)); return compositeConfiguration; } 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 952853d..a52b355 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 @@ -18,8 +18,9 @@ package org.apache.dubbo.config; import org.apache.dubbo.common.Constants; import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.config.Configuration; +import org.apache.dubbo.common.config.CompositeConfiguration; import org.apache.dubbo.common.config.Environment; +import org.apache.dubbo.common.config.InmemoryConfiguration; import org.apache.dubbo.common.extension.ExtensionLoader; import org.apache.dubbo.common.logger.Logger; import org.apache.dubbo.common.logger.LoggerFactory; @@ -536,9 +537,16 @@ public abstract class AbstractConfig implements Serializable { */ public void refresh() { try { - Environment env = Environment.getInstance(); - env.addAppConfig(getPrefix(), getId(), getMetaData()); - Configuration configuration = env.getConfiguration(getPrefix(), getId()); + CompositeConfiguration compositeConfiguration = Environment.getInstance().getConfiguration(getPrefix(), getId()); + InmemoryConfiguration configuration = new InmemoryConfiguration(getPrefix(), getId()); + configuration.addProperties(getMetaData()); + if (Environment.getInstance().isConfigCenterFirst()) { + // The sequence would be: SystemConfiguration -> ExternalConfiguration -> AppExternalConfiguration -> AbstractConfig -> PropertiesConfiguration + compositeConfiguration.addConfiguration(3,configuration); + } else { + // The sequence would be: SystemConfiguration -> AbstractConfig -> ExternalConfiguration -> AppExternalConfiguration -> PropertiesConfiguration + compositeConfiguration.addConfiguration(1, configuration); + } // loop methods, get override value and set the new value back to method Method[] methods = getClass().getMethods();
