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

zhangliang 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 402398ffd9d Refactor DatabaseRulesBuilder (#34546)
402398ffd9d is described below

commit 402398ffd9df3c55ac1361a9b350b7ff22960c73
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sat Feb 1 12:30:43 2025 +0800

    Refactor DatabaseRulesBuilder (#34546)
---
 .../builder/database/DatabaseRulesBuilder.java     | 23 +++++++++-------------
 .../manager/DatabaseRuleConfigurationManager.java  | 18 +++++++----------
 2 files changed, 16 insertions(+), 25 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
index 11e8e948789..8a614a452f0 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
@@ -72,7 +72,7 @@ public final class DatabaseRulesBuilder {
     }
     
     /**
-     * Build database rules.
+     * Build database rule.
      *
      * @param databaseName database name
      * @param protocolType protocol type
@@ -80,22 +80,17 @@ public final class DatabaseRulesBuilder {
      * @param ruleConfig rule configuration
      * @param computeNodeInstanceContext compute node instance context
      * @param resourceMetaData  resource meta data
-     * @return built rules
+     * @return built rule
      */
     @SuppressWarnings({"unchecked", "rawtypes"})
-    public static Collection<ShardingSphereRule> build(final String 
databaseName, final DatabaseType protocolType, final 
Collection<ShardingSphereRule> rules, final RuleConfiguration ruleConfig,
-                                                       final 
ComputeNodeInstanceContext computeNodeInstanceContext, final ResourceMetaData 
resourceMetaData) {
-        Collection<ShardingSphereRule> result = new LinkedList<>();
-        for (Entry<RuleConfiguration, DatabaseRuleBuilder> entry : 
OrderedSPILoader.getServices(DatabaseRuleBuilder.class,
-                Collections.singletonList(ruleConfig), 
Comparator.reverseOrder()).entrySet()) {
-            RuleConfigurationChecker configChecker = 
OrderedSPILoader.getServicesByClass(
-                    RuleConfigurationChecker.class, 
Collections.singleton(entry.getKey().getClass())).get(entry.getKey().getClass());
-            if (null != configChecker) {
-                configChecker.check(databaseName, entry.getKey(), 
resourceMetaData.getDataSourceMap(), rules);
-            }
-            result.add(entry.getValue().build(entry.getKey(), databaseName, 
protocolType, resourceMetaData, rules, computeNodeInstanceContext));
+    public static ShardingSphereRule build(final String databaseName, final 
DatabaseType protocolType, final Collection<ShardingSphereRule> rules, final 
RuleConfiguration ruleConfig,
+                                           final ComputeNodeInstanceContext 
computeNodeInstanceContext, final ResourceMetaData resourceMetaData) {
+        DatabaseRuleBuilder databaseRuleBuilder = 
OrderedSPILoader.getServices(DatabaseRuleBuilder.class, 
Collections.singleton(ruleConfig)).get(ruleConfig);
+        RuleConfigurationChecker configChecker = 
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class, 
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
+        if (null != configChecker) {
+            configChecker.check(databaseName, ruleConfig, 
resourceMetaData.getDataSourceMap(), rules);
         }
-        return result;
+        return databaseRuleBuilder.build(ruleConfig, databaseName, 
protocolType, resourceMetaData, rules, computeNodeInstanceContext);
     }
     
     @SuppressWarnings("rawtypes")
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
index bbc6040c32b..8c252fd25e5 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
@@ -66,9 +66,8 @@ public final class DatabaseRuleConfigurationManager {
             return;
         }
         rules.removeIf(each -> 
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
-        rules.addAll(DatabaseRulesBuilder.build(
-                databaseName, database.getProtocolType(), 
database.getRuleMetaData().getRules(), ruleConfig, computeNodeInstanceContext, 
database.getResourceMetaData()));
-        refreshMetadata(databaseName, getRuleConfigurations(rules));
+        rules.add(DatabaseRulesBuilder.build(databaseName, 
database.getProtocolType(), database.getRuleMetaData().getRules(), ruleConfig, 
computeNodeInstanceContext, database.getResourceMetaData()));
+        refreshMetadata(databaseName, rules);
     }
     
     /**
@@ -89,17 +88,14 @@ public final class DatabaseRuleConfigurationManager {
         }
         rules.removeIf(each -> 
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
         if 
(!TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class, 
ruleConfig.getClass()).isEmpty((DatabaseRuleConfiguration) ruleConfig)) {
-            rules.addAll(DatabaseRulesBuilder.build(
+            rules.add(DatabaseRulesBuilder.build(
                     databaseName, database.getProtocolType(), 
database.getRuleMetaData().getRules(), ruleConfig, computeNodeInstanceContext, 
database.getResourceMetaData()));
         }
-        refreshMetadata(databaseName, getRuleConfigurations(rules));
+        refreshMetadata(databaseName, rules);
     }
     
-    private void refreshMetadata(final String databaseName, final 
Collection<RuleConfiguration> ruleConfigurations) throws SQLException {
-        metaDataContexts.update(new 
MetaDataContextsFactory(metaDataPersistFacade, 
computeNodeInstanceContext).createByAlterRule(databaseName, false, 
ruleConfigurations, metaDataContexts));
-    }
-    
-    private Collection<RuleConfiguration> getRuleConfigurations(final 
Collection<ShardingSphereRule> rules) {
-        return 
rules.stream().map(ShardingSphereRule::getConfiguration).collect(Collectors.toList());
+    private void refreshMetadata(final String databaseName, final 
Collection<ShardingSphereRule> rules) throws SQLException {
+        Collection<RuleConfiguration> ruleConfigs = 
rules.stream().map(ShardingSphereRule::getConfiguration).collect(Collectors.toList());
+        metaDataContexts.update(new 
MetaDataContextsFactory(metaDataPersistFacade, 
computeNodeInstanceContext).createByAlterRule(databaseName, false, ruleConfigs, 
metaDataContexts));
     }
 }

Reply via email to