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

zhaojinchao 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 633b62027e5 Refactor ReadwriteSplittingRuleConfigurationChecker 
(#30490)
633b62027e5 is described below

commit 633b62027e5cad8460da0b18d2b93efe695f3071
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Mar 14 23:22:36 2024 +0800

    Refactor ReadwriteSplittingRuleConfigurationChecker (#30490)
    
    * Refactor ReadwriteSplittingRuleConfigurationChecker
    
    * Refactor ReadwriteSplittingRuleConfigurationChecker
    
    * Revise javadoc
---
 .../ReadwriteSplittingRuleConfigurationChecker.java    | 18 ++++++++++--------
 .../load/balancer/core/LoadBalanceAlgorithm.java       |  2 +-
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
index 127c8e91812..c6c1ee5cffa 100644
--- 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
@@ -54,7 +54,7 @@ public final class ReadwriteSplittingRuleConfigurationChecker 
implements RuleCon
     public void check(final String databaseName, final 
ReadwriteSplittingRuleConfiguration config, final Map<String, DataSource> 
dataSourceMap, final Collection<ShardingSphereRule> builtRules) {
         Collection<ReadwriteSplittingDataSourceRuleConfiguration> configs = 
config.getDataSources();
         checkDataSources(databaseName, configs, dataSourceMap, builtRules);
-        checkLoadBalancerDataSourceName(databaseName, configs, 
getLoadBalancer(config));
+        checkLoadBalancer(databaseName, configs, getLoadBalancer(config));
     }
     
     private void checkDataSources(final String databaseName, final 
Collection<ReadwriteSplittingDataSourceRuleConfiguration> configs,
@@ -108,8 +108,7 @@ public final class 
ReadwriteSplittingRuleConfigurationChecker implements RuleCon
         }
     }
     
-    private void checkLoadBalancerDataSourceName(final String databaseName, 
final Collection<ReadwriteSplittingDataSourceRuleConfiguration> configs,
-                                                 final Map<String, 
LoadBalanceAlgorithm> loadBalancers) {
+    private void checkLoadBalancer(final String databaseName, final 
Collection<ReadwriteSplittingDataSourceRuleConfiguration> configs, final 
Map<String, LoadBalanceAlgorithm> loadBalancers) {
         for (ReadwriteSplittingDataSourceRuleConfiguration each : configs) {
             if (Strings.isNullOrEmpty(each.getLoadBalancerName())) {
                 continue;
@@ -117,15 +116,18 @@ public final class 
ReadwriteSplittingRuleConfigurationChecker implements RuleCon
             LoadBalanceAlgorithm loadBalancer = 
loadBalancers.get(each.getLoadBalancerName());
             ShardingSpherePreconditions.checkNotNull(loadBalancer, () -> new 
LoadBalancerAlgorithmNotFoundException(databaseName));
             if (loadBalancer instanceof WeightLoadBalanceAlgorithm) {
-                
ShardingSpherePreconditions.checkState(!((WeightLoadBalanceAlgorithm) 
loadBalancer).getAvailableTargetNames().isEmpty(),
-                        () -> new 
MissingRequiredReadDatabaseWeightException(loadBalancer.getType(), 
String.format("Read data source weight config are required in database `%s`", 
databaseName)));
-                Collection<String> dataSourceNames = 
each.getReadDataSourceNames();
-                ((WeightLoadBalanceAlgorithm) 
loadBalancer).getAvailableTargetNames().forEach(dataSourceName -> 
ShardingSpherePreconditions.checkState(dataSourceNames.contains(dataSourceName),
-                        () -> new 
InvalidWeightLoadBalancerConfigurationException(databaseName)));
+                checkWeightLoadBalancer(databaseName, each, 
(WeightLoadBalanceAlgorithm) loadBalancer);
             }
         }
     }
     
+    private void checkWeightLoadBalancer(final String databaseName, final 
ReadwriteSplittingDataSourceRuleConfiguration sourceRuleConfig, final 
WeightLoadBalanceAlgorithm loadBalancer) {
+        
ShardingSpherePreconditions.checkState(!loadBalancer.getAvailableTargetNames().isEmpty(),
+                () -> new 
MissingRequiredReadDatabaseWeightException(loadBalancer.getType(), 
String.format("Read data source weight config are required in database `%s`", 
databaseName)));
+        loadBalancer.getAvailableTargetNames().forEach(each -> 
ShardingSpherePreconditions.checkState(sourceRuleConfig.getReadDataSourceNames().contains(each),
+                () -> new 
InvalidWeightLoadBalancerConfigurationException(databaseName)));
+    }
+    
     private Map<String, LoadBalanceAlgorithm> getLoadBalancer(final 
ReadwriteSplittingRuleConfiguration config) {
         Map<String, LoadBalanceAlgorithm> result = new 
LinkedHashMap<>(config.getLoadBalancers().size(), 1F);
         config.getLoadBalancers().forEach((key, value) -> result.put(key, 
TypedSPILoader.getService(LoadBalanceAlgorithm.class, value.getType(), 
value.getProps())));
diff --git 
a/infra/algorithm/load-balancer/core/src/main/java/org/apache/shardingsphere/infra/algorithm/load/balancer/core/LoadBalanceAlgorithm.java
 
b/infra/algorithm/load-balancer/core/src/main/java/org/apache/shardingsphere/infra/algorithm/load/balancer/core/LoadBalanceAlgorithm.java
index 02bfbc170bb..4c3f81c9167 100644
--- 
a/infra/algorithm/load-balancer/core/src/main/java/org/apache/shardingsphere/infra/algorithm/load/balancer/core/LoadBalanceAlgorithm.java
+++ 
b/infra/algorithm/load-balancer/core/src/main/java/org/apache/shardingsphere/infra/algorithm/load/balancer/core/LoadBalanceAlgorithm.java
@@ -29,7 +29,7 @@ public interface LoadBalanceAlgorithm extends 
ShardingSphereAlgorithm {
     /**
      * Get available target name.
      * 
-     * @param groupName group name, which uniquely identifies a set of 
availableTargetNames
+     * @param groupName group name, which uniquely identifies available target 
names
      * @param availableTargetNames available data sources or instance id
      * @return available target name
      */

Reply via email to