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

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


The following commit(s) were added to refs/heads/3.0 by this push:
     new a08aabf  Support caching of dynamic property  (#7760)
a08aabf is described below

commit a08aabf69a08e70cdd241c178b5426621e1d60a7
Author: ken.lj <[email protected]>
AuthorDate: Fri May 14 12:50:07 2021 +0800

    Support caching of dynamic property  (#7760)
---
 .../java/org/apache/dubbo/common/config/ConfigurationUtils.java    | 7 +++++++
 .../java/org/apache/dubbo/config/context/ConfigManagerTest.java    | 4 ++--
 .../java/org/apache/dubbo/config/utils/ConfigValidationUtils.java  | 5 ++---
 .../java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java  | 2 +-
 .../config/bootstrap/builders/AbstractInterfaceBuilderTest.java    | 2 +-
 .../client/migration/DefaultMigrationAddressComparator.java        | 2 +-
 .../dubbo/registry/client/migration/MigrationRuleHandler.java      | 2 +-
 7 files changed, 15 insertions(+), 9 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
index ed79f15..3a17e59 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
@@ -26,6 +26,7 @@ import java.io.StringReader;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
 
 import static 
org.apache.dubbo.common.constants.CommonConstants.DEFAULT_SERVER_SHUTDOWN_TIMEOUT;
 import static 
org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;
@@ -36,6 +37,7 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_SE
  */
 public class ConfigurationUtils {
     private static final Logger logger = 
LoggerFactory.getLogger(ConfigurationUtils.class);
+    private static Map<String, String> CACHED_DYNAMIC_PROPERTIES = new 
ConcurrentHashMap<>();
 
     /**
      * Used to get properties from the jvm
@@ -96,6 +98,11 @@ public class ConfigurationUtils {
         return timeout;
     }
 
+    public static String getCachedDynamicProperty(String key, String 
defaultValue) {
+        String value = CACHED_DYNAMIC_PROPERTIES.computeIfAbsent(key, _k -> 
ConfigurationUtils.getDynamicProperty(key, ""));
+        return StringUtils.isEmpty(value) ? defaultValue : value;
+    }
+
     public static String getDynamicProperty(String property) {
         return getDynamicProperty(property, null);
     }
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
index 24c4f00..a1ef93c 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
@@ -95,7 +95,7 @@ public class ConfigManagerTest {
     // Test ApplicationConfig correlative methods
     @Test
     public void testApplicationConfig() {
-        ApplicationConfig config = new ApplicationConfig();
+        ApplicationConfig config = new ApplicationConfig("ConfigManagerTest");
         configManager.setApplication(config);
         assertTrue(configManager.getApplication().isPresent());
         assertEquals(config, configManager.getApplication().get());
@@ -197,7 +197,7 @@ public class ConfigManagerTest {
 
     @Test
     public void testAddConfig() {
-        configManager.addConfig(new ApplicationConfig());
+        configManager.addConfig(new ApplicationConfig("ConfigManagerTest"));
         configManager.addConfig(new ProviderConfig());
         configManager.addConfig(new ProtocolConfig());
 
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
index 2f68774..b7706ae 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
@@ -173,7 +173,6 @@ public class ConfigValidationUtils {
      */
     private static final Pattern PATTERN_KEY = 
Pattern.compile("[*,\\-._0-9a-zA-Z]+");
 
-
     public static List<URL> loadRegistries(AbstractInterfaceConfig 
interfaceConfig, boolean provider) {
         // check && override if necessary
         List<URL> registryList = new ArrayList<URL>();
@@ -220,7 +219,7 @@ public class ConfigValidationUtils {
                 // for registries enabled service discovery, automatically 
register interface compatible addresses.
                 String registerMode;
                 if 
(SERVICE_REGISTRY_PROTOCOL.equals(registryURL.getProtocol())) {
-                    registerMode = registryURL.getParameter(REGISTER_MODE_KEY, 
ConfigurationUtils.getDynamicGlobalConfiguration().getString(DUBBO_REGISTER_MODE_DEFAULT_KEY,
 DEFAULT_REGISTER_MODE_INSTANCE));
+                    registerMode = registryURL.getParameter(REGISTER_MODE_KEY, 
ConfigurationUtils.getCachedDynamicProperty(DUBBO_REGISTER_MODE_DEFAULT_KEY, 
DEFAULT_REGISTER_MODE_INSTANCE));
                     if (!isValidRegisterMode(registerMode)) {
                         registerMode = DEFAULT_REGISTER_MODE_INSTANCE;
                     }
@@ -234,7 +233,7 @@ public class ConfigValidationUtils {
                         result.add(interfaceCompatibleRegistryURL);
                     }
                 } else {
-                    registerMode = registryURL.getParameter(REGISTER_MODE_KEY, 
ConfigurationUtils.getDynamicGlobalConfiguration().getString(DUBBO_REGISTER_MODE_DEFAULT_KEY,
 DEFAULT_REGISTER_MODE_INTERFACE));
+                    registerMode = registryURL.getParameter(REGISTER_MODE_KEY, 
ConfigurationUtils.getCachedDynamicProperty(DUBBO_REGISTER_MODE_DEFAULT_KEY, 
DEFAULT_REGISTER_MODE_INTERFACE));
                     if (!isValidRegisterMode(registerMode)) {
                         registerMode = DEFAULT_REGISTER_MODE_INTERFACE;
                     }
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
index 3a4a83c..214e665 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
@@ -276,7 +276,7 @@ public class AbstractInterfaceConfigTest {
     @Test
     public void testApplication() {
         InterfaceConfig interfaceConfig = new InterfaceConfig();
-        ApplicationConfig applicationConfig = new ApplicationConfig();
+        ApplicationConfig applicationConfig = new 
ApplicationConfig("AbstractInterfaceConfigTest");
         interfaceConfig.setApplication(applicationConfig);
         Assertions.assertSame(applicationConfig, 
interfaceConfig.getApplication());
     }
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/AbstractInterfaceBuilderTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/AbstractInterfaceBuilderTest.java
index 2e9857a..e0ab4c6 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/AbstractInterfaceBuilderTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/AbstractInterfaceBuilderTest.java
@@ -143,7 +143,7 @@ class AbstractInterfaceBuilderTest {
 
     @Test
     void application() {
-        ApplicationConfig applicationConfig = new ApplicationConfig();
+        ApplicationConfig applicationConfig = new 
ApplicationConfig("AbtractInterfaceBuilderTest");
 
         InterfaceBuilder builder = new InterfaceBuilder();
         builder.application(applicationConfig);
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
index 9700214..a37d55b 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
@@ -72,7 +72,7 @@ public class DefaultMigrationAddressComparator implements 
MigrationAddressCompar
         if (configedThreshold != null && configedThreshold >= 0) {
             rawThreshold = String.valueOf(configedThreshold);
         }
-        rawThreshold = StringUtils.isNotEmpty(rawThreshold) ? rawThreshold : 
ConfigurationUtils.getDynamicProperty(MIGRATION_THRESHOLD, 
DEFAULT_THRESHOLD_STRING);
+        rawThreshold = StringUtils.isNotEmpty(rawThreshold) ? rawThreshold : 
ConfigurationUtils.getCachedDynamicProperty(MIGRATION_THRESHOLD, 
DEFAULT_THRESHOLD_STRING);
         float threshold;
         try {
             threshold = Float.parseFloat(rawThreshold);
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
index b9718f4..be2e29e 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
@@ -59,7 +59,7 @@ public class MigrationRuleHandler<T> {
         MigrationStep step = MigrationStep.INTERFACE_FIRST;
         Float threshold = -1f;
         if (rule == MigrationRule.INIT) {
-            step = Enum.valueOf(MigrationStep.class, 
ConfigurationUtils.getDynamicProperty(DUBBO_SERVICEDISCOVERY_MIGRATION, 
step.name()));
+            step = Enum.valueOf(MigrationStep.class, 
ConfigurationUtils.getCachedDynamicProperty(DUBBO_SERVICEDISCOVERY_MIGRATION, 
step.name()));
         } else {
             try {
                 String serviceKey = consumerURL.getDisplayServiceKey();

Reply via email to