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

Reply via email to