You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2022/06/20 13:27:07 UTC
[shardingsphere] branch master updated: Refactor AlterTrafficRuleHandler (#18463)
This is an automated email from the ASF dual-hosted git repository.
menghaoran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new c41a1ce6896 Refactor AlterTrafficRuleHandler (#18463)
c41a1ce6896 is described below
commit c41a1ce6896b991c2f4db6e62f1ed5ff27c270d7
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Jun 20 21:27:02 2022 +0800
Refactor AlterTrafficRuleHandler (#18463)
* Refactor AlterRuleHandler
* For checkstyle
* Refactor AlterRuleHandler
* Refactor AlterTrafficRuleHandler
* Refactor AlterTrafficRuleHandler
---
.../common/updatable/AlterTrafficRuleHandler.java | 46 ++++++++++++++++------
1 file changed, 35 insertions(+), 11 deletions(-)
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterTrafficRuleHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterTrafficRuleHandler.java
index 0039d2bd73b..eec18bb7a4c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterTrafficRuleHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterTrafficRuleHandler.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.text.distsql.ral.common.updatabl
import org.apache.shardingsphere.distsql.parser.segment.TrafficRuleSegment;
import org.apache.shardingsphere.distsql.parser.statement.ral.common.updatable.AlterTrafficRuleStatement;
+import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
import org.apache.shardingsphere.infra.distsql.exception.rule.RequiredRuleMissedException;
@@ -35,7 +36,9 @@ import org.apache.shardingsphere.traffic.factory.TrafficLoadBalanceAlgorithmFact
import org.apache.shardingsphere.traffic.rule.TrafficRule;
import java.util.Collection;
+import java.util.LinkedHashMap;
import java.util.LinkedList;
+import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@@ -93,21 +96,42 @@ public final class AlterTrafficRuleHandler extends UpdatableRALBackendHandler<Al
}
private TrafficRuleConfiguration createToBeAlteredRuleConfiguration() {
- TrafficRuleConfiguration newConfig = TrafficRuleConverter.convert(getSqlStatement().getSegments());
- Collection<String> toBeAlteredConfigNames = newConfig.getTrafficStrategies().stream().map(TrafficStrategyConfiguration::getName).collect(Collectors.toSet());
- TrafficRuleConfiguration result = ProxyContext
+ TrafficRuleConfiguration result = new TrafficRuleConfiguration();
+ TrafficRuleConfiguration configFromSQLStatement = TrafficRuleConverter.convert(getSqlStatement().getSegments());
+ TrafficRuleConfiguration currentConfig = ProxyContext
.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TrafficRule.class).getConfiguration();
- result.getTrafficStrategies().removeIf(each -> toBeAlteredConfigNames.contains(each.getName()));
- result.getTrafficStrategies().addAll(newConfig.getTrafficStrategies());
- result.getTrafficAlgorithms().putAll(newConfig.getTrafficAlgorithms());
- result.getLoadBalancers().putAll(newConfig.getLoadBalancers());
- getUnusedLoadBalancer(result).forEach(each -> result.getLoadBalancers().remove(each));
+ result.getTrafficStrategies().addAll(createToBeAlteredStrategyConfigurations(currentConfig, configFromSQLStatement));
+ result.getTrafficAlgorithms().putAll(createToBeAlteredTrafficAlgorithms(currentConfig, configFromSQLStatement));
+ result.getLoadBalancers().putAll(createToBeAlteredLoadBalancers(currentConfig, configFromSQLStatement, getInUsedLoadBalancer(result)));
+ return result;
+ }
+
+ private Collection<TrafficStrategyConfiguration> createToBeAlteredStrategyConfigurations(final TrafficRuleConfiguration currentConfig, final TrafficRuleConfiguration configFromSQLStatement) {
+ Collection<TrafficStrategyConfiguration> result = new LinkedList<>(currentConfig.getTrafficStrategies());
+ Collection<String> toBeAlteredConfigNames = configFromSQLStatement.getTrafficStrategies().stream().map(TrafficStrategyConfiguration::getName).collect(Collectors.toSet());
+ result.removeIf(each -> toBeAlteredConfigNames.contains(each.getName()));
+ result.addAll(configFromSQLStatement.getTrafficStrategies());
return result;
}
- private Collection<String> getUnusedLoadBalancer(final TrafficRuleConfiguration currentConfig) {
- Collection<String> currentlyInUse = currentConfig.getTrafficStrategies().stream().map(TrafficStrategyConfiguration::getLoadBalancerName).collect(Collectors.toSet());
- return currentConfig.getLoadBalancers().keySet().stream().filter(each -> !currentlyInUse.contains(each)).collect(Collectors.toSet());
+ private Map<String, ShardingSphereAlgorithmConfiguration> createToBeAlteredTrafficAlgorithms(final TrafficRuleConfiguration currentConfig, final TrafficRuleConfiguration configFromSQLStatement) {
+ Map<String, ShardingSphereAlgorithmConfiguration> result = new LinkedHashMap<>(currentConfig.getTrafficAlgorithms());
+ result.putAll(configFromSQLStatement.getTrafficAlgorithms());
+ return result;
+ }
+
+ private Collection<String> getInUsedLoadBalancer(final TrafficRuleConfiguration config) {
+ return config.getTrafficStrategies().stream().map(TrafficStrategyConfiguration::getLoadBalancerName).collect(Collectors.toSet());
+ }
+
+ private Map<String, ShardingSphereAlgorithmConfiguration> createToBeAlteredLoadBalancers(final TrafficRuleConfiguration currentConfig,
+ final TrafficRuleConfiguration configFromSQLStatement, final Collection<String> inUsedLoadBalancer) {
+ Map<String, ShardingSphereAlgorithmConfiguration> result = new LinkedHashMap<>(currentConfig.getLoadBalancers());
+ result.putAll(configFromSQLStatement.getLoadBalancers());
+ for (String each : result.keySet().stream().filter(each -> !inUsedLoadBalancer.contains(each)).collect(Collectors.toSet())) {
+ result.remove(each);
+ }
+ return result;
}
private void persistNewRuleConfigurations() {