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