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);

Reply via email to