terrymanu commented on code in PR #19808:
URL: https://github.com/apache/shardingsphere/pull/19808#discussion_r939484592


##########
shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java:
##########
@@ -75,12 +78,43 @@ public ReadwriteSplittingRule(final 
AlgorithmProvidedReadwriteSplittingRuleConfi
         loadBalancers.putAll(ruleConfig.getLoadBalanceAlgorithms());
         dataSourceRules = new HashMap<>(ruleConfig.getDataSources().size(), 1);
         for (ReadwriteSplittingDataSourceRuleConfiguration each : 
ruleConfig.getDataSources()) {
-            ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm = null == 
loadBalancers.get(each.getLoadBalancerName()) ? 
ReadQueryLoadBalanceAlgorithmFactory.newInstance()
-                    : loadBalancers.get(each.getLoadBalancerName());
-            dataSourceRules.put(each.getName(), new 
ReadwriteSplittingDataSourceRule(each, loadBalanceAlgorithm, builtRules));
+            
dataSourceRules.putAll(buildReadwriteSplittingDataSourceRules(each, 
builtRules));
         }
     }
     
+    private Map<String, ReadwriteSplittingDataSourceRule> 
buildReadwriteSplittingDataSourceRules(final 
ReadwriteSplittingDataSourceRuleConfiguration config,

Review Comment:
   The method is too long and too complicated, could you split to several 
smaller methods?



##########
shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java:
##########
@@ -75,12 +78,43 @@ public ReadwriteSplittingRule(final 
AlgorithmProvidedReadwriteSplittingRuleConfi
         loadBalancers.putAll(ruleConfig.getLoadBalanceAlgorithms());
         dataSourceRules = new HashMap<>(ruleConfig.getDataSources().size(), 1);
         for (ReadwriteSplittingDataSourceRuleConfiguration each : 
ruleConfig.getDataSources()) {
-            ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm = null == 
loadBalancers.get(each.getLoadBalancerName()) ? 
ReadQueryLoadBalanceAlgorithmFactory.newInstance()
-                    : loadBalancers.get(each.getLoadBalancerName());
-            dataSourceRules.put(each.getName(), new 
ReadwriteSplittingDataSourceRule(each, loadBalanceAlgorithm, builtRules));
+            
dataSourceRules.putAll(buildReadwriteSplittingDataSourceRules(each, 
builtRules));
         }
     }
     
+    private Map<String, ReadwriteSplittingDataSourceRule> 
buildReadwriteSplittingDataSourceRules(final 
ReadwriteSplittingDataSourceRuleConfiguration config,
+                                                                               
                  final Collection<ShardingSphereRule> builtRules) {
+        Map<String, ReadwriteSplittingDataSourceRule> result = new 
LinkedHashMap<>();
+        ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm = null == 
loadBalancers.get(config.getLoadBalancerName())
+                ? ReadQueryLoadBalanceAlgorithmFactory.newInstance()
+                : loadBalancers.get(config.getLoadBalancerName());
+        List<String> readwriteInlineNames = new 
InlineExpressionParser(config.getName()).splitAndEvaluate();
+        if (null != config.getStaticStrategy()) {
+            List<String> writeInlineDatasourceNames = new 
InlineExpressionParser(config.getStaticStrategy().getWriteDataSourceName()).splitAndEvaluate();
+            List<List<String>> readInlineDatasourceNames = 
config.getStaticStrategy().getReadDataSourceNames().stream()
+                    .map(each -> new 
InlineExpressionParser(each).splitAndEvaluate()).collect(Collectors.toList());
+            Preconditions.checkArgument(writeInlineDatasourceNames.size() == 
readwriteInlineNames.size(), "Inline expression write data source names size 
error");
+            readInlineDatasourceNames.forEach(e -> 
Preconditions.checkArgument(e.size() == readwriteInlineNames.size(), "Inline 
expression read data source names size error"));
+            for (int i = 0; i < readwriteInlineNames.size(); i++) {
+                final int finalI = i;

Review Comment:
   What mean of  variable `finalI`?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to