You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicecomb.apache.org by GitBox <gi...@apache.org> on 2018/02/03 05:56:52 UTC

[GitHub] WillemJiang closed pull request #546: SCB-315 Config Center module can't get config by DynamicPropertyFacto?

WillemJiang closed pull request #546: SCB-315 Config Center module can't get config by DynamicPropertyFacto?
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/546
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

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 306cf7f04..0ca5668e9 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 @@ private void refreshMembers(MemberDiscovery memberDiscovery) {
           }
         });
         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 @@ private void refreshMembers(MemberDiscovery memberDiscovery) {
 
   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 void doWatch(String configCenter)
         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 void doWatch(String configCenter)
 
     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 void refreshConfig(String configcenter) {
         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 698178dba..1b1a80481 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,108 +20,135 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.commons.configuration.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import com.netflix.config.DynamicPropertyFactory;
 
 import io.vertx.core.dns.AddressResolverOptions;
 
 public class AddressResolverConfig {
 
+  private static final Logger LOGGER = LoggerFactory.getLogger(AddressResolverConfig.class);
+
   /**
    * get the target endpoints with custom address resolve config
    * @param tag config tag, such as sc.consumer or cc.consumer
    * @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, Configuration 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(getPositiveIntProperty(configSource,
+            AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE,
             "addressResolver." + tag + ".cacheMinTimeToLive",
             "addressResolver.cacheMinTimeToLive"));
     addressResolverOptions
-        .setCacheMaxTimeToLive(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_MAX_TIME_TO_LIVE,
+        .setCacheMaxTimeToLive(getPositiveIntProperty(configSource,
+            AddressResolverOptions.DEFAULT_CACHE_MAX_TIME_TO_LIVE,
             "addressResolver." + tag + ".cacheMaxTimeToLive",
             "addressResolver.cacheMaxTimeToLive"));
     addressResolverOptions
-        .setCacheNegativeTimeToLive(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_NEGATIVE_TIME_TO_LIVE,
+        .setCacheNegativeTimeToLive(getPositiveIntProperty(configSource,
+            AddressResolverOptions.DEFAULT_CACHE_NEGATIVE_TIME_TO_LIVE,
             "addressResolver." + tag + ".cacheNegativeTimeToLive",
             "addressResolver.cacheNegativeTimeToLive"));
     addressResolverOptions
-        .setQueryTimeout(getIntProperty(AddressResolverOptions.DEFAULT_QUERY_TIMEOUT,
+        .setQueryTimeout(getPositiveIntProperty(configSource,
+            AddressResolverOptions.DEFAULT_QUERY_TIMEOUT,
             "addressResolver." + tag + ".queryTimeout",
             "addressResolver.queryTimeout"));
     addressResolverOptions
-        .setMaxQueries(getIntProperty(AddressResolverOptions.DEFAULT_MAX_QUERIES,
+        .setMaxQueries(getPositiveIntProperty(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(getPositiveIntProperty(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) {
-    String property = null;
+  private static List<String> getStringListProperty(Configuration configSource,
+      List<String> defaultValue, String... keys) {
+    if (configSource == null) {
+      configSource = (Configuration) DynamicPropertyFactory.getBackingConfigurationSource();
+    }
     for (String key : keys) {
-      property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get();
-      if (property != null) {
-        break;
+      String[] vals = configSource.getStringArray(key);
+      if (vals != null && vals.length > 0) {
+        return Arrays.asList(vals);
       }
     }
-    if (property != null) {
-      return Arrays.asList(property.split(","));
-    } else {
-      return defaultValue;
-    }
+    return defaultValue;
   }
 
-  private static int getIntProperty(int defaultValue, String... keys) {
-    int property = -1;
+  private static int getPositiveIntProperty(Configuration configSource, int defaultValue, String... keys) {
+    if (configSource == null) {
+      configSource = (Configuration) DynamicPropertyFactory.getBackingConfigurationSource();
+    }
     for (String key : keys) {
-      property = DynamicPropertyFactory.getInstance().getIntProperty(key, -1).get();
-      if (property > 0) {
-        break;
+      Integer val = configSource.getInteger(key, null);
+      if (val != null && val <= 0) {
+        LOGGER.warn("Address resover key:{}'s value:{} is not positive, please check!", key, val);
+        continue;
+      }
+      if (val != null) {
+        return val;
       }
     }
-    if (property > 0) {
-      return property;
-    } else {
-      return defaultValue;
-    }
+    return defaultValue;
   }
 
-  private static boolean getBooleanProperty(boolean defaultValue, String... keys) {
-    String property = null;
+  private static boolean getBooleanProperty(Configuration configSource, boolean defaultValue,
+      String... keys) {
+    if (configSource == null) {
+      configSource = (Configuration) DynamicPropertyFactory.getBackingConfigurationSource();
+    }
     for (String key : keys) {
-      property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get();
-      if (property != null) {
-        break;
+      Boolean val = configSource.getBoolean(key, null);
+      if (val != null) {
+        return val;
       }
     }
-    if (property != null) {
-      return Boolean.parseBoolean(property);
-    } else {
-      return defaultValue;
-    }
+    return defaultValue;
   }
 }
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 0163f6063..da4bc2ccf 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,10 +17,11 @@
 
 package org.apache.servicecomb.foundation.vertx;
 
-import static org.hamcrest.CoreMatchers.*;
+import static org.hamcrest.CoreMatchers.is;
 
 import java.util.Arrays;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.junit.AfterClass;
 import org.junit.Assert;
@@ -28,6 +29,8 @@
 import org.junit.Test;
 
 import io.vertx.core.dns.AddressResolverOptions;
+import mockit.Expectations;
+import mockit.Mocked;
 
 public class TestAddressResolverConfig {
 
@@ -41,6 +44,31 @@ public static void classTeardown() {
     ArchaiusUtils.resetConfig();
   }
 
+  @Test
+  public void testGetResoverFromResource(@Mocked Configuration finalConfig) {
+    ArchaiusUtils.resetConfig();
+    ArchaiusUtils.setProperty("addressResolver.servers", "8.8.8.8,8.8.4.4");
+    new Expectations() {
+      {
+        finalConfig.getStringArray("addressResolver.servers");
+        result = new String[] {"6.6.6.6", "6.6.4.4"};
+        finalConfig.getStringArray("addressResolver.searchDomains");
+        result = new String[] {"default.svc.local.cluster"};
+        finalConfig.getInteger("addressResolver.queryTimeout", null);
+        result = 2000;
+        finalConfig.getInteger("addressResolver.maxQueries", null);
+        result = -2;
+      }
+    };
+    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")));
+    Assert.assertEquals(aroc.getQueryTimeout(),
+        2000);
+    Assert.assertNotEquals(aroc.getMaxQueries(),
+        -2);
+  }
 
   @Test
   public void testGetResover() {


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services