This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 09a06e8 [DistSQL] Fix the exception when the read-write splitting
load balancer is null (#13808)
09a06e8 is described below
commit 09a06e8cf090c651f49bd1fe308af52048b0aadd
Author: lanchengx <[email protected]>
AuthorDate: Sun Nov 28 05:24:05 2021 -0600
[DistSQL] Fix the exception when the read-write splitting load balancer is
null (#13808)
* Fix the exception when the read-write separation type is empty
* Fix the exception when the read-write separation type is empty
---
.../converter/ReadwriteSplittingRuleStatementConverter.java | 10 +++++++---
.../update/AlterReadwriteSplittingRuleStatementUpdater.java | 3 ++-
.../update/CreateReadwriteSplittingRuleStatementUpdater.java | 3 ++-
.../core/ReadwriteSplittingDistSQLStatementVisitor.java | 12 ++++++++----
4 files changed, 19 insertions(+), 9 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverter.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/r
[...]
index 6ac11f4..ba60fcb 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverter.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverter.java
@@ -47,9 +47,13 @@ public final class ReadwriteSplittingRuleStatementConverter {
Collection<ReadwriteSplittingDataSourceRuleConfiguration> dataSources
= new LinkedList<>();
Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers = new
HashMap<>(ruleSegments.size(), 1);
for (ReadwriteSplittingRuleSegment each : ruleSegments) {
- String loadBalancerName = getLoadBalancerName(each.getName(),
each.getLoadBalancer());
- dataSources.add(createDataSourceRuleConfiguration(each.getName(),
loadBalancerName, each));
- loadBalancers.put(loadBalancerName, createLoadBalancer(each));
+ if (null != each.getLoadBalancer()) {
+ String loadBalancerName = getLoadBalancerName(each.getName(),
each.getLoadBalancer());
+ loadBalancers.put(loadBalancerName, createLoadBalancer(each));
+
dataSources.add(createDataSourceRuleConfiguration(each.getName(),
loadBalancerName, each));
+ } else {
+
dataSources.add(createDataSourceRuleConfiguration(each.getName(), null, each));
+ }
}
return new ReadwriteSplittingRuleConfiguration(dataSources,
loadBalancers);
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdater.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/r
[...]
index 7fe9ece..7777982 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdater.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdater.java
@@ -38,6 +38,7 @@ import org.apache.shardingsphere.spi.typed.TypedSPIRegistry;
import java.util.Collection;
import java.util.LinkedHashSet;
+import java.util.Objects;
import java.util.Optional;
import java.util.Properties;
import java.util.stream.Collectors;
@@ -82,7 +83,7 @@ public final class
AlterReadwriteSplittingRuleStatementUpdater implements RuleDe
}
private void checkToBeAlteredLoadBalancer(final
AlterReadwriteSplittingRuleStatement sqlStatement) throws
InvalidAlgorithmConfigurationException {
- Collection<String> invalidLoadBalancers =
sqlStatement.getRules().stream().map(ReadwriteSplittingRuleSegment::getLoadBalancer).distinct()
+ Collection<String> invalidLoadBalancers =
sqlStatement.getRules().stream().map(ReadwriteSplittingRuleSegment::getLoadBalancer).filter(Objects::nonNull).distinct()
.filter(each ->
!TypedSPIRegistry.findRegisteredService(ReplicaLoadBalanceAlgorithm.class,
each, new Properties()).isPresent()).collect(Collectors.toList());
if (!invalidLoadBalancers.isEmpty()) {
throw new InvalidAlgorithmConfigurationException("Load balancers",
invalidLoadBalancers);
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleStatementUpdater.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/
[...]
index eb854a7..5a30366 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleStatementUpdater.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleStatementUpdater.java
@@ -36,6 +36,7 @@ import org.apache.shardingsphere.spi.typed.TypedSPIRegistry;
import java.util.Collection;
import java.util.LinkedHashSet;
+import java.util.Objects;
import java.util.Properties;
import java.util.stream.Collectors;
@@ -87,7 +88,7 @@ public final class
CreateReadwriteSplittingRuleStatementUpdater implements RuleD
}
private void checkToBeCreatedLoadBalancers(final
CreateReadwriteSplittingRuleStatement sqlStatement) throws
InvalidAlgorithmConfigurationException {
- Collection<String> notExistedLoadBalancers =
sqlStatement.getRules().stream().map(ReadwriteSplittingRuleSegment::getLoadBalancer).distinct()
+ Collection<String> notExistedLoadBalancers =
sqlStatement.getRules().stream().map(ReadwriteSplittingRuleSegment::getLoadBalancer).filter(Objects::nonNull).distinct()
.filter(each ->
!TypedSPIRegistry.findRegisteredService(ReplicaLoadBalanceAlgorithm.class,
each, new Properties()).isPresent()).collect(Collectors.toList());
if (!notExistedLoadBalancers.isEmpty()) {
throw new InvalidAlgorithmConfigurationException("Load balancers",
notExistedLoadBalancers);
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-parser/src/main/java/org/apache/shardingsphere/readwrit
[...]
index 642ae6d..34c00a1 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
@@ -94,18 +94,22 @@ public final class
ReadwriteSplittingDistSQLStatementVisitor extends ReadwriteSp
@Override
public ASTNode visitReadwriteSplittingRuleDefinition(final
ReadwriteSplittingRuleDefinitionContext ctx) {
Properties props = new Properties();
- if (null != ctx.algorithmDefinition().algorithmProperties()) {
+ String algorithmName = null;
+ if (null != ctx.algorithmDefinition()) {
+ algorithmName =
getIdentifierValue(ctx.algorithmDefinition().algorithmName());
+ }
+ if (null != ctx.algorithmDefinition() && null !=
ctx.algorithmDefinition().algorithmProperties()) {
ctx.algorithmDefinition().algorithmProperties().algorithmProperty().forEach(each
-> props.setProperty(each.key.getText(), each.value.getText()));
}
if (null == ctx.staticReadwriteSplittingRuleDefinition()) {
- return new
ReadwriteSplittingRuleSegment(getIdentifierValue(ctx.ruleName()),
getIdentifierValue(ctx.dynamicReadwriteSplittingRuleDefinition().resourceName()),
-
getIdentifierValue(ctx.algorithmDefinition().algorithmName()), props);
+ return new
ReadwriteSplittingRuleSegment(getIdentifierValue(ctx.ruleName()),
getIdentifierValue(ctx.dynamicReadwriteSplittingRuleDefinition().resourceName()),
+ algorithmName, props);
}
StaticReadwriteSplittingRuleDefinitionContext staticRuleDefinitionCtx
= ctx.staticReadwriteSplittingRuleDefinition();
return new
ReadwriteSplittingRuleSegment(getIdentifierValue(ctx.ruleName()),
getIdentifierValue(staticRuleDefinitionCtx.writeResourceName()),
staticRuleDefinitionCtx.readResourceNames().resourceName().stream().map(each ->
getIdentifierValue(each)).collect(Collectors.toList()),
- getIdentifierValue(ctx.algorithmDefinition().algorithmName()),
props);
+ algorithmName, props);
}
@Override