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


##########
shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java:
##########
@@ -75,12 +78,42 @@ 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> inlineNames = new 
InlineExpressionParser(config.getName()).splitAndEvaluate();
+        if (null != config.getStaticStrategy()) {
+            List<String> writeInlineNames = new 
InlineExpressionParser(config.getStaticStrategy().getWriteDataSourceName()).splitAndEvaluate();

Review Comment:
   How about change `writeInlineNames` to `writeInlineDataSourceNames`?



##########
shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java:
##########
@@ -75,12 +78,42 @@ 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> inlineNames = new 
InlineExpressionParser(config.getName()).splitAndEvaluate();
+        if (null != config.getStaticStrategy()) {
+            List<String> writeInlineNames = new 
InlineExpressionParser(config.getStaticStrategy().getWriteDataSourceName()).splitAndEvaluate();
+            List<List<String>> readInlineNames = 
config.getStaticStrategy().getReadDataSourceNames().stream().map(e -> new 
InlineExpressionParser(e).splitAndEvaluate()).collect(Collectors.toList());

Review Comment:
   How about change `readInlineNames` to `readInlineDataSourceNames`?



##########
shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java:
##########
@@ -75,12 +78,42 @@ 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> inlineNames = new 
InlineExpressionParser(config.getName()).splitAndEvaluate();
+        if (null != config.getStaticStrategy()) {
+            List<String> writeInlineNames = new 
InlineExpressionParser(config.getStaticStrategy().getWriteDataSourceName()).splitAndEvaluate();
+            List<List<String>> readInlineNames = 
config.getStaticStrategy().getReadDataSourceNames().stream().map(e -> new 
InlineExpressionParser(e).splitAndEvaluate()).collect(Collectors.toList());

Review Comment:
   Please change `e` to `each`



##########
shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java:
##########
@@ -75,12 +78,42 @@ 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> inlineNames = new 
InlineExpressionParser(config.getName()).splitAndEvaluate();
+        if (null != config.getStaticStrategy()) {
+            List<String> writeInlineNames = new 
InlineExpressionParser(config.getStaticStrategy().getWriteDataSourceName()).splitAndEvaluate();
+            List<List<String>> readInlineNames = 
config.getStaticStrategy().getReadDataSourceNames().stream().map(e -> new 
InlineExpressionParser(e).splitAndEvaluate()).collect(Collectors.toList());
+            Preconditions.checkArgument(writeInlineNames.size() == 
inlineNames.size(), "Inline expression write data source names size error");
+            readInlineNames.forEach(e -> Preconditions.checkArgument(e.size() 
== inlineNames.size(), "Inline expression read data source names size error"));
+            for (int i = 0; i < inlineNames.size(); i++) {
+                final int finalI = i;

Review Comment:
   This variable does not make sense, could you rename it?



##########
shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java:
##########
@@ -75,12 +78,42 @@ 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> inlineNames = new 
InlineExpressionParser(config.getName()).splitAndEvaluate();

Review Comment:
   How about change `inlineNames` to `inlineDataSourceNames`?



##########
shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application.properties:
##########
@@ -17,10 +17,11 @@
 
 spring.shardingsphere.database.name=foo_db
 
-spring.shardingsphere.datasource.names=ds${0..1}
+spring.shardingsphere.datasource.names=ds${0..1},write_ds

Review Comment:
   How about rename `ds${0..1}` to `read_ds_${0..1}`?



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to