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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]