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

totalo 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 85e6523fbc9 Refactor MetaDataContextManager (#32363)
85e6523fbc9 is described below

commit 85e6523fbc949baaadc2367579ec4e25b5836482
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Aug 1 22:49:58 2024 +0800

    Refactor MetaDataContextManager (#32363)
---
 .../mode/metadata/MetaDataContextManager.java           | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
index 0ff49fa206e..fb38d94b388 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.manager.DatabaseRuleConfigurationManager;
 import 
org.apache.shardingsphere.mode.metadata.manager.GlobalConfigurationManager;
@@ -38,10 +39,13 @@ import 
org.apache.shardingsphere.mode.metadata.manager.ShardingSphereDatabaseDat
 import org.apache.shardingsphere.mode.metadata.manager.StorageUnitManager;
 import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
+import org.apache.shardingsphere.mode.spi.RulePersistDecorator;
 
 import java.sql.SQLException;
 import java.util.Collection;
+import java.util.LinkedList;
 import java.util.Map;
+import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
@@ -151,11 +155,20 @@ public class MetaDataContextManager {
         Map<String, ShardingSphereDatabase> changedDatabases = 
MetaDataContextsFactory
                 .createChangedDatabases(database.getName(), false, 
switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService, 
computeNodeInstanceContext);
         ConfigurationProperties props = new 
ConfigurationProperties(metaDataPersistService.getPropsService().load());
-        Collection<RuleConfiguration> globalRuleConfigs = 
metaDataPersistService.getGlobalRuleService().load();
-        RuleMetaData changedGlobalMetaData = new 
RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, changedDatabases, 
props));
+        RuleMetaData changedGlobalMetaData = new 
RuleMetaData(GlobalRulesBuilder.buildRules(getGlobalRuleConfigurations(), 
changedDatabases, props));
         MetaDataContexts result = 
MetaDataContextsFactory.create(metaDataPersistService,
                 new ShardingSphereMetaData(changedDatabases, 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
         switchingResource.closeStaleDataSources();
         return result;
     }
+    
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    private Collection<RuleConfiguration> getGlobalRuleConfigurations() {
+        Collection<RuleConfiguration> result = new LinkedList<>();
+        for (RuleConfiguration each : 
metaDataPersistService.getGlobalRuleService().load()) {
+            Optional<RulePersistDecorator> rulePersistDecorator = 
TypedSPILoader.findService(RulePersistDecorator.class, each);
+            result.add(rulePersistDecorator.isPresent() && 
computeNodeInstanceContext.isCluster() ? 
rulePersistDecorator.get().restore(each) : each);
+        }
+        return result;
+    }
 }

Reply via email to