You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/02/03 05:56:50 UTC
[incubator-servicecomb-java-chassis] 01/03: SCB-315 Config Center
module can't get config by
DynamicPropertyFactory.getInstance().getStringProperty,
so has to use ConcurrentCompositeConfiguration
This is an automated email from the ASF dual-hosted git repository.
ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 65216b0e2d47322f1797e5cf3b371266cf71e75b
Author: jeho0815 <je...@email.com>
AuthorDate: Fri Feb 2 18:31:00 2018 +0800
SCB-315 Config Center module can't get config by DynamicPropertyFactory.getInstance().getStringProperty, so has to use ConcurrentCompositeConfiguration
---
.../config/client/ConfigCenterClient.java | 19 +++--
.../foundation/vertx/AddressResolverConfig.java | 92 +++++++++++++++++-----
.../vertx/TestAddressResolverConfig.java | 37 ++++++++-
3 files changed, 123 insertions(+), 25 deletions(-)
diff --git a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
index 306cf7f..0ca5668 100644
--- a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
+++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
@@ -147,7 +147,9 @@ public class ConfigCenterClient {
}
});
SignRequest signReq = createSignRequest(request.method().toString(),
- configCenter + URIConst.MEMBERS, new HashMap<>(), null);
+ configCenter + URIConst.MEMBERS,
+ new HashMap<>(),
+ null);
if (ConfigCenterConfig.INSTANCE.getToken() != null) {
request.headers().add("X-Auth-Token", ConfigCenterConfig.INSTANCE.getToken());
}
@@ -159,7 +161,8 @@ public class ConfigCenterClient {
private void deployConfigClient() throws InterruptedException {
VertxOptions vertxOptions = new VertxOptions();
- vertxOptions.setAddressResolverOptions(AddressResolverConfig.getAddressResover(SSL_KEY));
+ vertxOptions.setAddressResolverOptions(AddressResolverConfig.getAddressResover(SSL_KEY,
+ ConfigCenterConfig.INSTANCE.getConcurrentCompositeConfiguration()));
Vertx vertx = VertxUtils.getOrCreateVertxByName("config-center", vertxOptions);
HttpClientOptions httpClientOptions = createHttpClientOptions();
@@ -245,7 +248,9 @@ public class ConfigCenterClient {
authHeaderProviders.forEach(provider -> authHeaders.putAll(provider.getSignAuthHeaders(
createSignRequest(null, configCenter + url, headers, null))));
- client.websocket(refreshPort, ipPort.getHostOrIp(), url,
+ client.websocket(refreshPort,
+ ipPort.getHostOrIp(),
+ url,
new CaseInsensitiveHeaders().addAll(headers)
.addAll(authHeaders),
ws -> {
@@ -284,7 +289,9 @@ public class ConfigCenterClient {
private void startHeartBeatThread(WebSocket ws) {
heartbeatTask = Executors.newScheduledThreadPool(1);
- heartbeatTask.scheduleWithFixedDelay(() -> sendHeartbeat(ws), HEARTBEAT_INTERVAL, HEARTBEAT_INTERVAL,
+ heartbeatTask.scheduleWithFixedDelay(() -> sendHeartbeat(ws),
+ HEARTBEAT_INTERVAL,
+ HEARTBEAT_INTERVAL,
TimeUnit.MILLISECONDS);
}
@@ -338,7 +345,9 @@ public class ConfigCenterClient {
request.headers().addAll(headers);
authHeaderProviders.forEach(provider -> request.headers()
.addAll(provider.getSignAuthHeaders(createSignRequest(request.method().toString(),
- configcenter + path, headers, null))));
+ configcenter + path,
+ headers,
+ null))));
request.exceptionHandler(e -> {
LOGGER.error("config refresh fail {}", e.getMessage());
});
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/AddressResolverConfig.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/AddressResolverConfig.java
index 698178d..08412f1 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/AddressResolverConfig.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/AddressResolverConfig.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.foundation.vertx;
import java.util.Arrays;
import java.util.List;
+import com.netflix.config.ConcurrentCompositeConfiguration;
import com.netflix.config.DynamicPropertyFactory;
import io.vertx.core.dns.AddressResolverOptions;
@@ -32,58 +33,89 @@ public class AddressResolverConfig {
* @return AddressResolverOptions
*/
public static AddressResolverOptions getAddressResover(String tag) {
+ return getAddressResover(tag, null);
+ }
+
+ /**
+ * get the target endpoints with custom address resolve config
+ * @param tag config tag, such as sc.consumer or cc.consumer
+ * @param configSource get config from special config source
+ * @return AddressResolverOptions
+ */
+ public static AddressResolverOptions getAddressResover(String tag, ConcurrentCompositeConfiguration configSource) {
AddressResolverOptions addressResolverOptions = new AddressResolverOptions();
addressResolverOptions
- .setServers(getStringListProperty(AddressResolverOptions.DEFAULT_SEACH_DOMAINS,
+ .setServers(getStringListProperty(configSource,
+ AddressResolverOptions.DEFAULT_SEACH_DOMAINS,
"addressResolver." + tag + ".servers",
"addressResolver.servers"));
addressResolverOptions
- .setOptResourceEnabled(getBooleanProperty(AddressResolverOptions.DEFAULT_OPT_RESOURCE_ENABLED,
+ .setOptResourceEnabled(getBooleanProperty(configSource,
+ AddressResolverOptions.DEFAULT_OPT_RESOURCE_ENABLED,
"addressResolver." + tag + ".optResourceEnabled",
"addressResolver.optResourceEnabled"));
addressResolverOptions
- .setCacheMinTimeToLive(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE,
+ .setCacheMinTimeToLive(getIntProperty(configSource,
+ AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE,
"addressResolver." + tag + ".cacheMinTimeToLive",
"addressResolver.cacheMinTimeToLive"));
addressResolverOptions
- .setCacheMaxTimeToLive(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_MAX_TIME_TO_LIVE,
+ .setCacheMaxTimeToLive(getIntProperty(configSource,
+ AddressResolverOptions.DEFAULT_CACHE_MAX_TIME_TO_LIVE,
"addressResolver." + tag + ".cacheMaxTimeToLive",
"addressResolver.cacheMaxTimeToLive"));
addressResolverOptions
- .setCacheNegativeTimeToLive(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_NEGATIVE_TIME_TO_LIVE,
+ .setCacheNegativeTimeToLive(getIntProperty(configSource,
+ AddressResolverOptions.DEFAULT_CACHE_NEGATIVE_TIME_TO_LIVE,
"addressResolver." + tag + ".cacheNegativeTimeToLive",
"addressResolver.cacheNegativeTimeToLive"));
addressResolverOptions
- .setQueryTimeout(getIntProperty(AddressResolverOptions.DEFAULT_QUERY_TIMEOUT,
+ .setQueryTimeout(getIntProperty(configSource,
+ AddressResolverOptions.DEFAULT_QUERY_TIMEOUT,
"addressResolver." + tag + ".queryTimeout",
"addressResolver.queryTimeout"));
addressResolverOptions
- .setMaxQueries(getIntProperty(AddressResolverOptions.DEFAULT_MAX_QUERIES,
+ .setMaxQueries(getIntProperty(configSource,
+ AddressResolverOptions.DEFAULT_MAX_QUERIES,
"addressResolver." + tag + ".maxQueries",
"addressResolver.maxQueries"));
addressResolverOptions
- .setRdFlag(getBooleanProperty(AddressResolverOptions.DEFAULT_RD_FLAG,
+ .setRdFlag(getBooleanProperty(configSource,
+ AddressResolverOptions.DEFAULT_RD_FLAG,
"addressResolver." + tag + ".rdFlag",
"addressResolver.rdFlag"));
addressResolverOptions
- .setSearchDomains(getStringListProperty(AddressResolverOptions.DEFAULT_SEACH_DOMAINS,
+ .setSearchDomains(getStringListProperty(configSource,
+ AddressResolverOptions.DEFAULT_SEACH_DOMAINS,
"addressResolver." + tag + ".searchDomains",
"addressResolver.searchDomains"));
addressResolverOptions
- .setNdots(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE,
+ .setNdots(getIntProperty(configSource,
+ AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE,
"addressResolver." + tag + ".ndots",
"addressResolver.ndots"));
addressResolverOptions
- .setRotateServers(getBooleanProperty(AddressResolverOptions.DEFAULT_ROTATE_SERVERS,
+ .setRotateServers(getBooleanProperty(configSource,
+ AddressResolverOptions.DEFAULT_ROTATE_SERVERS,
"addressResolver." + tag + ".rotateServers",
"addressResolver.rotateServers"));
return addressResolverOptions;
}
- private static List<String> getStringListProperty(List<String> defaultValue, String... keys) {
+ private static List<String> getStringListProperty(ConcurrentCompositeConfiguration configSource,
+ List<String> defaultValue, String... keys) {
String property = null;
for (String key : keys) {
- property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get();
+ if (configSource != null) {
+ Object v = configSource.getProperty(key);
+ if (List.class.isInstance(v)) {
+ property = listToString(((List<?>) v).toArray());
+ } else {
+ property = (String) configSource.getProperty(key);
+ }
+ } else {
+ property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get();
+ }
if (property != null) {
break;
}
@@ -95,14 +127,18 @@ public class AddressResolverConfig {
}
}
- private static int getIntProperty(int defaultValue, String... keys) {
+ private static int getIntProperty(ConcurrentCompositeConfiguration configSource, int defaultValue, String... keys) {
int property = -1;
for (String key : keys) {
- property = DynamicPropertyFactory.getInstance().getIntProperty(key, -1).get();
- if (property > 0) {
- break;
+ if (configSource != null) {
+ if (configSource.getProperty(key) != null) {
+ return configSource.getInt(key);
+ }
+ } else {
+ property = DynamicPropertyFactory.getInstance().getIntProperty(key, -1).get();
}
}
+
if (property > 0) {
return property;
} else {
@@ -110,18 +146,36 @@ public class AddressResolverConfig {
}
}
- private static boolean getBooleanProperty(boolean defaultValue, String... keys) {
+ private static boolean getBooleanProperty(ConcurrentCompositeConfiguration configSource, boolean defaultValue,
+ String... keys) {
String property = null;
for (String key : keys) {
- property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get();
+ if (configSource != null) {
+ if (configSource.getProperty(key) != null) {
+ return configSource.getBoolean(key);
+ }
+ } else {
+ property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get();
+ }
if (property != null) {
break;
}
}
+
if (property != null) {
return Boolean.parseBoolean(property);
} else {
return defaultValue;
}
}
+
+ private static String listToString(Object[] lists) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(lists[0]);
+ for (int i = 1; i < lists.length; i++) {
+ sb.append(",");
+ sb.append(lists[i]);
+ }
+ return sb.toString();
+ }
}
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestAddressResolverConfig.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestAddressResolverConfig.java
index 0163f60..91a680b 100644
--- a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestAddressResolverConfig.java
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestAddressResolverConfig.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.foundation.vertx;
-import static org.hamcrest.CoreMatchers.*;
+import static org.hamcrest.CoreMatchers.is;
import java.util.Arrays;
@@ -27,7 +27,11 @@ import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
+import com.netflix.config.ConcurrentCompositeConfiguration;
+
import io.vertx.core.dns.AddressResolverOptions;
+import mockit.Expectations;
+import mockit.Mocked;
public class TestAddressResolverConfig {
@@ -41,6 +45,37 @@ public class TestAddressResolverConfig {
ArchaiusUtils.resetConfig();
}
+ @Test
+ public void testGetResoverFromResource(@Mocked ConcurrentCompositeConfiguration finalConfig) {
+ ArchaiusUtils.resetConfig();
+ ArchaiusUtils.setProperty("addressResolver.servers", "8.8.8.8,8.8.4.4");
+ ArchaiusUtils.setProperty("addressResolver.optResourceEnabled", true);
+ ArchaiusUtils.setProperty("addressResolver.cacheMinTimeToLive", 0);
+ ArchaiusUtils.setProperty("addressResolver.cacheMaxTimeToLive", 10000);
+ ArchaiusUtils.setProperty("addressResolver.cacheNegativeTimeToLive", 0);
+ ArchaiusUtils.setProperty("addressResolver.queryTimeout", 1000);
+ ArchaiusUtils.setProperty("addressResolver.maxQueries", 3);
+ ArchaiusUtils.setProperty("addressResolver.test.maxQueries", 3);
+ ArchaiusUtils.setProperty("addressResolver.rdFlag", true);
+ ArchaiusUtils.setProperty("addressResolver.searchDomains",
+ "default.svc.local.cluster,svc.local.cluster,local.cluster");
+ ArchaiusUtils.setProperty("addressResolver.test.searchDomains",
+ "test.svc.local.cluster,svc.local.cluster,local.cluster");
+ ArchaiusUtils.setProperty("addressResolver.ndots", 3);
+ ArchaiusUtils.setProperty("addressResolver.rotateServers", true);
+ new Expectations() {
+ {
+ finalConfig.getProperty("addressResolver.servers");
+ result = "6.6.6.6,6.6.4.4";
+ finalConfig.getProperty("addressResolver.searchDomains");
+ result = "default.svc.local.cluster";
+ }
+ };
+ AddressResolverOptions aroc = AddressResolverConfig.getAddressResover("test", finalConfig);
+ Assert.assertThat(aroc.getServers(), is(Arrays.asList("6.6.6.6", "6.6.4.4")));
+ Assert.assertThat(aroc.getSearchDomains(),
+ is(Arrays.asList("default.svc.local.cluster")));
+ }
@Test
public void testGetResover() {
--
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.