This is an automated email from the ASF dual-hosted git repository.

jiangmaolin 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 c613079e5f8 Check weight load balancer props when create 
readwrite-splitting rule (#33249)
c613079e5f8 is described below

commit c613079e5f8c7132dedb078d9968e5563015795e
Author: Raigor <[email protected]>
AuthorDate: Tue Oct 15 13:00:48 2024 +0800

    Check weight load balancer props when create readwrite-splitting rule 
(#33249)
---
 .../ReadwriteSplittingRuleStatementChecker.java    | 30 +++++++++++++---
 .../AlterReadwriteSplittingRuleExecutorTest.java   | 40 ++++++++++++++-------
 .../CreateReadwriteSplittingRuleExecutorTest.java  | 41 ++++++++++++++--------
 3 files changed, 79 insertions(+), 32 deletions(-)

diff --git 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
index 17f69afec6b..894a61dc1c9 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
@@ -20,6 +20,8 @@ package 
org.apache.shardingsphere.readwritesplitting.distsql.handler.checker;
 import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.distsql.segment.AlgorithmSegment;
+import 
org.apache.shardingsphere.infra.algorithm.core.exception.InvalidAlgorithmConfigurationException;
 import 
org.apache.shardingsphere.infra.algorithm.loadbalancer.core.LoadBalanceAlgorithm;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.MissingRequiredStorageUnitsException;
@@ -33,11 +35,11 @@ import 
org.apache.shardingsphere.infra.rule.attribute.datasource.DataSourceMappe
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.readwritesplitting.config.ReadwriteSplittingRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.config.rule.ReadwriteSplittingDataSourceGroupRuleConfiguration;
-import 
org.apache.shardingsphere.readwritesplitting.transaction.TransactionalReadQueryStrategy;
 import 
org.apache.shardingsphere.readwritesplitting.constant.ReadwriteSplittingDataSourceType;
 import 
org.apache.shardingsphere.readwritesplitting.distsql.segment.ReadwriteSplittingRuleSegment;
 import 
org.apache.shardingsphere.readwritesplitting.exception.ReadwriteSplittingRuleExceptionIdentifier;
 import 
org.apache.shardingsphere.readwritesplitting.exception.actual.DuplicateReadwriteSplittingActualDataSourceException;
+import 
org.apache.shardingsphere.readwritesplitting.transaction.TransactionalReadQueryStrategy;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -46,7 +48,6 @@ import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.Map.Entry;
-import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -218,7 +219,28 @@ public final class ReadwriteSplittingRuleStatementChecker {
     }
     
     private static void checkLoadBalancers(final 
Collection<ReadwriteSplittingRuleSegment> segments) {
-        
segments.stream().map(ReadwriteSplittingRuleSegment::getLoadBalancer).filter(Objects::nonNull)
-                .forEach(each -> 
TypedSPILoader.checkService(LoadBalanceAlgorithm.class, each.getName(), 
each.getProps()));
+        for (ReadwriteSplittingRuleSegment each : segments) {
+            AlgorithmSegment loadBalancer = each.getLoadBalancer();
+            if (loadBalancer != null) {
+                TypedSPILoader.checkService(LoadBalanceAlgorithm.class, 
loadBalancer.getName(), loadBalancer.getProps());
+                checkProperties(each);
+            }
+        }
+    }
+    
+    private static void checkProperties(final ReadwriteSplittingRuleSegment 
each) {
+        if ("WEIGHT".equalsIgnoreCase(each.getLoadBalancer().getName())) {
+            
ShardingSpherePreconditions.checkNotEmpty(each.getLoadBalancer().getProps(),
+                    () -> new InvalidAlgorithmConfigurationException("Load 
balancer", each.getLoadBalancer().getName()));
+            checkDataSource(each);
+        }
+    }
+    
+    private static void checkDataSource(final ReadwriteSplittingRuleSegment 
ruleSegment) {
+        for (Object each : ruleSegment.getLoadBalancer().getProps().keySet()) {
+            String dataSourceName = (String) each;
+            
ShardingSpherePreconditions.checkState(ruleSegment.getReadDataSources().contains(dataSourceName)
 || ruleSegment.getWriteDataSource().equals(dataSourceName),
+                    () -> new InvalidAlgorithmConfigurationException("Load 
balancer", ruleSegment.getLoadBalancer().getName()));
+        }
     }
 }
diff --git 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleExecutorTest.java
 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleExecutorTest.java
index 9db2fe18acb..f8f97d97dd5 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleExecutorTest.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleExecutorTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.readwritesplitting.distsql.handler.update;
 
 import org.apache.shardingsphere.distsql.segment.AlgorithmSegment;
+import 
org.apache.shardingsphere.infra.algorithm.core.exception.InvalidAlgorithmConfigurationException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.MissingRequiredStorageUnitsException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.MissingRequiredRuleException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -29,6 +30,8 @@ import 
org.apache.shardingsphere.readwritesplitting.distsql.segment.ReadwriteSpl
 import 
org.apache.shardingsphere.readwritesplitting.distsql.statement.AlterReadwriteSplittingRuleStatement;
 import 
org.apache.shardingsphere.readwritesplitting.exception.actual.DuplicateReadwriteSplittingActualDataSourceException;
 import 
org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
+import org.apache.shardingsphere.test.util.PropertiesBuilder;
+import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -74,7 +77,7 @@ class AlterReadwriteSplittingRuleExecutorTest {
     }
     
     @Test
-    void assertCheckSQLStatementWithoutExistedResources() {
+    void assertCheckSQLStatementWithNotExistedDataSources() {
         
when(resourceMetaData.getNotExistedDataSources(any())).thenReturn(Collections.singleton("read_ds_0"));
         ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
         
when(rule.getConfiguration()).thenReturn(createCurrentRuleConfiguration());
@@ -93,18 +96,18 @@ class AlterReadwriteSplittingRuleExecutorTest {
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateWriteResourceNamesInStatement() {
+    void assertCheckSQLStatementWithDuplicateWriteDataSourcesInStatement() {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
         
when(rule.getConfiguration()).thenReturn(createCurrentRuleConfigurationWithMultipleRules());
         executor.setRule(rule);
         
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class,
-                () -> 
executor.checkBeforeUpdate(createSQLStatementWithDuplicateWriteResourceNames("readwrite_ds_0",
 "readwrite_ds_1", "TEST")));
+                () -> 
executor.checkBeforeUpdate(createSQLStatementWithDuplicateWriteDataSources("readwrite_ds_0",
 "readwrite_ds_1", "TEST")));
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateWriteResourceNames() {
+    void assertCheckSQLStatementWithDuplicateWriteDataSources() {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
@@ -112,29 +115,39 @@ class AlterReadwriteSplittingRuleExecutorTest {
         executor.setRule(rule);
         
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class,
                 () -> executor.checkBeforeUpdate(
-                        createSQLStatement("readwrite_ds_0", "ds_write_1", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST")));
+                        createSQLStatement("readwrite_ds_0", "ds_write_1", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST", new Properties())));
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateReadResourceNamesInStatement() {
+    void assertCheckSQLStatementWithDuplicateReadDataSourcesInStatement() {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
         
when(rule.getConfiguration()).thenReturn(createCurrentRuleConfigurationWithMultipleRules());
         executor.setRule(rule);
         
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class,
-                () -> 
executor.checkBeforeUpdate(createSQLStatementWithDuplicateReadResourceNames("readwrite_ds_0",
 "readwrite_ds_1", "TEST")));
+                () -> 
executor.checkBeforeUpdate(createSQLStatementWithDuplicateReadDataSources("readwrite_ds_0",
 "readwrite_ds_1", "TEST")));
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateReadResourceNames() {
+    void assertCheckSQLStatementWithDuplicateReadDataSources() {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
         
when(rule.getConfiguration()).thenReturn(createCurrentRuleConfigurationWithMultipleRules());
         executor.setRule(rule);
         
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class,
-                () -> 
executor.checkBeforeUpdate(createSQLStatement("readwrite_ds_1", "write_ds_1", 
Arrays.asList("read_ds_0_0", "read_ds_0_1"), "TEST")));
+                () -> 
executor.checkBeforeUpdate(createSQLStatement("readwrite_ds_1", "write_ds_1", 
Arrays.asList("read_ds_0_0", "read_ds_0_1"), "TEST", new Properties())));
+    }
+    
+    @Test
+    void assertCheckSQLStatementWithInvalidLoadBalancerProperties() {
+        ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
+        
when(rule.getConfiguration()).thenReturn(createCurrentRuleConfiguration());
+        executor.setRule(rule);
+        assertThrows(InvalidAlgorithmConfigurationException.class,
+                () -> 
executor.checkBeforeUpdate(createSQLStatement("readwrite_ds", "write_ds", 
Arrays.asList("read_ds_0", "read_ds_1"), "weight",
+                        PropertiesBuilder.build(new Property("read_ds_0", 
"5"), new Property("read_ds_2", "5")))));
     }
     
     private AlterReadwriteSplittingRuleStatement createSQLStatement(final 
String loadBalancerTypeName) {
@@ -143,12 +156,13 @@ class AlterReadwriteSplittingRuleExecutorTest {
         return new 
AlterReadwriteSplittingRuleStatement(Collections.singleton(ruleSegment));
     }
     
-    private AlterReadwriteSplittingRuleStatement createSQLStatement(final 
String ruleName, final String writeDataSource, final Collection<String> 
readDataSources, final String loadBalancerName) {
-        ReadwriteSplittingRuleSegment ruleSegment = new 
ReadwriteSplittingRuleSegment(ruleName, writeDataSource, readDataSources, new 
AlgorithmSegment(loadBalancerName, new Properties()));
+    private AlterReadwriteSplittingRuleStatement createSQLStatement(final 
String ruleName, final String writeDataSource, final Collection<String> 
readDataSources,
+                                                                    final 
String loadBalancerName, final Properties props) {
+        ReadwriteSplittingRuleSegment ruleSegment = new 
ReadwriteSplittingRuleSegment(ruleName, writeDataSource, readDataSources, new 
AlgorithmSegment(loadBalancerName, props));
         return new 
AlterReadwriteSplittingRuleStatement(Collections.singleton(ruleSegment));
     }
     
-    private AlterReadwriteSplittingRuleStatement 
createSQLStatementWithDuplicateWriteResourceNames(final String ruleName0, final 
String ruleName1, final String loadBalancerName) {
+    private AlterReadwriteSplittingRuleStatement 
createSQLStatementWithDuplicateWriteDataSources(final String ruleName0, final 
String ruleName1, final String loadBalancerName) {
         ReadwriteSplittingRuleSegment ruleSegment0 = new 
ReadwriteSplittingRuleSegment(ruleName0, "write_ds", Arrays.asList("read_ds_0", 
"read_ds_1"),
                 new AlgorithmSegment(loadBalancerName, new Properties()));
         ReadwriteSplittingRuleSegment ruleSegment1 = new 
ReadwriteSplittingRuleSegment(ruleName1, "write_ds", Arrays.asList("read_ds_2", 
"read_ds_3"),
@@ -156,7 +170,7 @@ class AlterReadwriteSplittingRuleExecutorTest {
         return new 
AlterReadwriteSplittingRuleStatement(Arrays.asList(ruleSegment0, ruleSegment1));
     }
     
-    private AlterReadwriteSplittingRuleStatement 
createSQLStatementWithDuplicateReadResourceNames(final String ruleName0, final 
String ruleName1, final String loadBalancerName) {
+    private AlterReadwriteSplittingRuleStatement 
createSQLStatementWithDuplicateReadDataSources(final String ruleName0, final 
String ruleName1, final String loadBalancerName) {
         ReadwriteSplittingRuleSegment ruleSegment0 = new 
ReadwriteSplittingRuleSegment(ruleName0, "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"),
                 new AlgorithmSegment(loadBalancerName, new Properties()));
         ReadwriteSplittingRuleSegment ruleSegment1 = new 
ReadwriteSplittingRuleSegment(ruleName1, "write_ds_1", 
Arrays.asList("read_ds_0", "read_ds_1"),
diff --git 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleExecutorTest.java
 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleExecutorTest.java
index f8654c06fe3..f12739e47bd 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleExecutorTest.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleExecutorTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.readwritesplitting.distsql.handler.update;
 
 import org.apache.shardingsphere.distsql.segment.AlgorithmSegment;
+import 
org.apache.shardingsphere.infra.algorithm.core.exception.InvalidAlgorithmConfigurationException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.MissingRequiredStorageUnitsException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.DuplicateRuleException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.InvalidRuleConfigurationException;
@@ -33,6 +34,8 @@ import 
org.apache.shardingsphere.readwritesplitting.exception.actual.DuplicateRe
 import 
org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
+import org.apache.shardingsphere.test.util.PropertiesBuilder;
+import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -81,7 +84,7 @@ class CreateReadwriteSplittingRuleExecutorTest {
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateResource() {
+    void assertCheckSQLStatementWithDuplicateDataSources() {
         
when(resourceMetaData.getStorageUnits()).thenReturn(Collections.singletonMap("write_ds",
 null));
         ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
         
when(rule.getConfiguration()).thenReturn(createCurrentRuleConfiguration());
@@ -90,13 +93,13 @@ class CreateReadwriteSplittingRuleExecutorTest {
     }
     
     @Test
-    void assertCheckSQLStatementWithoutExistedResources() {
+    void assertCheckSQLStatementWithNotExistedDataSources() {
         
when(resourceMetaData.getNotExistedDataSources(any())).thenReturn(Arrays.asList("read_ds_0",
 "read_ds_1"));
         assertThrows(MissingRequiredStorageUnitsException.class, () -> 
executor.checkBeforeUpdate(createSQLStatement("TEST")));
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateLogicResource() {
+    void assertCheckSQLStatementWithDuplicateLogicDataSource() {
         DataSourceMapperRuleAttribute ruleAttribute = 
mock(DataSourceMapperRuleAttribute.class);
         
when(ruleAttribute.getDataSourceMapper()).thenReturn(Collections.singletonMap("duplicate_ds",
 Collections.singleton("ds_0")));
         
when(database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class)).thenReturn(Collections.singleton(ruleAttribute));
@@ -107,33 +110,40 @@ class CreateReadwriteSplittingRuleExecutorTest {
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateWriteResourceNamesInStatement() {
+    void assertCheckSQLStatementWithDuplicateWriteDataSourcesInStatement() {
         
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class,
-                () -> 
executor.checkBeforeUpdate(createSQLStatementWithDuplicateWriteResourceNames("write_ds_0",
 "write_ds_1", "TEST")));
+                () -> 
executor.checkBeforeUpdate(createSQLStatementWithDuplicateWriteDataSources("write_ds_0",
 "write_ds_1", "TEST")));
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateWriteResourceNames() {
+    void assertCheckSQLStatementWithDuplicateWriteDataSources() {
         ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
         
when(rule.getConfiguration()).thenReturn(createCurrentRuleConfiguration());
         executor.setRule(rule);
         
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class,
-                () -> 
executor.checkBeforeUpdate(createSQLStatement("readwrite_ds_1", "ds_write", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST")));
+                () -> 
executor.checkBeforeUpdate(createSQLStatement("readwrite_ds_1", "ds_write", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST", new Properties())));
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateReadResourceNamesInStatement() {
+    void assertCheckSQLStatementWithDuplicateReadDataSourcesInStatement() {
         
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class,
-                () -> 
executor.checkBeforeUpdate(createSQLStatementWithDuplicateReadResourceNames("write_ds_0",
 "write_ds_1", "TEST")));
+                () -> 
executor.checkBeforeUpdate(createSQLStatementWithDuplicateReadDataSources("write_ds_0",
 "write_ds_1", "TEST")));
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateReadResourceNames() {
+    void assertCheckSQLStatementWithDuplicateReadDataSources() {
         ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
         
when(rule.getConfiguration()).thenReturn(createCurrentRuleConfiguration());
         executor.setRule(rule);
         
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class,
-                () -> 
executor.checkBeforeUpdate(createSQLStatement("readwrite_ds_1", "write_ds_1", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST")));
+                () -> 
executor.checkBeforeUpdate(createSQLStatement("readwrite_ds_1", "write_ds_1", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST", new Properties())));
+    }
+    
+    @Test
+    void assertCheckSQLStatementWithInvalidLoadBalancerProperties() {
+        assertThrows(InvalidAlgorithmConfigurationException.class,
+                () -> 
executor.checkBeforeUpdate(createSQLStatement("readwrite_group", "write_ds", 
Arrays.asList("read_ds_0", "read_ds_1"), "weight",
+                        PropertiesBuilder.build(new Property("read_ds_0", 
"5"), new Property("read_ds_2", "5")))));
     }
     
     @Test
@@ -172,15 +182,16 @@ class CreateReadwriteSplittingRuleExecutorTest {
                 new AlgorithmSegment(loadBalancerName, new Properties())));
     }
     
-    private CreateReadwriteSplittingRuleStatement createSQLStatement(final 
String ruleName, final String writeDataSource, final Collection<String> 
readDataSources, final String loadBalancerName) {
-        return createSQLStatement(false, new 
ReadwriteSplittingRuleSegment(ruleName, writeDataSource, readDataSources, new 
AlgorithmSegment(loadBalancerName, new Properties())));
+    private CreateReadwriteSplittingRuleStatement createSQLStatement(final 
String ruleName, final String writeDataSource, final Collection<String> 
readDataSources,
+                                                                     final 
String loadBalancerName, final Properties props) {
+        return createSQLStatement(false, new 
ReadwriteSplittingRuleSegment(ruleName, writeDataSource, readDataSources, new 
AlgorithmSegment(loadBalancerName, props)));
     }
     
     private CreateReadwriteSplittingRuleStatement createSQLStatement(final 
boolean ifNotExists, final ReadwriteSplittingRuleSegment... ruleSegments) {
         return new CreateReadwriteSplittingRuleStatement(ifNotExists, 
Arrays.asList(ruleSegments));
     }
     
-    private CreateReadwriteSplittingRuleStatement 
createSQLStatementWithDuplicateWriteResourceNames(final String ruleName0, final 
String ruleName1, final String loadBalancerName) {
+    private CreateReadwriteSplittingRuleStatement 
createSQLStatementWithDuplicateWriteDataSources(final String ruleName0, final 
String ruleName1, final String loadBalancerName) {
         ReadwriteSplittingRuleSegment ruleSegment0 = new 
ReadwriteSplittingRuleSegment(ruleName0, "write_ds", Arrays.asList("read_ds_0", 
"read_ds_1"),
                 new AlgorithmSegment(loadBalancerName, new Properties()));
         ReadwriteSplittingRuleSegment ruleSegment1 = new 
ReadwriteSplittingRuleSegment(ruleName1, "write_ds", Arrays.asList("read_ds_2", 
"read_ds_3"),
@@ -188,7 +199,7 @@ class CreateReadwriteSplittingRuleExecutorTest {
         return createSQLStatement(false, ruleSegment0, ruleSegment1);
     }
     
-    private CreateReadwriteSplittingRuleStatement 
createSQLStatementWithDuplicateReadResourceNames(final String ruleName0, final 
String ruleName1, final String loadBalancerName) {
+    private CreateReadwriteSplittingRuleStatement 
createSQLStatementWithDuplicateReadDataSources(final String ruleName0, final 
String ruleName1, final String loadBalancerName) {
         ReadwriteSplittingRuleSegment ruleSegment0 = new 
ReadwriteSplittingRuleSegment(ruleName0, "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"),
                 new AlgorithmSegment(loadBalancerName, new Properties()));
         ReadwriteSplittingRuleSegment ruleSegment1 = new 
ReadwriteSplittingRuleSegment(ruleName1, "write_ds_1", 
Arrays.asList("read_ds_0", "read_ds_1"),

Reply via email to