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

yx9o 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 a6a09ba68ba Remove use original database to build new MetaDataContexts 
(#34222)
a6a09ba68ba is described below

commit a6a09ba68baf3bad8dc088f2af8ebecf9ad58fa5
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Jan 2 14:44:54 2025 +0800

    Remove use original database to build new MetaDataContexts (#34222)
---
 .../manager/DatabaseRuleConfigurationManager.java         | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

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 9cf95b320a9..50361e42ecd 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
@@ -36,6 +36,7 @@ import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
 
 /**
  * Database rule configuration manager.
@@ -74,7 +75,7 @@ public final class DatabaseRuleConfigurationManager {
         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, database, rules);
+        refreshMetadata(databaseName, getRuleConfigurations(rules));
     }
     
     /**
@@ -98,14 +99,16 @@ public final class DatabaseRuleConfigurationManager {
             rules.addAll(DatabaseRulesBuilder.build(
                     databaseName, database.getProtocolType(), 
database.getRuleMetaData().getRules(), ruleConfig, computeNodeInstanceContext, 
database.getResourceMetaData()));
         }
-        refreshMetadata(databaseName, database, rules);
+        refreshMetadata(databaseName, getRuleConfigurations(rules));
     }
     
-    private void refreshMetadata(final String databaseName, final 
ShardingSphereDatabase database, final Collection<ShardingSphereRule> rules) 
throws SQLException {
-        database.getRuleMetaData().getRules().clear();
-        database.getRuleMetaData().getRules().addAll(rules);
+    private void refreshMetadata(final String databaseName, final 
Collection<RuleConfiguration> ruleConfigurations) throws SQLException {
         MetaDataContexts reloadMetaDataContexts = 
MetaDataContextsFactory.createByAlterRule(databaseName, false,
-                database.getRuleMetaData().getConfigurations(), 
metaDataContexts.get(), metaDataPersistService, computeNodeInstanceContext);
+                ruleConfigurations, metaDataContexts.get(), 
metaDataPersistService, computeNodeInstanceContext);
         metaDataContexts.set(reloadMetaDataContexts);
     }
+    
+    private Collection<RuleConfiguration> getRuleConfigurations(final 
Collection<ShardingSphereRule> rules) {
+        return 
rules.stream().map(ShardingSphereRule::getConfiguration).collect(Collectors.toList());
+    }
 }

Reply via email to