This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 fd4ee7220df Refactor ReadwriteSplittingRule (#24965)
fd4ee7220df is described below
commit fd4ee7220dfd553907d7c8c08b1d128006b5269d
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Apr 3 06:04:53 2023 +0800
Refactor ReadwriteSplittingRule (#24965)
---
.../rule/ReadwriteSplittingRule.java | 38 +++++++++++++---------
1 file changed, 23 insertions(+), 15 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 e3428877055..7eff0701456 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
@@ -65,7 +65,7 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
@Getter
private final RuleConfiguration configuration;
- private final Map<String, ReadQueryLoadBalanceAlgorithm> loadBalancers =
new LinkedHashMap<>();
+ private final Map<String, ReadQueryLoadBalanceAlgorithm> loadBalancers;
private final Map<String, ReadwriteSplittingDataSourceRule>
dataSourceRules;
@@ -76,30 +76,37 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
this.databaseName = databaseName;
this.instanceContext = instanceContext;
configuration = ruleConfig;
- for (ReadwriteSplittingDataSourceRuleConfiguration
dataSourceRuleConfiguration : ruleConfig.getDataSources()) {
- if
(ruleConfig.getLoadBalancers().containsKey(dataSourceRuleConfiguration.getLoadBalancerName()))
{
- AlgorithmConfiguration algorithmConfig =
ruleConfig.getLoadBalancers().get(dataSourceRuleConfiguration.getLoadBalancerName());
- loadBalancers.put(dataSourceRuleConfiguration.getName() + "."
+ dataSourceRuleConfiguration.getLoadBalancerName(),
-
TypedSPILoader.getService(ReadQueryLoadBalanceAlgorithm.class,
algorithmConfig.getType(), algorithmConfig.getProps()));
+ loadBalancers = createLoadBalancers(ruleConfig);
+ dataSourceRules = createDataSourceRules(ruleConfig, builtRules);
+ }
+
+ private Map<String, ReadQueryLoadBalanceAlgorithm>
createLoadBalancers(final ReadwriteSplittingRuleConfiguration ruleConfig) {
+ Map<String, ReadQueryLoadBalanceAlgorithm> result = new
LinkedHashMap<>(ruleConfig.getDataSources().size(), 1);
+ for (ReadwriteSplittingDataSourceRuleConfiguration each :
ruleConfig.getDataSources()) {
+ if
(ruleConfig.getLoadBalancers().containsKey(each.getLoadBalancerName())) {
+ AlgorithmConfiguration algorithmConfig =
ruleConfig.getLoadBalancers().get(each.getLoadBalancerName());
+ result.put(each.getName() + "." + each.getLoadBalancerName(),
TypedSPILoader.getService(ReadQueryLoadBalanceAlgorithm.class,
algorithmConfig.getType(), algorithmConfig.getProps()));
}
}
- dataSourceRules = new HashMap<>(ruleConfig.getDataSources().size(), 1);
+ return result;
+ }
+
+ private Map<String, ReadwriteSplittingDataSourceRule>
createDataSourceRules(final ReadwriteSplittingRuleConfiguration ruleConfig,
final Collection<ShardingSphereRule> builtRules) {
+ Map<String, ReadwriteSplittingDataSourceRule> result = new
HashMap<>(ruleConfig.getDataSources().size(), 1);
for (ReadwriteSplittingDataSourceRuleConfiguration each :
ruleConfig.getDataSources()) {
-
dataSourceRules.putAll(createReadwriteSplittingDataSourceRules(each,
builtRules));
+ result.putAll(createDataSourceRules(each, builtRules));
}
+ return result;
}
- private Map<String, ReadwriteSplittingDataSourceRule>
createReadwriteSplittingDataSourceRules(final
ReadwriteSplittingDataSourceRuleConfiguration config,
-
final Collection<ShardingSphereRule> builtRules) {
+ private Map<String, ReadwriteSplittingDataSourceRule>
createDataSourceRules(final ReadwriteSplittingDataSourceRuleConfiguration
config, final Collection<ShardingSphereRule> builtRules) {
ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm =
loadBalancers.getOrDefault(
config.getName() + "." + config.getLoadBalancerName(),
TypedSPILoader.getService(ReadQueryLoadBalanceAlgorithm.class, null));
- return createStaticReadwriteSplittingDataSourceRules(config,
builtRules, loadBalanceAlgorithm);
+ return createStaticDataSourceRules(config, builtRules,
loadBalanceAlgorithm);
}
- private Map<String, ReadwriteSplittingDataSourceRule>
createStaticReadwriteSplittingDataSourceRules(final
ReadwriteSplittingDataSourceRuleConfiguration config,
-
final Collection<ShardingSphereRule> builtRules,
-
final ReadQueryLoadBalanceAlgorithm
loadBalanceAlgorithm) {
- Map<String, ReadwriteSplittingDataSourceRule> result = new
LinkedHashMap<>();
+ private Map<String, ReadwriteSplittingDataSourceRule>
createStaticDataSourceRules(final ReadwriteSplittingDataSourceRuleConfiguration
config,
+
final Collection<ShardingSphereRule> builtRules, final
ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm) {
List<String> inlineReadwriteDataSourceNames = new
InlineExpressionParser(config.getName()).splitAndEvaluate();
List<String> inlineWriteDatasourceNames = new
InlineExpressionParser(config.getStaticStrategy().getWriteDataSourceName()).splitAndEvaluate();
List<List<String>> inlineReadDatasourceNames =
config.getStaticStrategy().getReadDataSourceNames().stream()
@@ -108,6 +115,7 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
() -> new
InvalidInlineExpressionDataSourceNameException("Inline expression write data
source names size error."));
inlineReadDatasourceNames.forEach(each ->
ShardingSpherePreconditions.checkState(each.size() ==
inlineReadwriteDataSourceNames.size(),
() -> new
InvalidInlineExpressionDataSourceNameException("Inline expression read data
source names size error.")));
+ Map<String, ReadwriteSplittingDataSourceRule> result = new
LinkedHashMap<>(inlineReadwriteDataSourceNames.size(), 1);
for (int i = 0; i < inlineReadwriteDataSourceNames.size(); i++) {
ReadwriteSplittingDataSourceRuleConfiguration staticConfig =
createStaticDataSourceRuleConfiguration(
config, i, inlineReadwriteDataSourceNames,
inlineWriteDatasourceNames, inlineReadDatasourceNames);