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();

Reply via email to