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 b5036430a6..1b1a804812 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 @@ -21,6 +21,8 @@ import java.util.List; import org.apache.commons.configuration.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.netflix.config.DynamicPropertyFactory; @@ -28,6 +30,8 @@ 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 @@ -56,27 +60,27 @@ public static AddressResolverOptions getAddressResover(String tag, Configuration "addressResolver." + tag + ".optResourceEnabled", "addressResolver.optResourceEnabled")); addressResolverOptions - .setCacheMinTimeToLive(getIntProperty(configSource, + .setCacheMinTimeToLive(getPositiveIntProperty(configSource, AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE, "addressResolver." + tag + ".cacheMinTimeToLive", "addressResolver.cacheMinTimeToLive")); addressResolverOptions - .setCacheMaxTimeToLive(getIntProperty(configSource, + .setCacheMaxTimeToLive(getPositiveIntProperty(configSource, AddressResolverOptions.DEFAULT_CACHE_MAX_TIME_TO_LIVE, "addressResolver." + tag + ".cacheMaxTimeToLive", "addressResolver.cacheMaxTimeToLive")); addressResolverOptions - .setCacheNegativeTimeToLive(getIntProperty(configSource, + .setCacheNegativeTimeToLive(getPositiveIntProperty(configSource, AddressResolverOptions.DEFAULT_CACHE_NEGATIVE_TIME_TO_LIVE, "addressResolver." + tag + ".cacheNegativeTimeToLive", "addressResolver.cacheNegativeTimeToLive")); addressResolverOptions - .setQueryTimeout(getIntProperty(configSource, + .setQueryTimeout(getPositiveIntProperty(configSource, AddressResolverOptions.DEFAULT_QUERY_TIMEOUT, "addressResolver." + tag + ".queryTimeout", "addressResolver.queryTimeout")); addressResolverOptions - .setMaxQueries(getIntProperty(configSource, + .setMaxQueries(getPositiveIntProperty(configSource, AddressResolverOptions.DEFAULT_MAX_QUERIES, "addressResolver." + tag + ".maxQueries", "addressResolver.maxQueries")); @@ -91,7 +95,7 @@ public static AddressResolverOptions getAddressResover(String tag, Configuration "addressResolver." + tag + ".searchDomains", "addressResolver.searchDomains")); addressResolverOptions - .setNdots(getIntProperty(configSource, + .setNdots(getPositiveIntProperty(configSource, AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE, "addressResolver." + tag + ".ndots", "addressResolver.ndots")); @@ -117,13 +121,17 @@ private static List getStringListProperty(Configuration configSource, return defaultValue; } - private static int getIntProperty(Configuration configSource, int defaultValue, String... keys) { + private static int getPositiveIntProperty(Configuration configSource, int defaultValue, String... keys) { if (configSource == null) { configSource = (Configuration) DynamicPropertyFactory.getBackingConfigurationSource(); } for (String key : keys) { Integer val = configSource.getInteger(key, null); - if (val != null && val > 0) { + 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; } } 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 dd6c511a5a..da4bc2ccf7 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 @@ -56,6 +56,8 @@ public void testGetResoverFromResource(@Mocked Configuration finalConfig) { 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); @@ -64,6 +66,8 @@ public void testGetResoverFromResource(@Mocked Configuration finalConfig) { is(Arrays.asList("default.svc.local.cluster"))); Assert.assertEquals(aroc.getQueryTimeout(), 2000); + Assert.assertNotEquals(aroc.getMaxQueries(), + -2); } @Test