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 <[email protected]>
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);
     }
 }

Reply via email to