This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch 2.7.0-release in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit a02f7a689434fe37dd11fe54ca353989f878848d Author: ken.lj <[email protected]> AuthorDate: Wed Jan 9 13:33:28 2019 +0800 refresh only once --- .../dubbo/config/AbstractInterfaceConfig.java | 76 ++++++++++------------ .../apache/dubbo/config/AbstractServiceConfig.java | 16 +---- .../org/apache/dubbo/config/ProtocolConfig.java | 12 ++++ .../org/apache/dubbo/config/ReferenceConfig.java | 14 ++-- .../org/apache/dubbo/config/RegistryConfig.java | 9 +++ .../org/apache/dubbo/config/ServiceConfig.java | 17 ++--- .../apache/dubbo/config/context/ConfigManager.java | 12 ++++ 7 files changed, 89 insertions(+), 67 deletions(-) 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 8f5701a..764bbe9 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 @@ -205,7 +205,15 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { return; } ConfigManager configManager = ConfigManager.getInstance(); - setMonitor(configManager.getMonitor().orElse(new MonitorConfig())); + setMonitor( + configManager + .getMonitor() + .orElseGet(() -> { + MonitorConfig monitorConfig = new MonitorConfig(); + monitorConfig.refresh(); + return monitorConfig; + }) + ); } protected void checkMetadataReport() { @@ -213,6 +221,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { if (metadataReportConfig == null) { setMetadataReportConfig(new MetadataReportConfig()); } + metadataReportConfig.refresh(); if (!metadataReportConfig.isValid()) { logger.warn("There's no valid metadata config found, if you are using the simplified mode of registry url, " + "please make sure you have a metadata address configured properly."); @@ -220,11 +229,11 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } - void checkConfigCenter() { - if (configCenter == null) { - return; + void startConfigCenter() { + if (configCenter != null) { + prepareEnvironment(); } - prepareEnvironment(); + ConfigManager.getInstance().refreshAll(); } private void prepareEnvironment() { @@ -500,7 +509,11 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { setRegistries( ConfigManager.getInstance().getDefaultRegistries() .filter(CollectionUtils::isNotEmpty) - .orElse(Arrays.asList(new RegistryConfig())) + .orElseGet(() -> { + RegistryConfig registryConfig = new RegistryConfig(); + registryConfig.refresh(); + return Arrays.asList(registryConfig); + }) ); } } else { @@ -511,6 +524,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { tmpRegistries.add(ConfigManager.getInstance().getRegistry(id).orElseGet(() -> { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setId(id); + registryConfig.refresh(); return registryConfig; })); } @@ -537,6 +551,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { for (String a : as) { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress(a); + registryConfig.refresh(); tmpRegistries.add(registryConfig); } setRegistries(tmpRegistries); @@ -558,7 +573,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { cc.setAddress(rc.getAddress()); cc.setHighestPriority(false); setConfigCenter(cc); - prepareEnvironment(); + startConfigCenter(); return null; }); }); @@ -673,12 +688,8 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } public void setApplication(ApplicationConfig application) { - if (application == null) { - return; - } - application.refresh(); - this.application = application; ConfigManager.getInstance().setApplication(this.application); + this.application = application; } private void createApplicationIfAbsent() { @@ -686,7 +697,15 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { return; } ConfigManager configManager = ConfigManager.getInstance(); - setApplication(configManager.getApplication().orElse(new ApplicationConfig())); + setApplication( + configManager + .getApplication() + .orElseGet(() -> { + ApplicationConfig applicationConfig = new ApplicationConfig(); + applicationConfig.refresh(); + return applicationConfig; + }) + ); } public ModuleConfig getModule() { @@ -694,11 +713,8 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } public void setModule(ModuleConfig module) { - if (module == null) { - return; - } - this.module = module; ConfigManager.getInstance().setModule(module); + this.module = module; } public RegistryConfig getRegistry() { @@ -717,18 +733,8 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { @SuppressWarnings({"unchecked"}) public void setRegistries(List<? extends RegistryConfig> registries) { - if (registries == null) { - return; - } - for (RegistryConfig registryConfig : registries) { - registryConfig.refresh(); - if (StringUtils.isNotEmpty(registryConfig.getId())) { - registryConfig.setPrefix(Constants.REGISTRIES_SUFFIX); - registryConfig.refresh(); - } - } - this.registries = (List<RegistryConfig>) registries; ConfigManager.getInstance().addRegistries(this.registries); + this.registries = (List<RegistryConfig>) registries; } @Parameter(excluded = true) @@ -749,12 +755,8 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } public void setMonitor(MonitorConfig monitor) { - if (monitor == null) { - return; - } - monitor.refresh(); - this.monitor = monitor; ConfigManager.getInstance().setMonitor(monitor); + this.monitor = monitor; } public String getOwner() { @@ -771,13 +773,8 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } public void setConfigCenter(ConfigCenterConfig configCenter) { - if (configCenter == null) { - return; - } - // give jvm properties the chance to override local configs, e.g., -Ddubbo.configcenter.highestPriority - configCenter.refresh(); - this.configCenter = configCenter; ConfigManager.getInstance().setConfigCenter(configCenter); + this.configCenter = configCenter; } public Integer getCallbacks() { @@ -817,7 +814,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } public void setMetadataReportConfig(MetadataReportConfig metadataReportConfig) { - metadataReportConfig.refresh(); this.metadataReportConfig = metadataReportConfig; } 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 111fdb5..0e996f9 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,7 +17,6 @@ package org.apache.dubbo.config; import org.apache.dubbo.common.Constants; -import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.context.ConfigManager; import org.apache.dubbo.config.support.Parameter; import org.apache.dubbo.rpc.ExporterListener; @@ -201,21 +200,8 @@ public abstract class AbstractServiceConfig extends AbstractInterfaceConfig { @SuppressWarnings({"unchecked"}) public void setProtocols(List<? extends ProtocolConfig> protocols) { - if (protocols == null) { - return; - } - for (ProtocolConfig protocolConfig : protocols) { - if (StringUtils.isEmpty(protocolConfig.getName())) { - protocolConfig.setName(Constants.DUBBO_VERSION_KEY); - } - protocolConfig.refresh(); - if (StringUtils.isNotEmpty(protocolConfig.getId())) { - protocolConfig.setPrefix(Constants.PROTOCOLS_SUFFIX); - protocolConfig.refresh(); - } - } - this.protocols = (List<ProtocolConfig>) protocols; ConfigManager.getInstance().addProtocols(this.protocols); + this.protocols = (List<ProtocolConfig>) protocols; } public ProtocolConfig getProtocol() { diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ProtocolConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ProtocolConfig.java index f419244..5f60b4f 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ProtocolConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ProtocolConfig.java @@ -534,6 +534,18 @@ public class ProtocolConfig extends AbstractConfig { } @Override + public void refresh() { + if (StringUtils.isEmpty(this.getName())) { + this.setName(Constants.DUBBO_VERSION_KEY); + } + super.refresh(); + if (StringUtils.isNotEmpty(this.getId())) { + this.setPrefix(Constants.PROTOCOLS_SUFFIX); + super.refresh(); + } + } + + @Override @Parameter(excluded = true) public boolean isValid() { return StringUtils.isNotEmpty(name); 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 c002b54..d52f03c 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 @@ -192,7 +192,7 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig { throw new IllegalStateException("<dubbo:reference interface=\"\" /> interface not allow null!"); } completeCompoundConfigs(); - checkConfigCenter(); + startConfigCenter(); // get consumer's global configuration checkDefault(); this.refresh(); @@ -410,15 +410,21 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig { private void checkDefault() { createConsumerIfAbsent(); - consumer.refresh(); } private void createConsumerIfAbsent() { if (consumer != null) { return; } - setConsumer(ConfigManager.getInstance() - .getDefaultConsumer().orElse(new 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/RegistryConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java index 85963ef..43d683c 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java @@ -408,6 +408,15 @@ public class RegistryConfig extends AbstractConfig { } @Override + public void refresh() { + super.refresh(); + if (StringUtils.isNotEmpty(this.getId())) { + this.setPrefix(Constants.REGISTRIES_SUFFIX); + super.refresh(); + } + } + + @Override @Parameter(excluded = true) public boolean isValid() { // empty protocol will default to 'dubbo' 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 bbed4fd..18f8819 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 @@ -263,8 +263,8 @@ public class ServiceConfig<T> extends AbstractServiceConfig { public void checkAndUpdateSubConfigs() { // Use default configs defined explicitly on global configs completeCompoundConfigs(); - // Config Center should always being checked and inited first. - checkConfigCenter(); + // Config Center should always being started first. + startConfigCenter(); checkDefault(); checkApplication(); checkRegistry(); @@ -817,7 +817,11 @@ public class ServiceConfig<T> extends AbstractServiceConfig { setProtocols( ConfigManager.getInstance().getDefaultProtocols() .filter(CollectionUtils::isNotEmpty) - .orElse(Arrays.asList(new ProtocolConfig())) + .orElseGet(() -> { + ProtocolConfig protocolConfig = new ProtocolConfig(); + protocolConfig.refresh(); + return Arrays.asList(protocolConfig); + }) ); } } else { @@ -828,6 +832,7 @@ public class ServiceConfig<T> extends AbstractServiceConfig { tmpProtocols.add(ConfigManager.getInstance().getProtocol(id).orElseGet(() -> { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setId(id); + protocolConfig.refresh(); return protocolConfig; })); } @@ -920,12 +925,8 @@ public class ServiceConfig<T> extends AbstractServiceConfig { } public void setProvider(ProviderConfig provider) { - if (provider == null) { - return; - } - provider.refresh(); - this.provider = provider; ConfigManager.getInstance().addProvider(provider); + this.provider = provider; } @Parameter(excluded = true) diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/ConfigManager.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/ConfigManager.java index 6db5339..aa760be 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/ConfigManager.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/ConfigManager.java @@ -297,6 +297,18 @@ public class ConfigManager { return consumers; } + public void refreshAll() { + // refresh all configs here, + getApplication().ifPresent(ApplicationConfig::refresh); + getMonitor().ifPresent(MonitorConfig::refresh); + getModule().ifPresent(ModuleConfig::refresh); + + getProtocols().values().forEach(ProtocolConfig::refresh); + getRegistries().values().forEach(RegistryConfig::refresh); + getProviders().values().forEach(ProviderConfig::refresh); + getConsumers().values().forEach(ConsumerConfig::refresh); + } + private void checkDuplicate(AbstractConfig oldOne, AbstractConfig newOne) { if (oldOne != null && !oldOne.equals(newOne)) { String configName = oldOne.getClass().getSimpleName();
