Support caching of dynamic property (#7760)

This commit is contained in:
ken.lj 2021-05-14 12:50:07 +08:00 committed by GitHub
parent 322fb9724e
commit a08aabf69a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 15 additions and 9 deletions

View File

@ -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);
}

View File

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

View File

@ -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;
}

View File

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

View File

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

View File

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

View File

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