You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/11/11 11:42:53 UTC
[shardingsphere] branch master updated: Refactor ReadwriteSplittingRule and TrafficRule trafficAlgorithm map and loadBalancers map (#22085)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 20fb4bb6a25 Refactor ReadwriteSplittingRule and TrafficRule trafficAlgorithm map and loadBalancers map (#22085)
20fb4bb6a25 is described below
commit 20fb4bb6a2501fc92c65377d7a67e049755f615a
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Fri Nov 11 19:42:46 2022 +0800
Refactor ReadwriteSplittingRule and TrafficRule trafficAlgorithm map and loadBalancers map (#22085)
* Refactor ReadwriteSplittingRule and TrafficRule trafficAlgorithm map and loadBalancers map
* Replace .
* Update
---
.../rule/ReadwriteSplittingRule.java | 25 ++++++++------------
.../shardingsphere/traffic/rule/TrafficRule.java | 27 +++++++++++++---------
2 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
index 9703ef5d0c8..f01fb291c75 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.readwritesplitting.rule;
import com.google.common.base.Preconditions;
import lombok.Getter;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.distsql.constant.ExportableConstants;
import org.apache.shardingsphere.infra.distsql.constant.ExportableItemConstants;
@@ -61,38 +60,34 @@ public final class ReadwriteSplittingRule implements DatabaseRule, DataSourceCon
@Getter
private final RuleConfiguration configuration;
+ private final Map<String, ReadQueryLoadBalanceAlgorithm> loadBalancers = new LinkedHashMap<>();
+
private final Map<String, ReadwriteSplittingDataSourceRule> dataSourceRules;
public ReadwriteSplittingRule(final ReadwriteSplittingRuleConfiguration ruleConfig, final Collection<ShardingSphereRule> builtRules) {
configuration = ruleConfig;
+ ruleConfig.getDataSources().stream().filter(each -> null != ruleConfig.getLoadBalancers().get(each.getLoadBalancerName()))
+ .forEach(each -> loadBalancers.put(each.getName() + "." + each.getLoadBalancerName(),
+ ReadQueryLoadBalanceAlgorithmFactory.newInstance(ruleConfig.getLoadBalancers().get(each.getLoadBalancerName()))));
dataSourceRules = new HashMap<>(ruleConfig.getDataSources().size(), 1);
for (ReadwriteSplittingDataSourceRuleConfiguration each : ruleConfig.getDataSources()) {
- dataSourceRules.putAll(createReadwriteSplittingDataSourceRules(each, ruleConfig.getLoadBalancers(), builtRules));
+ dataSourceRules.putAll(createReadwriteSplittingDataSourceRules(each, builtRules));
}
}
public ReadwriteSplittingRule(final AlgorithmProvidedReadwriteSplittingRuleConfiguration ruleConfig, final Collection<ShardingSphereRule> builtRules) {
configuration = ruleConfig;
+ ruleConfig.getDataSources().stream().filter(each -> null != ruleConfig.getLoadBalanceAlgorithms().get(each.getLoadBalancerName()))
+ .forEach(each -> loadBalancers.put(each.getName() + "." + each.getLoadBalancerName(), ruleConfig.getLoadBalanceAlgorithms().get(each.getLoadBalancerName())));
dataSourceRules = new HashMap<>(ruleConfig.getDataSources().size(), 1);
for (ReadwriteSplittingDataSourceRuleConfiguration each : ruleConfig.getDataSources()) {
- dataSourceRules.putAll(createReadwriteSplittingDataSourceRules0(each, ruleConfig.getLoadBalanceAlgorithms(), builtRules));
+ dataSourceRules.putAll(createReadwriteSplittingDataSourceRules(each, builtRules));
}
}
private Map<String, ReadwriteSplittingDataSourceRule> createReadwriteSplittingDataSourceRules(final ReadwriteSplittingDataSourceRuleConfiguration config,
- final Map<String, AlgorithmConfiguration> algorithmConfigs,
final Collection<ShardingSphereRule> builtRules) {
- ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm = null == algorithmConfigs.get(config.getLoadBalancerName()) ? ReadQueryLoadBalanceAlgorithmFactory.newInstance()
- : ReadQueryLoadBalanceAlgorithmFactory.newInstance(algorithmConfigs.get(config.getLoadBalancerName()));
- return null == config.getStaticStrategy()
- ? createDynamicReadwriteSplittingDataSourceRules(config, builtRules, loadBalanceAlgorithm)
- : createStaticReadwriteSplittingDataSourceRules(config, builtRules, loadBalanceAlgorithm);
- }
-
- private Map<String, ReadwriteSplittingDataSourceRule> createReadwriteSplittingDataSourceRules0(final ReadwriteSplittingDataSourceRuleConfiguration config,
- final Map<String, ReadQueryLoadBalanceAlgorithm> loadBalanceAlgorithms,
- final Collection<ShardingSphereRule> builtRules) {
- ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm = loadBalanceAlgorithms.getOrDefault(config.getLoadBalancerName(), ReadQueryLoadBalanceAlgorithmFactory.newInstance());
+ ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm = loadBalancers.getOrDefault(config.getName() + "." + config.getLoadBalancerName(), ReadQueryLoadBalanceAlgorithmFactory.newInstance());
return null == config.getStaticStrategy()
? createDynamicReadwriteSplittingDataSourceRules(config, builtRules, loadBalanceAlgorithm)
: createStaticReadwriteSplittingDataSourceRules(config, builtRules, loadBalanceAlgorithm);
diff --git a/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/rule/TrafficRule.java b/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/rule/TrafficRule.java
index 223f54d43c0..f4d8f331690 100644
--- a/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/rule/TrafficRule.java
+++ b/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/rule/TrafficRule.java
@@ -46,7 +46,6 @@ import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Optional;
import java.util.Properties;
@@ -69,16 +68,22 @@ public final class TrafficRule implements GlobalRule {
private Map<String, TrafficAlgorithm> createTrafficAlgorithms(final Map<String, AlgorithmConfiguration> trafficAlgorithms) {
Map<String, TrafficAlgorithm> result = new LinkedHashMap<>();
- for (Entry<String, AlgorithmConfiguration> entry : trafficAlgorithms.entrySet()) {
- result.put(entry.getKey(), TrafficAlgorithmFactory.newInstance(entry.getValue()));
+ for (TrafficStrategyConfiguration each : configuration.getTrafficStrategies()) {
+ if (null == trafficAlgorithms.get(each.getAlgorithmName())) {
+ break;
+ }
+ result.put(each.getName() + "." + each.getAlgorithmName(), TrafficAlgorithmFactory.newInstance(trafficAlgorithms.get(each.getAlgorithmName())));
}
return result;
}
private Map<String, TrafficLoadBalanceAlgorithm> createTrafficLoadBalanceAlgorithms(final Map<String, AlgorithmConfiguration> loadBalancers) {
Map<String, TrafficLoadBalanceAlgorithm> result = new LinkedHashMap<>();
- for (Entry<String, AlgorithmConfiguration> entry : loadBalancers.entrySet()) {
- result.put(entry.getKey(), TrafficLoadBalanceAlgorithmFactory.newInstance(entry.getValue()));
+ for (TrafficStrategyConfiguration each : configuration.getTrafficStrategies()) {
+ if (null == loadBalancers.get(each.getLoadBalancerName())) {
+ break;
+ }
+ result.put(each.getName() + "." + each.getLoadBalancerName(), TrafficLoadBalanceAlgorithmFactory.newInstance(loadBalancers.get(each.getLoadBalancerName())));
}
return result;
}
@@ -88,7 +93,7 @@ public final class TrafficRule implements GlobalRule {
Collection<TrafficStrategyRule> noneTransactionStrategyRules = new LinkedList<>();
Collection<TrafficStrategyRule> result = new LinkedList<>();
for (TrafficStrategyConfiguration each : trafficStrategies) {
- TrafficAlgorithm trafficAlgorithm = getTrafficAlgorithm(trafficAlgorithms, each.getAlgorithmName());
+ TrafficAlgorithm trafficAlgorithm = getTrafficAlgorithm(each, trafficAlgorithms);
TrafficStrategyRule trafficStrategyRule = createTrafficStrategyRule(each, trafficAlgorithm, loadBalancers);
if (isTransactionStrategyRule(trafficAlgorithm)) {
result.add(trafficStrategyRule);
@@ -106,7 +111,7 @@ public final class TrafficRule implements GlobalRule {
if (trafficAlgorithm instanceof SimplifiedTrafficAlgorithm) {
result = new TrafficStrategyRule(strategyConfig.getName(), Collections.emptyList(), trafficAlgorithm, null);
} else {
- TrafficLoadBalanceAlgorithm loadBalancer = getLoadBalancer(loadBalancers, strategyConfig.getLoadBalancerName());
+ TrafficLoadBalanceAlgorithm loadBalancer = getLoadBalancer(strategyConfig, loadBalancers);
result = new TrafficStrategyRule(strategyConfig.getName(), new LinkedHashSet<>(strategyConfig.getLabels()), trafficAlgorithm, loadBalancer);
}
return result;
@@ -132,8 +137,8 @@ public final class TrafficRule implements GlobalRule {
return Optional.empty();
}
- private TrafficAlgorithm getTrafficAlgorithm(final Map<String, TrafficAlgorithm> trafficAlgorithms, final String algorithmName) {
- TrafficAlgorithm result = trafficAlgorithms.get(algorithmName);
+ private TrafficAlgorithm getTrafficAlgorithm(final TrafficStrategyConfiguration strategyConfig, final Map<String, TrafficAlgorithm> trafficAlgorithms) {
+ TrafficAlgorithm result = trafficAlgorithms.get(strategyConfig.getName() + "." + strategyConfig.getAlgorithmName());
Preconditions.checkState(null != result, "Traffic algorithm can not be null.");
return result;
}
@@ -171,8 +176,8 @@ public final class TrafficRule implements GlobalRule {
return trafficAlgorithm.match(transactionTrafficValue);
}
- private TrafficLoadBalanceAlgorithm getLoadBalancer(final Map<String, TrafficLoadBalanceAlgorithm> loadBalancers, final String loadBalancerName) {
- TrafficLoadBalanceAlgorithm result = loadBalancers.get(loadBalancerName);
+ private TrafficLoadBalanceAlgorithm getLoadBalancer(final TrafficStrategyConfiguration strategyConfig, final Map<String, TrafficLoadBalanceAlgorithm> loadBalancers) {
+ TrafficLoadBalanceAlgorithm result = loadBalancers.get(strategyConfig.getName() + "." + strategyConfig.getLoadBalancerName());
Preconditions.checkState(null != result, "Traffic load balance algorithm can not be null.");
return result;
}