You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by GitBox <gi...@apache.org> on 2022/08/03 13:13:23 UTC
[GitHub] [shardingsphere] terrymanu commented on a diff in pull request #19808: support Cartesian Product for readWriteConfig, add check database for writedatasoucename
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: notifications-unsubscribe@shardingsphere.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org