You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/11/16 03:32:32 UTC

[shardingsphere] branch master updated: Refactor ShardingSphereDatabase.reloadRules() (#22195)

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 24a7581fdaa Refactor ShardingSphereDatabase.reloadRules() (#22195)
24a7581fdaa is described below

commit 24a7581fdaab1b2f67b1e3bceac50a4e8596bfe5
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Wed Nov 16 11:32:23 2022 +0800

    Refactor ShardingSphereDatabase.reloadRules() (#22195)
    
    * Build SingleTableRule ahead of time
    
    * Adjustment param name
---
 .../infra/metadata/database/ShardingSphereDatabase.java          | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 3cf527949b6..17761839f07 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -180,10 +180,13 @@ public final class ShardingSphereDatabase {
      */
     public synchronized void reloadRules(final Class<? extends ShardingSphereRule> ruleClass) {
         Collection<? extends ShardingSphereRule> toBeReloadedRules = ruleMetaData.findRules(ruleClass);
-        RuleConfiguration config = toBeReloadedRules.stream().map(ShardingSphereRule::getConfiguration).findFirst().orElse(null);
+        RuleConfiguration ruleConfig = toBeReloadedRules.stream().map(ShardingSphereRule::getConfiguration).findFirst().orElse(null);
+        Collection<ShardingSphereRule> databaseRules = new LinkedList<>(ruleMetaData.getRules());
         toBeReloadedRules.stream().findFirst().ifPresent(optional -> {
-            ruleMetaData.getRules().removeAll(toBeReloadedRules);
-            ruleMetaData.getRules().add(((MutableDataNodeRule) optional).reloadRule(config, name, resourceMetaData.getDataSources(), ruleMetaData.getRules()));
+            databaseRules.removeAll(toBeReloadedRules);
+            databaseRules.add(((MutableDataNodeRule) optional).reloadRule(ruleConfig, name, resourceMetaData.getDataSources(), databaseRules));
         });
+        ruleMetaData.getRules().clear();
+        ruleMetaData.getRules().addAll(databaseRules);
     }
 }