This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 7e274a7773bacf432ca0e66000adb8ddf0256385 Author: liubao <[email protected]> AuthorDate: Sat Aug 25 15:21:35 2018 +0800 [SBC-870] give users a error message when use old configurations --- .../servicecomb/loadbalance/Configuration.java | 17 -------- .../loadbalance/LoadbalanceHandler.java | 46 +++++++++++----------- 2 files changed, 22 insertions(+), 41 deletions(-) diff --git a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java index 2268855..2ce09e3 100644 --- a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java +++ b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java @@ -54,17 +54,6 @@ public final class Configuration { public static final String SUCCESSIVE_FAILED_TIMES = "SessionStickinessRule.successiveFailedTimes"; - // Begin: ServerListFilters configurations - //Enabled filter lists, e.g servicecomb.loadbalance.serverListFilters=a,b,c - public static final String SERVER_LIST_FILTERS = "servicecomb.loadbalance.serverListFilters"; - - //Class name of each filter: e.g servicecomb.loadbalance.serverListFilter.a.className=org.apache.servicecomb.MyServerListFilterExt - public static final String SERVER_LIST_FILTER_CLASS_HOLDER = "servicecomb.loadbalance.serverListFilter.%s.className"; - - //Property of the class: e.g servicecomb.loadbalance.serverListFilter.a.myproperty=sample - public static final String SERVER_LIST_FILTER_PROPERTY_HOLDER = "servicecomb.loadbalance.serverListFilter.%s.%s"; - //End: ServerListFilters configurations - private static final double PERCENT = 100; public static final String FILTER_ISOLATION = "isolation."; @@ -82,8 +71,6 @@ public final class Configuration { public static final String TRANSACTIONCONTROL_OPTIONS_PREFIX_PATTERN = "servicecomb.loadbalance.%s.transactionControl.options"; - public static final String TRANSACTIONCONTROL_POLICY_KEY_PATTERN = "servicecomb.loadbalance.%s.transactionControl.policy"; - public static final Configuration INSTANCE = new Configuration(); private Configuration() { @@ -224,10 +211,6 @@ public final class Configuration { } } - public String getFlowsplitFilterPolicy(String microservice) { - return getStringProperty("", String.format(TRANSACTIONCONTROL_POLICY_KEY_PATTERN, microservice)); - } - public Map<String, String> getFlowsplitFilterOptions(String microservice) { String keyPrefix = String.format(TRANSACTIONCONTROL_OPTIONS_PREFIX_PATTERN, microservice); return ConfigurePropertyUtils.getPropertiesWithPrefix(keyPrefix); diff --git a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadbalanceHandler.java b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadbalanceHandler.java index 9055672..30ee21b 100644 --- a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadbalanceHandler.java +++ b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadbalanceHandler.java @@ -44,6 +44,7 @@ import org.apache.servicecomb.swagger.invocation.exception.InvocationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.netflix.config.DynamicPropertyFactory; import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; import com.netflix.loadbalancer.reactive.ExecutionContext; @@ -139,11 +140,31 @@ public class LoadbalanceHandler implements Handler { public LoadbalanceHandler() { + preCheck(); discoveryTree.loadFromSPI(DiscoveryFilter.class); discoveryTree.addFilter(new ServerDiscoveryFilter()); discoveryTree.sort(); } + private void preCheck() { + // Old configurations check.Just print an error, because configurations may given in dynamic and fail on runtime. + + String policyName = DynamicPropertyFactory.getInstance() + .getStringProperty("servicecomb.loadbalance.NFLoadBalancerRuleClassName", null).get(); + if (!StringUtils.isEmpty(policyName)) { + LOGGER.error("[servicecomb.loadbalance.NFLoadBalancerRuleClassName] is not supported anymore." + + "use [servicecomb.loadbalance.strategy.name] instead."); + } + + String filterNames = Configuration.getStringProperty(null, "servicecomb.loadbalance.serverListFilters"); + if (!StringUtils.isEmpty(filterNames)) { + LOGGER.error( + "Server list implementation changed to SPI. Configuration [servicecomb.loadbalance.serverListFilters]" + + " is not used any more. For ServiceComb defined filters, you do not need config and can " + + "remove this configuration safely. If you define your own filter, need to change it to SPI to make it work."); + } + } + @Override public void handle(Invocation invocation, AsyncResponse asyncResp) throws Exception { String strategy = Configuration.INSTANCE.getRuleStrategyName(invocation.getMicroserviceName()); @@ -168,14 +189,6 @@ public class LoadbalanceHandler implements Handler { loadBalancerMap.clear(); } - protected void setTransactionControlFilter(String microserviceName) { - String policyClsName = Configuration.INSTANCE.getFlowsplitFilterPolicy(microserviceName); - if (!policyClsName.isEmpty()) { - LOGGER.error(Configuration.TRANSACTIONCONTROL_POLICY_KEY_PATTERN + " is not supported anymore." + - "You can change this class to SPI, and filters will be loaded by SPI."); - } - } - private void send(Invocation invocation, AsyncResponse asyncResp, final LoadBalancer chosenLB) throws Exception { long time = System.currentTimeMillis(); ServiceCombServer server = (ServiceCombServer) chosenLB.chooseServer(invocation); @@ -350,16 +363,10 @@ public class LoadbalanceHandler implements Handler { invocation.getMicroserviceVersionRule()); invocation.addLocalContext(CONTEXT_KEY_SERVER_LIST, serversVersionedCache.data()); - LoadBalancer loadBalancer = loadBalancerMap + return loadBalancerMap .computeIfAbsent(serversVersionedCache.name(), name -> { return createLoadBalancer(invocation.getMicroserviceName()); }); - - // Nothing to do just help users to deal with incompatible changes. - setTransactionControlFilter(invocation.getMicroserviceName()); - loadServerListFilters(); - - return loadBalancer; } private LoadBalancer createLoadBalancer(String microserviceName) { @@ -367,15 +374,6 @@ public class LoadbalanceHandler implements Handler { return new LoadBalancer(rule, microserviceName); } - private void loadServerListFilters() { - String filterNames = Configuration.getStringProperty(null, Configuration.SERVER_LIST_FILTERS); - if (!StringUtils.isEmpty(filterNames)) { - LOGGER.error("Server list implementation changed to SPI. Configuration " + Configuration.SERVER_LIST_FILTERS + - " is not used any more. For ServiceComb defined filters, you do not need config and can " - + "remove this configuration safely. If you define your own filter, need to change it to SPI to make it work."); - } - } - public boolean isEqual(String str1, String str2) { return (str1 == null ? str2 == null : str1.equals(str2)); }
