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

menghaoran 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 f87a7ca4f28 Refactor MetaDataContextsFactory.createChangedDatabases() 
to createChangedDatabase() (#33933)
f87a7ca4f28 is described below

commit f87a7ca4f28c2e3fab18abb7e78b651285c8196d
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Dec 6 16:25:34 2024 +0800

    Refactor MetaDataContextsFactory.createChangedDatabases() to 
createChangedDatabase() (#33933)
    
    * Refactor MetaDataContextsFactory.createChangedDatabases()
    
    * Refactor MetaDataContextsFactory.createChangedDatabases()
    
    * Refactor MetaDataContextsFactory.createChangedDatabases()
---
 .../infra/metadata/ShardingSphereMetaData.java     |  9 ++++
 .../mode/metadata/MetaDataContextManager.java      | 11 ++--
 .../mode/metadata/MetaDataContextsFactory.java     | 62 ++++++++++++----------
 .../StandaloneMetaDataManagerPersistService.java   |  8 +--
 4 files changed, 54 insertions(+), 36 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index 1c0bac2d332..1970cc4ae39 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -111,6 +111,15 @@ public final class ShardingSphereMetaData {
         globalRuleMetaData.getRules().forEach(each -> ((GlobalRule) 
each).refresh(databases.values(), GlobalRuleChangedType.DATABASE_CHANGED));
     }
     
+    /**
+     * Put database.
+     *
+     * @param database database
+     */
+    public void putDatabase(final ShardingSphereDatabase database) {
+        databases.put(database.getName(), database);
+    }
+    
     /**
      * Drop database.
      *
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 65a9639b6d0..7da1734731d 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
@@ -150,13 +150,14 @@ public class MetaDataContextManager {
         Map<String, DataSourcePoolProperties> dataSourcePoolPropsFromRegCenter 
= metaDataPersistService.getDataSourceUnitService().load(database.getName());
         SwitchingResource switchingResource = 
resourceSwitchManager.switchByAlterStorageUnit(database.getResourceMetaData(), 
dataSourcePoolPropsFromRegCenter);
         Collection<RuleConfiguration> ruleConfigs = 
metaDataPersistService.getDatabaseRulePersistService().load(database.getName());
-        Map<String, ShardingSphereDatabase> changedDatabases = 
MetaDataContextsFactory
-                .createChangedDatabases(database.getName(), false, 
switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService, 
computeNodeInstanceContext);
+        ShardingSphereDatabase changedDatabase = MetaDataContextsFactory
+                .createChangedDatabase(database.getName(), false, 
switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService, 
computeNodeInstanceContext);
+        metaDataContexts.get().getMetaData().putDatabase(changedDatabase);
         ConfigurationProperties props = new 
ConfigurationProperties(metaDataPersistService.getPropsService().load());
-        RuleMetaData changedGlobalMetaData = new RuleMetaData(
-                
GlobalRulesBuilder.buildRules(ruleConfigPersistDecorateEngine.restore(metaDataPersistService.getGlobalRuleService().load()),
 changedDatabases.values(), props));
+        RuleMetaData changedGlobalMetaData = new 
RuleMetaData(GlobalRulesBuilder.buildRules(
+                
ruleConfigPersistDecorateEngine.restore(metaDataPersistService.getGlobalRuleService().load()),
 metaDataContexts.get().getMetaData().getAllDatabases(), props));
         MetaDataContexts result = 
MetaDataContextsFactory.create(metaDataPersistService,
-                new ShardingSphereMetaData(changedDatabases.values(), 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
+                new 
ShardingSphereMetaData(metaDataContexts.get().getMetaData().getAllDatabases(), 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
         switchingResource.closeStaleDataSources();
         return result;
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index f9638a63f7c..f2b67e77511 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -267,12 +267,14 @@ public final class MetaDataContextsFactory {
     public static MetaDataContexts createBySwitchResource(final String 
databaseName, final boolean internalLoadMetaData, final SwitchingResource 
switchingResource,
                                                           final 
MetaDataContexts originalMetaDataContexts, final MetaDataPersistService 
metaDataPersistService,
                                                           final 
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
-        Map<String, ShardingSphereDatabase> changedDatabases =
-                createChangedDatabases(databaseName, internalLoadMetaData, 
switchingResource, null, originalMetaDataContexts, metaDataPersistService, 
computeNodeInstanceContext);
+        ShardingSphereDatabase changedDatabase = createChangedDatabase(
+                databaseName, internalLoadMetaData, switchingResource, null, 
originalMetaDataContexts, metaDataPersistService, computeNodeInstanceContext);
         ConfigurationProperties props = 
originalMetaDataContexts.getMetaData().getProps();
+        ShardingSphereMetaData clonedMetaData = 
cloneMetaData(originalMetaDataContexts.getMetaData(), changedDatabase);
         RuleMetaData changedGlobalMetaData = new RuleMetaData(
-                
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 changedDatabases.values(), props));
-        return create(metaDataPersistService, new 
ShardingSphereMetaData(changedDatabases.values(), 
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
+                
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 clonedMetaData.getAllDatabases(), props));
+        return create(
+                metaDataPersistService, new 
ShardingSphereMetaData(clonedMetaData.getAllDatabases(), 
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
     }
     
     /**
@@ -290,16 +292,25 @@ public final class MetaDataContextsFactory {
     public static MetaDataContexts createByAlterRule(final String 
databaseName, final boolean internalLoadMetaData, final 
Collection<RuleConfiguration> ruleConfigs,
                                                      final MetaDataContexts 
originalMetaDataContexts, final MetaDataPersistService metaDataPersistService,
                                                      final 
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
-        Map<String, ShardingSphereDatabase> changedDatabases =
-                createChangedDatabases(databaseName, internalLoadMetaData, 
null, ruleConfigs, originalMetaDataContexts, metaDataPersistService, 
computeNodeInstanceContext);
+        ShardingSphereDatabase changedDatabase = createChangedDatabase(
+                databaseName, internalLoadMetaData, null, ruleConfigs, 
originalMetaDataContexts, metaDataPersistService, computeNodeInstanceContext);
+        ShardingSphereMetaData clonedMetaData = 
cloneMetaData(originalMetaDataContexts.getMetaData(), changedDatabase);
         ConfigurationProperties props = 
originalMetaDataContexts.getMetaData().getProps();
         RuleMetaData changedGlobalMetaData = new RuleMetaData(
-                
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 changedDatabases.values(), props));
-        return create(metaDataPersistService, new 
ShardingSphereMetaData(changedDatabases.values(), 
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
+                
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 clonedMetaData.getAllDatabases(), props));
+        return create(metaDataPersistService, new ShardingSphereMetaData(
+                clonedMetaData.getAllDatabases(), 
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
+    }
+    
+    private static ShardingSphereMetaData cloneMetaData(final 
ShardingSphereMetaData originalMetaData, final ShardingSphereDatabase 
changedDatabase) {
+        ShardingSphereMetaData result = new ShardingSphereMetaData(
+                originalMetaData.getAllDatabases(), 
originalMetaData.getGlobalResourceMetaData(), 
originalMetaData.getGlobalRuleMetaData(), originalMetaData.getProps());
+        result.putDatabase(changedDatabase);
+        return result;
     }
     
     /**
-     * Create changed databases by switch resource.
+     * Create changed database by switch resource.
      *
      * @param databaseName database name
      * @param internalLoadMetaData internal load meta data
@@ -308,24 +319,29 @@ public final class MetaDataContextsFactory {
      * @param originalMetaDataContext original meta data contexts
      * @param metaDataPersistService meta data persist service
      * @param computeNodeInstanceContext compute node instance context
-     * @return changed databases
+     * @return changed database
      * @throws SQLException SQL exception
      */
-    public static Map<String, ShardingSphereDatabase> 
createChangedDatabases(final String databaseName, final boolean 
internalLoadMetaData,
-                                                                             
final SwitchingResource switchingResource, final Collection<RuleConfiguration> 
ruleConfigs,
-                                                                             
final MetaDataContexts originalMetaDataContext,
-                                                                             
final MetaDataPersistService metaDataPersistService,
-                                                                             
final ComputeNodeInstanceContext computeNodeInstanceContext) throws 
SQLException {
+    public static ShardingSphereDatabase createChangedDatabase(final String 
databaseName, final boolean internalLoadMetaData,
+                                                               final 
SwitchingResource switchingResource, final Collection<RuleConfiguration> 
ruleConfigs,
+                                                               final 
MetaDataContexts originalMetaDataContext,
+                                                               final 
MetaDataPersistService metaDataPersistService,
+                                                               final 
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
         ResourceMetaData effectiveResourceMetaData = 
getEffectiveResourceMetaData(originalMetaDataContext.getMetaData().getDatabase(databaseName),
 switchingResource);
         Collection<RuleConfiguration> toBeCreatedRuleConfigs = null == 
ruleConfigs
                 ? 
originalMetaDataContext.getMetaData().getDatabase(databaseName).getRuleMetaData().getConfigurations()
                 : ruleConfigs;
         DatabaseConfiguration toBeCreatedDatabaseConfig = 
getDatabaseConfiguration(effectiveResourceMetaData, switchingResource, 
toBeCreatedRuleConfigs);
-        ShardingSphereDatabase changedDatabase = 
createChangedDatabase(originalMetaDataContext.getMetaData().getDatabase(databaseName).getName(),
 internalLoadMetaData,
+        return 
createChangedDatabase(originalMetaDataContext.getMetaData().getDatabase(databaseName).getName(),
 internalLoadMetaData,
                 metaDataPersistService, toBeCreatedDatabaseConfig, 
originalMetaDataContext.getMetaData().getProps(), computeNodeInstanceContext);
-        Map<String, ShardingSphereDatabase> result = new 
LinkedHashMap<>(originalMetaDataContext.getMetaData().getDatabases());
-        result.put(databaseName.toLowerCase(), changedDatabase);
-        return result;
+    }
+    
+    private static ShardingSphereDatabase createChangedDatabase(final String 
databaseName, final boolean internalLoadMetaData, final MetaDataPersistService 
persistService,
+                                                                final 
DatabaseConfiguration databaseConfig, final ConfigurationProperties props,
+                                                                final 
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
+        return internalLoadMetaData
+                ? InternalMetaDataFactory.create(databaseName, persistService, 
databaseConfig, props, computeNodeInstanceContext)
+                : ExternalMetaDataFactory.create(databaseName, databaseConfig, 
props, computeNodeInstanceContext);
     }
     
     private static ResourceMetaData getEffectiveResourceMetaData(final 
ShardingSphereDatabase database, final SwitchingResource resource) {
@@ -369,12 +385,4 @@ public final class MetaDataContextsFactory {
         }
         return result;
     }
-    
-    private static ShardingSphereDatabase createChangedDatabase(final String 
databaseName, final boolean internalLoadMetaData, final MetaDataPersistService 
persistService,
-                                                                final 
DatabaseConfiguration databaseConfig, final ConfigurationProperties props,
-                                                                final 
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
-        return internalLoadMetaData
-                ? InternalMetaDataFactory.create(databaseName, persistService, 
databaseConfig, props, computeNodeInstanceContext)
-                : ExternalMetaDataFactory.create(databaseName, databaseConfig, 
props, computeNodeInstanceContext);
-    }
 }
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
index f7058181afd..9e98b5621d5 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
@@ -224,9 +224,9 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     public void registerStorageUnits(final String databaseName, final 
Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException {
         SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager().switchByRegisterStorageUnit(metaDataContextManager.getMetaDataContexts().get()
                 
.getMetaData().getDatabase(databaseName).getResourceMetaData(), 
toBeRegisteredProps);
-        Map<String, ShardingSphereDatabase> changedDatabases = 
MetaDataContextsFactory.createChangedDatabases(databaseName, false, 
switchingResource, null,
+        ShardingSphereDatabase changedDatabase = 
MetaDataContextsFactory.createChangedDatabase(databaseName, false, 
switchingResource, null,
                 metaDataContextManager.getMetaDataContexts().get(), 
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
-        
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabases().putAll(changedDatabases);
+        
metaDataContextManager.getMetaDataContexts().get().getMetaData().putDatabase(changedDatabase);
         
metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
                 .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getAllDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
         
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getAllSchemas()
@@ -246,9 +246,9 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     public void alterStorageUnits(final String databaseName, final Map<String, 
DataSourcePoolProperties> toBeUpdatedProps) throws SQLException {
         SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager().switchByAlterStorageUnit(metaDataContextManager.getMetaDataContexts().get().getMetaData()
                 .getDatabase(databaseName).getResourceMetaData(), 
toBeUpdatedProps);
-        Map<String, ShardingSphereDatabase> changedDatabases = 
MetaDataContextsFactory.createChangedDatabases(databaseName, true, 
switchingResource, null,
+        ShardingSphereDatabase changedDatabase = 
MetaDataContextsFactory.createChangedDatabase(databaseName, true, 
switchingResource, null,
                 metaDataContextManager.getMetaDataContexts().get(), 
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
-        
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabases().putAll(changedDatabases);
+        
metaDataContextManager.getMetaDataContexts().get().getMetaData().putDatabase(changedDatabase);
         
metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
                 .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getAllDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
         DataSourceUnitPersistService dataSourceService = 
metaDataPersistService.getDataSourceUnitService();

Reply via email to