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 2018/11/27 11:09:10 UTC

[incubator-dubbo] 01/06: store DynamicConfiguration reference in Environment

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

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

commit 3206dba956ae1d23fab1a2099ffd166974fe0ba9
Author: ken.lj <ke...@gmail.com>
AuthorDate: Fri Nov 23 20:10:01 2018 +0800

    store DynamicConfiguration reference in Environment
---
 .../org/apache/dubbo/common/config/Environment.java     | 17 +++++++++++++++--
 .../apache/dubbo/common/extension/ExtensionLoader.java  |  9 ---------
 .../apache/dubbo/config/AbstractInterfaceConfig.java    |  6 +-----
 .../org/apache/dubbo/config/ConfigCenterConfig.java     |  5 +----
 .../apache/dubbo/configcenter/ConfigurationUtils.java   | 12 ++++--------
 5 files changed, 21 insertions(+), 28 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 746fbc3..bc58ec9 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
@@ -36,11 +36,16 @@ public class Environment {
     private Map<String, InmemoryConfiguration> appExternalConfigs = new ConcurrentHashMap<>();
     private Map<String, InmemoryConfiguration> appConfigs = new ConcurrentHashMap<>();
 
-    private boolean configCenterFirst = true;
-
     private Map<String, String> externalConfigurationMap = new HashMap<>();
     private Map<String, String> appExternalConfigurationMap = new HashMap<>();
 
+    private boolean configCenterFirst = true;
+
+    /**
+     * FIXME, this instance will always be a type of DynamicConfiguration, ConfigCenterConfig will load the instance at startup and assign it to here.
+     */
+    private Configuration dynamicConfiguration;
+
     public static Environment getInstance() {
         return INSTANCE;
     }
@@ -155,4 +160,12 @@ public class Environment {
     public void setConfigCenterFirst(boolean configCenterFirst) {
         this.configCenterFirst = configCenterFirst;
     }
+
+    public Configuration getDynamicConfiguration() {
+        return dynamicConfiguration;
+    }
+
+    public void setDynamicConfiguration(Configuration dynamicConfiguration) {
+        this.dynamicConfiguration = dynamicConfiguration;
+    }
 }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
index 83a6c7f..1c0b62f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
@@ -44,7 +44,6 @@ import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.regex.Pattern;
-import java.util.stream.Collectors;
 
 /**
  * Load dubbo extensions
@@ -337,14 +336,6 @@ public class ExtensionLoader<T> {
     }
 
     /**
-     * Return all available extension instances.
-     */
-    public Set<T> getExtensions() {
-        return Collections.unmodifiableSet(getSupportedExtensions().stream().map(this::getExtension)
-                .collect(Collectors.toSet()));
-    }
-
-    /**
      * Return default extension, return <code>null</code> if it's not configured.
      */
     public T getDefaultExtension() {
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 438534d..be5b9e1 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
@@ -20,14 +20,12 @@ import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.Version;
 import org.apache.dubbo.common.config.Environment;
-import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.ConfigUtils;
 import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.common.utils.ReflectUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.common.utils.UrlUtils;
 import org.apache.dubbo.config.support.Parameter;
-import org.apache.dubbo.configcenter.DynamicConfiguration;
 import org.apache.dubbo.metadata.integration.MetadataReportService;
 import org.apache.dubbo.monitor.MonitorFactory;
 import org.apache.dubbo.monitor.MonitorService;
@@ -43,7 +41,6 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import static org.apache.dubbo.common.Constants.APPLICATION_KEY;
 import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
@@ -165,9 +162,8 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
     private void useRegistryForConfigIfNecessary() {
         RegistryConfig registry = registries.get(0);
         if (registry.isZookeeperProtocol()) {
-            Set<DynamicConfiguration> loadedConfigurations = getExtensionLoader(DynamicConfiguration.class).getExtensions();
             // we use the loading status of DynamicConfiguration to decide whether ConfigCenter has been initiated.
-            if (CollectionUtils.isEmpty(loadedConfigurations)) {
+            if (Environment.getInstance().getDynamicConfiguration() == null) {
                 ConfigCenterConfig configCenterConfig = new ConfigCenterConfig();
                 configCenterConfig.setProtocol(registry.getProtocol());
                 configCenterConfig.setAddress(registry.getAddress());
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
index 1a03863..1cb5a00 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
@@ -84,10 +84,6 @@ public class ConfigCenterConfig extends AbstractConfig {
         }
     }
 
-    /*public void initWithoutRemoteConfig() {
-        startDynamicConfiguration();
-    }*/
-
     private DynamicConfiguration startDynamicConfiguration() {
         // give jvm properties the chance to override local configs, e.g., -Ddubbo.configcenter.config.priority
 
@@ -104,6 +100,7 @@ public class ConfigCenterConfig extends AbstractConfig {
         DynamicConfiguration dynamicConfiguration = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getExtension(url.getProtocol());
         // TODO, maybe we need a factory to do this?
         dynamicConfiguration.initWith(url);
+        Environment.getInstance().setDynamicConfiguration(dynamicConfiguration);
         return dynamicConfiguration;
     }
 
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationUtils.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationUtils.java
index ea8a78d..cc3a3dc 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationUtils.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationUtils.java
@@ -19,9 +19,6 @@ package org.apache.dubbo.configcenter;
 import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.common.config.Configuration;
 import org.apache.dubbo.common.config.Environment;
-import org.apache.dubbo.common.utils.CollectionUtils;
-
-import java.util.Set;
 
 import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
 
@@ -35,12 +32,11 @@ public class ConfigurationUtils {
      * NopDynamicConfiguration will be used.
      */
     public static DynamicConfiguration getDynamicConfiguration() {
-        Set<DynamicConfiguration> configurations = getExtensionLoader(DynamicConfiguration.class).getExtensions();
-        if (CollectionUtils.isEmpty(configurations)) {
-            return getExtensionLoader(DynamicConfiguration.class).getDefaultExtension();
-        } else {
-            return configurations.iterator().next();
+        DynamicConfiguration dynamicConfiguration = (DynamicConfiguration) Environment.getInstance().getDynamicConfiguration();
+        if (dynamicConfiguration == null) {
+            dynamicConfiguration = getExtensionLoader(DynamicConfiguration.class).getDefaultExtension();
         }
+        return dynamicConfiguration;
     }
 
     @SuppressWarnings("deprecation")