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/07/27 07:50:50 UTC

[dubbo] 03/04: Merge remote-tracking branch 'origin/cloud-native' into cloud-native

This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch cloud-native
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit 56c931eae3360f6f68adb7295279ed00fce2a7f6
Merge: 19c5bab 758b49f
Author: ken.lj <ke...@gmail.com>
AuthorDate: Sat Jul 27 15:17:58 2019 +0800

    Merge remote-tracking branch 'origin/cloud-native' into cloud-native
    
    # Conflicts:
    #	dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
    #	dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java
    #	dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java
    #	dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java

 dubbo-bootstrap/pom.xml                            |  40 +-
 .../dubbo/bootstrap/ApplicationSettings.java       | 127 -----
 .../org/apache/dubbo/bootstrap/DubboBootstrap.java | 399 +++++++------
 .../apache/dubbo/bootstrap/ProtocolSettings.java   | 215 -------
 .../apache/dubbo/bootstrap/ReferenceSettings.java  | 334 -----------
 .../apache/dubbo/bootstrap/RegistrySettings.java   | 164 ------
 .../apache/dubbo/bootstrap/ServiceSettings.java    | 384 -------------
 .../apache/dubbo/bootstrap/DubboBootstrapTest.java |  14 -
 .../bootstrap/DubboServiceConsumerBootstrap.java   |  36 +-
 .../bootstrap/DubboServiceProviderBootstrap.java   |  25 +-
 dubbo-common/pom.xml                               |   4 +
 .../config/configcenter/ConfigChangeEvent.java     |   6 +-
 .../config/configcenter/ConfigurationListener.java |   4 +-
 .../config/configcenter/DynamicConfiguration.java  | 104 +++-
 .../configcenter/DynamicConfigurationFactory.java  |  20 +-
 .../file/FileSystemDynamicConfiguration.java       | 628 +++++++++++++++++++++
 .../FileSystemDynamicConfigurationFactory.java     |  21 +-
 .../configcenter/nop/NopDynamicConfiguration.java  |   1 +
 .../nop/NopDynamicConfigurationFactory.java        |   1 +
 .../wrapper/CompositeDynamicConfiguration.java     |   3 -
 .../apache/dubbo/common/utils/ReflectUtils.java    |  30 +-
 ...config.configcenter.DynamicConfigurationFactory |   3 +-
 .../DynamicConfigurationFactoryTest.java           |  25 +-
 .../file/FileSystemDynamicConfigurationTest.java   | 169 ++++++
 dubbo-common/src/test/resources/log4j.xml          |   4 +-
 .../dubbo/config/AbstractInterfaceConfig.java      |  23 +-
 .../org/apache/dubbo/config/RegistryConfig.java    |  18 +-
 .../org/apache/dubbo/config/ServiceConfig.java     |  17 +-
 .../dubbo/config/builders/AbstractBuilder.java     |   2 +-
 .../apache/dubbo/config/context/ConfigManager.java | 433 +++++++-------
 .../metadata/ServiceInstancePortCustomizer.java    |   1 -
 .../dubbo/config/context/ConfigManagerTest.java    |  71 +++
 .../ConfigurableMetadataServiceExporterTest.java   |   4 +-
 .../resources/META-INF/spring/dubbo-provider.xml   |  16 +-
 .../support/nacos/NacosDynamicConfiguration.java   |  27 +-
 dubbo-dependencies-bom/pom.xml                     |  11 +-
 .../client/FileSystemServiceDiscovery.java         | 114 ++++
 .../dubbo/registry/etcd/EtcdServiceDiscovery.java  | 138 ++++-
 .../registry/etcd/EtcdServiceDiscoveryFactory.java |   2 +-
 ...e.dubbo.registry.client.ServiceDiscoveryFactory |   1 +
 .../zookeeper/ZookeeperServiceDiscovery.java       |   2 +-
 .../org/apache/dubbo/remoting/etcd/EtcdClient.java |   8 +
 .../dubbo/remoting/etcd/jetcd/JEtcdClient.java     |   5 +
 .../remoting/etcd/jetcd/JEtcdClientWrapper.java    |  20 +
 44 files changed, 1902 insertions(+), 1772 deletions(-)

diff --cc dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
index 5d69982,6a2237f..b558740
--- a/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
+++ b/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
@@@ -71,11 -68,14 +68,16 @@@ import java.util.concurrent.locks.Reent
  import java.util.function.Consumer;
  import java.util.stream.Collectors;
  
+ import static java.util.Arrays.asList;
  import static java.util.concurrent.Executors.newSingleThreadExecutor;
  import static org.apache.dubbo.common.config.ConfigurationUtils.parseProperties;
+ import static org.apache.dubbo.common.config.configcenter.DynamicConfiguration.getDynamicConfiguration;
  import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
+ import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;
+ import static org.apache.dubbo.config.context.ConfigManager.getInstance;
  import static org.apache.dubbo.registry.support.AbstractRegistryFactory.getRegistries;
 +import static org.apache.dubbo.remoting.Constants.CLIENT_KEY;
++import static org.apache.dubbo.remoting.Constants.CLIENT_KEY;
  
  /**
   * The bootstrap class of Dubbo
@@@ -326,27 -408,26 +410,29 @@@ public class DubboBootstrap 
       * there's no config center specified explicitly.
       */
      private void useRegistryAsConfigCenterIfNecessary() {
-         ConfigManager configManager = ConfigManager.getInstance();
-         configManager.getDefaultRegistries().ifPresent(registryConfigs -> {
-             for (RegistryConfig registryConfig : registryConfigs) {
-                 // we use the loading status of DynamicConfiguration to decide whether ConfigCenter has been initiated.
-                 Environment.getInstance().getDynamicConfiguration().orElseGet(() -> {
-                     Set<ConfigCenterConfig> configCenters = configManager.getConfigCenters();
-                     if (CollectionUtils.isEmpty(configCenters)) {
-                         ConfigCenterConfig cc = new ConfigCenterConfig();
-                         cc.setParameters(registryConfig.getParameters() == null ? new HashMap<>() : registryConfig.getParameters());
-                         cc.getParameters().put(CLIENT_KEY,registryConfig.getClient());
-                         cc.setProtocol(registryConfig.getProtocol());
-                         cc.setAddress(registryConfig.getAddress());
-                         cc.setNamespace(registryConfig.getGroup());
-                         cc.setHighestPriority(false);
-                         configManager.addConfigCenter(cc);
-                     }
-                     return null;
-                 });
-             }
-             startConfigCenter();
+         // we use the loading status of DynamicConfiguration to decide whether ConfigCenter has been initiated.
+         if (Environment.getInstance().getDynamicConfiguration().isPresent()) {
+             return;
+         }
+ 
+         if (CollectionUtils.isNotEmpty(configManager.getConfigCenters())) {
+             return;
+         }
+ 
+         configManager.getRegistries().forEach(registryConfig -> {
+             String protocol = registryConfig.getProtocol();
+             String id = "config-center-" + protocol + "-" + registryConfig.getPort();
+             ConfigCenterConfig cc = new ConfigCenterConfig();
+             cc.setId(id);
 -            cc.setProtocol(protocol);
++            cc.setParameters(registryConfig.getParameters() == null ? new HashMap<>() : registryConfig.getParameters());
++            cc.getParameters().put(CLIENT_KEY,registryConfig.getClient());
++            cc.setProtocol(registryConfig.getProtocol());
+             cc.setAddress(registryConfig.getAddress());
++            cc.setNamespace(registryConfig.getGroup());
+             cc.setHighestPriority(false);
+             configManager.addConfigCenter(cc);
          });
+         startConfigCenter();
      }
  
      private List<ServiceDiscovery> getServiceDiscoveries() {
@@@ -533,13 -605,13 +610,13 @@@
                  return null;
              }
              DynamicConfiguration dynamicConfiguration = getDynamicConfiguration(configCenter.toUrl());
 -            String configContent = dynamicConfiguration.getConfigs(configCenter.getConfigFile(), configCenter.getGroup());
 +            String configContent = dynamicConfiguration.getProperties(configCenter.getConfigFile(), configCenter.getGroup());
  
-             String appGroup = ConfigManager.getInstance().getApplication().orElse(new ApplicationConfig()).getName();
+             String appGroup = configManager.getApplication().orElse(new ApplicationConfig()).getName();
              String appConfigContent = null;
-             if (StringUtils.isNotEmpty(appGroup)) {
+             if (isNotEmpty(appGroup)) {
 -                appConfigContent = dynamicConfiguration.getConfigs
 +                appConfigContent = dynamicConfiguration.getProperties
-                         (StringUtils.isNotEmpty(configCenter.getAppConfigFile()) ? configCenter.getAppConfigFile() : configCenter.getConfigFile(),
+                         (isNotEmpty(configCenter.getAppConfigFile()) ? configCenter.getAppConfigFile() : configCenter.getConfigFile(),
                                  appGroup
                          );
              }
diff --cc dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java
index 51e7013,84b6ec3..a1dda52
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java
@@@ -117,11 -128,26 +117,25 @@@ public interface DynamicConfiguration e
      }
  
      /**
 -     * {@see #getConfig(String, String, long)}
 -     * <p>
       * This method are mostly used to get a compound config file, such as a complete dubbo.properties file.
 +     * Also {@see #getConfig(String, String, long)}
       */
 -    String getConfigs(String key, String group, long timeout) throws IllegalStateException;
 +    String getProperties(String key, String group, long timeout) throws IllegalStateException;
  
+ 
+     /**
+      * Publish Config mapped to the given key under the {@link #DEFAULT_GROUP default group}
+      *
+      * @param key     the key to represent a configuration
+      * @param content the content of configuration
+      * @return <code>true</code> if success, or <code>false</code>
+      * @throws UnsupportedOperationException If the under layer does not support
+      * @since 2.7.4
+      */
+     default boolean publishConfig(String key, String content) throws UnsupportedOperationException {
+         return publishConfig(key, DEFAULT_GROUP, content);
+     }
+ 
      /**
       * Publish Config mapped to the given key and the given group.
       *
@@@ -170,12 -232,23 +220,23 @@@
       * @throws IllegalStateException         If timeout exceeds
       * @since 2.7.4
       */
-     default SortedMap<String, String> getConfigs(String group, long timeout) throws UnsupportedOperationException,
+     default Map<String, String> getConfigs(String group, long timeout) throws UnsupportedOperationException,
              IllegalStateException {
-         SortedMap<String, String> configs = new TreeMap<>();
-         SortedSet<String> configKeys = getConfigKeys(group);
+         Map<String, String> configs = new LinkedHashMap<>();
+         Set<String> configKeys = getConfigKeys(group);
 -        configKeys.forEach(key -> configs.put(key, getConfig(key, group, timeout)));
 +        configKeys.forEach(key -> configs.put(key, getString(key)));
-         return Collections.unmodifiableSortedMap(configs);
+         return Collections.unmodifiableMap(configs);
+     }
+ 
+     /**
+      * Close the configuration
+      *
+      * @throws Exception
+      * @since 2.7.4
+      */
+     @Override
+     default void close() throws Exception {
+         throw new UnsupportedOperationException();
      }
  
      /**
@@@ -190,12 -263,16 +251,25 @@@
                  .getDynamicConfiguration(null));
      }
  
+     /**
+      * Get the instance of {@link DynamicConfiguration} by the specified connection {@link URL}
+      *
+      * @param connectionURL
+      * @return non-null
+      * @since 2.7.4
+      */
+     static DynamicConfiguration getDynamicConfiguration(URL connectionURL) {
+         String protocol = connectionURL.getProtocol();
+         DynamicConfigurationFactory factory = getDynamicConfigurationFactory(protocol);
+         return factory.getDynamicConfiguration(connectionURL);
+     }
++
 +     /**
 +     * The format is '{interfaceName}:[version]:[group]'
 +     *
 +     * @return
 +     */
 +     static String getRuleKey(URL url) {
 +        return url.getColonSeparatedKey();
 +    }
  }
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java
index abcc062,a5196df..de0a884
--- 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
@@@ -179,14 -180,14 +180,15 @@@ public class RegistryConfig extends Abs
      public void setAddress(String address) {
          this.address = address;
          if (address != null) {
-             int i = address.indexOf("://");
-             if (i > 0) {
-                 this.updateIdIfAbsent(address.substring(0, i));
-                 this.updateProtocolIfAbsent(address.substring(0, i));
-                 int port = address.lastIndexOf(":");
-                 if (port > 0) {
-                     this.updatePortIfAbsent(StringUtils.parseInteger(address.substring(port + 1)));
-                 }
+             try {
+                 URL url = URL.valueOf(address);
++                this.updateIdIfAbsent(url.getProtocol());
++                this.updateProtocolIfAbsent(url.getProtocol());
++                this.updatePortIfAbsent(url.getPort());
+                 setUsername(url.getUsername());
+                 setPassword(url.getPassword());
 -                setProtocol(url.getProtocol());
 -                setPort(url.getPort());
+                 setParameters(url.getParameters());
+             } catch (Exception ignored) {
              }
          }
      }
diff --cc dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
index 20253bd,6bcafcd..468c5cb
--- a/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
+++ b/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
@@@ -46,9 -46,9 +46,7 @@@ import static com.alibaba.nacos.api.Pro
  import static com.alibaba.nacos.api.PropertyKeyConst.SECRET_KEY;
  import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
  import static com.alibaba.nacos.client.naming.utils.UtilAndComs.NACOS_NAMING_LOG_NAME;
--import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY;
  import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPERATOR;
--import static org.apache.dubbo.common.constants.CommonConstants.PROPERTIES_CHAR_SEPERATOR;
  import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;
  
  /**