You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2019/01/07 13:20:46 UTC

[incubator-dubbo] 02/03: move refresh() into setter to avoid duplicate refresh during check.

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 824aaf9b5efa96b03cf71314263059fcd317288a
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Jan 7 21:10:17 2019 +0800

    move refresh() into setter to avoid duplicate refresh during check.
---
 .../dubbo/config/AbstractInterfaceConfig.java      | 62 +++++++++++-----------
 .../apache/dubbo/config/AbstractServiceConfig.java | 11 ++++
 .../org/apache/dubbo/config/ServiceConfig.java     | 38 +++++--------
 3 files changed, 54 insertions(+), 57 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 2976c13..6f41495 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
@@ -158,16 +158,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
 
         convertRegistryIdsToRegistries();
 
-        setRegistries(this.registries);
-
-        for (RegistryConfig registryConfig : registries) {
-            registryConfig.refresh();
-            if (StringUtils.isNotEmpty(registryConfig.getId())) {
-                registryConfig.setPrefix(Constants.REGISTRIES_SUFFIX);
-                registryConfig.refresh();
-            }
-        }
-
         for (RegistryConfig registryConfig : registries) {
             if (!registryConfig.isValid()) {
                 throw new IllegalStateException("No registry config found or it's not a valid config! " +
@@ -183,8 +173,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
         // for backward compatibility
         createApplicationIfAbsent();
 
-        application.refresh();
-
         if (!application.isValid()) {
             throw new IllegalStateException("No application config found or it's not a valid config! " +
                     "Please add <dubbo:application name=\"...\" /> to your spring config.");
@@ -206,7 +194,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
 
     protected void checkMonitor() {
         createMonitorIfAbsent();
-        monitor.refresh();
         if (!monitor.isValid()) {
             logger.info("There's no valid monitor config found, if you want to open monitor statistics for Dubbo, " +
                     "please make sure your monitor is configured properly.");
@@ -226,7 +213,6 @@ 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.");
@@ -238,8 +224,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
         if (configCenter == null) {
             return;
         }
-        // give jvm properties the chance to override local configs, e.g., -Ddubbo.configcenter.highestPriority
-        configCenter.refresh();
         prepareEnvironment();
     }
 
@@ -501,7 +485,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
     }
 
     private void convertRegistryIdsToRegistries() {
-        if (StringUtils.isEmpty(registryIds) && (registries == null || registries.isEmpty())) {
+        if (StringUtils.isEmpty(registryIds) && CollectionUtils.isEmpty(registries)) {
             Set<String> configedRegistries = new HashSet<>();
             configedRegistries.addAll(getSubProperties(Environment.getInstance().getExternalConfigurationMap(),
                     Constants.REGISTRIES_SUFFIX));
@@ -512,29 +496,32 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
         }
 
         if (StringUtils.isEmpty(registryIds)) {
-            if (registries == null || registries.isEmpty()) {
-                registries = ConfigManager.getInstance().getDefaultRegistries()
+            if (CollectionUtils.isEmpty(registries)) {
+                setRegistries(
+                        ConfigManager.getInstance().getDefaultRegistries()
                         .filter(CollectionUtils::isNotEmpty)
-                        .orElse(Arrays.asList(new RegistryConfig()));
+                        .orElse(Arrays.asList(new RegistryConfig()))
+                );
             }
         } else {
-            String[] arr = Constants.COMMA_SPLIT_PATTERN.split(registryIds);
-            if (registries == null || registries.isEmpty()) {
-                registries = new ArrayList<>();
-            }
-            Arrays.stream(arr).forEach(id -> {
-                if (registries.stream().noneMatch(reg -> reg.getId().equals(id))) {
-                    registries.add(ConfigManager.getInstance().getRegistry(id).orElseGet(() -> {
+            String[] ids = Constants.COMMA_SPLIT_PATTERN.split(registryIds);
+            List<RegistryConfig> tmpRegistries = CollectionUtils.isNotEmpty(registries) ? registries : new ArrayList<>();
+            Arrays.stream(ids).forEach(id -> {
+                if (tmpRegistries.stream().noneMatch(reg -> reg.getId().equals(id))) {
+                    tmpRegistries.add(ConfigManager.getInstance().getRegistry(id).orElseGet(() -> {
                         RegistryConfig registryConfig = new RegistryConfig();
                         registryConfig.setId(id);
                         return registryConfig;
                     }));
                 }
             });
-            if (registries.size() > arr.length) {
+
+            if (tmpRegistries.size() > ids.length) {
                 throw new IllegalStateException("Too much registries found, the registries assigned to this service " +
-                        "are :" + registryIds + ", but got " + registries.size() + " registries!");
+                        "are :" + registryIds + ", but got " + tmpRegistries.size() + " registries!");
             }
+
+            setRegistries(tmpRegistries);
         }
 
     }
@@ -545,13 +532,14 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
         if (registries == null || registries.isEmpty()) {
             String address = ConfigUtils.getProperty("dubbo.registry.address");
             if (address != null && address.length() > 0) {
-                registries = new ArrayList<RegistryConfig>();
+                List<RegistryConfig> tmpRegistries = new ArrayList<RegistryConfig>();
                 String[] as = address.split("\\s*[|]+\\s*");
                 for (String a : as) {
                     RegistryConfig registryConfig = new RegistryConfig();
                     registryConfig.setAddress(a);
-                    registries.add(registryConfig);
+                    tmpRegistries.add(registryConfig);
                 }
+                setRegistries(tmpRegistries);
             }
         }
     }
@@ -685,6 +673,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
     }
 
     public void setApplication(ApplicationConfig application) {
+        application.refresh();
         this.application = application;
         ConfigManager.getInstance().setApplication(this.application);
     }
@@ -722,6 +711,13 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
 
     @SuppressWarnings({"unchecked"})
     public void setRegistries(List<? extends RegistryConfig> registries) {
+        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);
     }
@@ -744,6 +740,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
     }
 
     public void setMonitor(MonitorConfig monitor) {
+        monitor.refresh();
         this.monitor = monitor;
         ConfigManager.getInstance().setMonitor(monitor);
     }
@@ -762,6 +759,8 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
     }
 
     public void setConfigCenter(ConfigCenterConfig configCenter) {
+        // give jvm properties the chance to override local configs, e.g., -Ddubbo.configcenter.highestPriority
+        configCenter.refresh();
         this.configCenter = configCenter;
         ConfigManager.getInstance().setConfigCenter(configCenter);
     }
@@ -803,6 +802,7 @@ 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 b898410..e8d35ff 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,6 +17,7 @@
 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;
@@ -200,6 +201,16 @@ public abstract class AbstractServiceConfig extends AbstractInterfaceConfig {
 
     @SuppressWarnings({"unchecked"})
     public void setProtocols(List<? extends ProtocolConfig> protocols) {
+        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);
     }
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 1d5b1c4..c7acc30 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
@@ -784,7 +784,6 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
 
     private void checkDefault() {
         createProviderIfAbsent();
-        provider.refresh();
     }
 
     private void createProviderIfAbsent() {
@@ -799,26 +798,11 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
         if ((protocols == null || protocols.isEmpty()) && provider != null) {
             setProtocols(provider.getProtocols());
         }
-
         convertProtocolIdsToProtocols();
-
-        // set after all protocols are generated
-        setProtocols(this.protocols);
-
-        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();
-            }
-        }
     }
 
     private void convertProtocolIdsToProtocols() {
-        if (StringUtils.isEmpty(protocolIds) && (protocols == null || protocols.isEmpty())) {
+        if (StringUtils.isEmpty(protocolIds) && CollectionUtils.isEmpty(protocols)) {
             List<String> configedProtocols = new ArrayList<>();
             configedProtocols.addAll(getSubProperties(Environment.getInstance()
                     .getExternalConfigurationMap(), Constants.PROTOCOLS_SUFFIX));
@@ -829,29 +813,30 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
         }
 
         if (StringUtils.isEmpty(protocolIds)) {
-            if (protocols == null || protocols.isEmpty()) {
-                protocols = ConfigManager.getInstance().getDefaultProtocols()
+            if (CollectionUtils.isEmpty(protocols)) {
+               setProtocols(
+                       ConfigManager.getInstance().getDefaultProtocols()
                         .filter(CollectionUtils::isNotEmpty)
-                        .orElse(Arrays.asList(new ProtocolConfig()));
+                        .orElse(Arrays.asList(new ProtocolConfig()))
+               );
             }
         } else {
             String[] arr = Constants.COMMA_SPLIT_PATTERN.split(protocolIds);
-            if (protocols == null || protocols.isEmpty()) {
-                protocols = new ArrayList<>();
-            }
+            List<ProtocolConfig> tmpProtocols = CollectionUtils.isNotEmpty(protocols) ? protocols : new ArrayList<>();
             Arrays.stream(arr).forEach(id -> {
-                if (protocols.stream().noneMatch(prot -> prot.getId().equals(id))) {
-                    protocols.add(ConfigManager.getInstance().getProtocol(id).orElseGet(() -> {
+                if (tmpProtocols.stream().noneMatch(prot -> prot.getId().equals(id))) {
+                    tmpProtocols.add(ConfigManager.getInstance().getProtocol(id).orElseGet(() -> {
                         ProtocolConfig protocolConfig = new ProtocolConfig();
                         protocolConfig.setId(id);
                         return protocolConfig;
                     }));
                 }
             });
-            if (protocols.size() > arr.length) {
+            if (tmpProtocols.size() > arr.length) {
                 throw new IllegalStateException("Too much protocols found, the protocols comply to this service are :" + protocolIds + " but got " + protocols
                         .size() + " registries!");
             }
+            setProtocols(tmpProtocols);
         }
     }
 
@@ -935,6 +920,7 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
     }
 
     public void setProvider(ProviderConfig provider) {
+        provider.refresh();
         this.provider = provider;
         ConfigManager.getInstance().addProvider(provider);
     }