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 <[email protected]>
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() {