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

zhaojinchao 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 1aa23530341 Extract StorageUnitManager from ConfigurationManager to 
manager storage units (#32069)
1aa23530341 is described below

commit 1aa23530341c5fd3f0ba248245c45597925e6106
Author: Haoran Meng <[email protected]>
AuthorDate: Fri Jul 12 11:06:34 2024 +0800

    Extract StorageUnitManager from ConfigurationManager to manager storage 
units (#32069)
    
    * Extract StorageUnitManager from ConfigurationManager to manager storage 
units
    
    * fix checkstyle
---
 .../mode/metadata/MetaDataContextManager.java      |   6 +-
 .../metadata/manager/ConfigurationManager.java     |  84 +------
 ...urationManager.java => StorageUnitManager.java} | 253 ++++-----------------
 .../dispatch/StorageUnitEventSubscriber.java       |   6 +-
 4 files changed, 48 insertions(+), 301 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 e12adc276e7..9744129b548 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
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.mode.metadata.manager.SchemaMetaDataManager;
 import org.apache.shardingsphere.mode.metadata.manager.ResourceSwitchManager;
 import org.apache.shardingsphere.mode.metadata.manager.RuleItemManager;
 import 
org.apache.shardingsphere.mode.metadata.manager.ShardingSphereDatabaseDataManager;
+import org.apache.shardingsphere.mode.metadata.manager.StorageUnitManager;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
 import java.util.concurrent.atomic.AtomicReference;
@@ -51,12 +52,15 @@ public class MetaDataContextManager {
     
     private final MetaDataPersistService metaDataPersistService;
     
+    private final StorageUnitManager storageUnitManager;
+    
     public MetaDataContextManager(final AtomicReference<MetaDataContexts> 
metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
                                   final PersistRepository repository) {
         this.metaDataContexts = metaDataContexts;
         resourceSwitchManager = new ResourceSwitchManager();
         databaseManager = new 
ShardingSphereDatabaseDataManager(metaDataContexts);
-        configurationManager = new ConfigurationManager(metaDataContexts, 
computeNodeInstanceContext, repository, resourceSwitchManager);
+        storageUnitManager = new StorageUnitManager(metaDataContexts, 
computeNodeInstanceContext, repository, resourceSwitchManager);
+        configurationManager = new ConfigurationManager(metaDataContexts, 
computeNodeInstanceContext, repository);
         schemaMetaDataManager = new SchemaMetaDataManager(metaDataContexts, 
repository);
         ruleItemManager = new RuleItemManager(metaDataContexts, repository, 
configurationManager);
         metaDataPersistService = new MetaDataPersistService(repository);
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
index 7b42ca00e77..527a11b52a0 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
@@ -52,7 +52,6 @@ import 
org.apache.shardingsphere.transaction.rule.TransactionRule;
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
@@ -73,87 +72,15 @@ public final class ConfigurationManager {
     
     private final ComputeNodeInstanceContext computeNodeInstanceContext;
     
-    private final ResourceSwitchManager resourceSwitchManager;
-    
     private final MetaDataPersistService metaDataPersistService;
     
     public ConfigurationManager(final AtomicReference<MetaDataContexts> 
metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
-                                final PersistRepository repository, final 
ResourceSwitchManager resourceSwitchManager) {
+                                final PersistRepository repository) {
         this.metaDataContexts = metaDataContexts;
         this.computeNodeInstanceContext = computeNodeInstanceContext;
-        this.resourceSwitchManager = resourceSwitchManager;
         metaDataPersistService = new MetaDataPersistService(repository);
     }
     
-    /**
-     * Register storage unit.
-     *
-     * @param databaseName database name
-     * @param propsMap data source pool properties map
-     */
-    public synchronized void registerStorageUnit(final String databaseName, 
final Map<String, DataSourcePoolProperties> propsMap) {
-        try {
-            closeStaleRules(databaseName);
-            SwitchingResource switchingResource = 
resourceSwitchManager.registerStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 propsMap);
-            buildNewMetaDataContext(databaseName, switchingResource);
-        } catch (final SQLException ex) {
-            log.error("Alter database: {} register storage unit failed", 
databaseName, ex);
-        }
-    }
-    
-    /**
-     * Alter storage unit.
-     *
-     * @param databaseName database name
-     * @param propsMap data source pool properties map
-     */
-    public synchronized void alterStorageUnit(final String databaseName, final 
Map<String, DataSourcePoolProperties> propsMap) {
-        try {
-            closeStaleRules(databaseName);
-            SwitchingResource switchingResource = 
resourceSwitchManager.alterStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 propsMap);
-            buildNewMetaDataContext(databaseName, switchingResource);
-        } catch (final SQLException ex) {
-            log.error("Alter database: {} register storage unit failed", 
databaseName, ex);
-        }
-    }
-    
-    /**
-     * UnRegister storage unit.
-     *
-     * @param databaseName database name
-     * @param storageUnitName storage unit name
-     */
-    public synchronized void unregisterStorageUnit(final String databaseName, 
final String storageUnitName) {
-        try {
-            closeStaleRules(databaseName);
-            SwitchingResource switchingResource = 
resourceSwitchManager.unregisterStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(),
-                    Collections.singletonList(storageUnitName));
-            buildNewMetaDataContext(databaseName, switchingResource);
-        } catch (final SQLException ex) {
-            log.error("Alter database: {} register storage unit failed", 
databaseName, ex);
-        }
-    }
-    
-    private void buildNewMetaDataContext(final String databaseName, final 
SwitchingResource switchingResource) throws SQLException {
-        MetaDataContexts reloadMetaDataContexts = 
createMetaDataContexts(databaseName, false, switchingResource, null);
-        metaDataContexts.set(reloadMetaDataContexts);
-        
metaDataContexts.get().getMetaData().getDatabases().putAll(buildShardingSphereDatabase(reloadMetaDataContexts.getMetaData().getDatabase(databaseName)));
-        switchingResource.closeStaleDataSources();
-    }
-    
-    private Map<String, ShardingSphereDatabase> 
buildShardingSphereDatabase(final ShardingSphereDatabase originalDatabase) {
-        return 
Collections.singletonMap(originalDatabase.getName().toLowerCase(), new 
ShardingSphereDatabase(originalDatabase.getName(),
-                originalDatabase.getProtocolType(), 
originalDatabase.getResourceMetaData(), originalDatabase.getRuleMetaData(), 
buildSchemas(originalDatabase)));
-    }
-    
-    private Map<String, ShardingSphereSchema> buildSchemas(final 
ShardingSphereDatabase originalDatabase) {
-        Map<String, ShardingSphereSchema> result = new 
LinkedHashMap<>(originalDatabase.getSchemas().size(), 1F);
-        originalDatabase.getSchemas().keySet().forEach(schemaName -> 
result.put(schemaName.toLowerCase(),
-                new 
ShardingSphereSchema(originalDatabase.getSchema(schemaName).getTables(),
-                        
metaDataPersistService.getDatabaseMetaDataService().getViewMetaDataPersistService().load(originalDatabase.getName(),
 schemaName))));
-        return result;
-    }
-    
     /**
      * Alter rule configuration.
      *
@@ -272,15 +199,6 @@ public final class ConfigurationManager {
         return result;
     }
     
-    @SneakyThrows(Exception.class)
-    private void closeStaleRules(final String databaseName) {
-        for (ShardingSphereRule each : 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules())
 {
-            if (each instanceof AutoCloseable) {
-                ((AutoCloseable) each).close();
-            }
-        }
-    }
-    
     /**
      * Create meta data contexts.
      *
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
similarity index 52%
copy from 
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
copy to 
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
index 7b42ca00e77..b4e1bee37f0 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ConfigurationManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
@@ -23,7 +23,6 @@ import 
org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
 import 
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
@@ -32,42 +31,31 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaDa
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import org.apache.shardingsphere.infra.rule.PartialRuleUpdateSupported;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import 
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
-import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
-import org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleEntity;
-import org.apache.shardingsphere.transaction.rule.TransactionRule;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedHashMap;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Properties;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 /**
- * Configuration context manager.
+ * Storage unit manager.
  */
 @Slf4j
-public final class ConfigurationManager {
+public final class StorageUnitManager {
     
     private final AtomicReference<MetaDataContexts> metaDataContexts;
     
@@ -77,8 +65,8 @@ public final class ConfigurationManager {
     
     private final MetaDataPersistService metaDataPersistService;
     
-    public ConfigurationManager(final AtomicReference<MetaDataContexts> 
metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
-                                final PersistRepository repository, final 
ResourceSwitchManager resourceSwitchManager) {
+    public StorageUnitManager(final AtomicReference<MetaDataContexts> 
metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
+                              final PersistRepository repository, final 
ResourceSwitchManager resourceSwitchManager) {
         this.metaDataContexts = metaDataContexts;
         this.computeNodeInstanceContext = computeNodeInstanceContext;
         this.resourceSwitchManager = resourceSwitchManager;
@@ -141,112 +129,30 @@ public final class ConfigurationManager {
         switchingResource.closeStaleDataSources();
     }
     
-    private Map<String, ShardingSphereDatabase> 
buildShardingSphereDatabase(final ShardingSphereDatabase originalDatabase) {
-        return 
Collections.singletonMap(originalDatabase.getName().toLowerCase(), new 
ShardingSphereDatabase(originalDatabase.getName(),
-                originalDatabase.getProtocolType(), 
originalDatabase.getResourceMetaData(), originalDatabase.getRuleMetaData(), 
buildSchemas(originalDatabase)));
+    private MetaDataContexts createMetaDataContexts(final String databaseName, 
final boolean internalLoadMetaData,
+                                                    final SwitchingResource 
switchingResource, final Collection<RuleConfiguration> ruleConfigs) throws 
SQLException {
+        Map<String, ShardingSphereDatabase> changedDatabases = 
createChangedDatabases(databaseName, internalLoadMetaData, switchingResource, 
ruleConfigs);
+        ConfigurationProperties props = 
metaDataContexts.get().getMetaData().getProps();
+        RuleMetaData changedGlobalMetaData = new RuleMetaData(
+                
GlobalRulesBuilder.buildRules(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getConfigurations(),
 changedDatabases, props));
+        return newMetaDataContexts(new 
ShardingSphereMetaData(changedDatabases, 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
     }
     
-    private Map<String, ShardingSphereSchema> buildSchemas(final 
ShardingSphereDatabase originalDatabase) {
-        Map<String, ShardingSphereSchema> result = new 
LinkedHashMap<>(originalDatabase.getSchemas().size(), 1F);
-        originalDatabase.getSchemas().keySet().forEach(schemaName -> 
result.put(schemaName.toLowerCase(),
-                new 
ShardingSphereSchema(originalDatabase.getSchema(schemaName).getTables(),
-                        
metaDataPersistService.getDatabaseMetaDataService().getViewMetaDataPersistService().load(originalDatabase.getName(),
 schemaName))));
+    private synchronized Map<String, ShardingSphereDatabase> 
createChangedDatabases(final String databaseName, final boolean 
internalLoadMetaData,
+                                                                               
     final SwitchingResource switchingResource, final 
Collection<RuleConfiguration> ruleConfigs) throws SQLException {
+        ResourceMetaData effectiveResourceMetaData = 
getEffectiveResourceMetaData(metaDataContexts.get().getMetaData().getDatabase(databaseName),
 switchingResource);
+        Collection<RuleConfiguration> toBeCreatedRuleConfigs = null == 
ruleConfigs
+                ? 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getRuleMetaData().getConfigurations()
+                : ruleConfigs;
+        DatabaseConfiguration toBeCreatedDatabaseConfig = 
getDatabaseConfiguration(effectiveResourceMetaData, switchingResource, 
toBeCreatedRuleConfigs);
+        ShardingSphereDatabase changedDatabase = 
createChangedDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName).getName(),
 internalLoadMetaData,
+                metaDataPersistService, toBeCreatedDatabaseConfig, 
metaDataContexts.get().getMetaData().getProps(), computeNodeInstanceContext);
+        Map<String, ShardingSphereDatabase> result = new 
LinkedHashMap<>(metaDataContexts.get().getMetaData().getDatabases());
+        result.put(databaseName.toLowerCase(), changedDatabase);
         return result;
     }
     
-    /**
-     * Alter rule configuration.
-     *
-     * @param databaseName database name
-     * @param ruleConfig rule configurations
-     */
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    public synchronized void alterRuleConfiguration(final String databaseName, 
final RuleConfiguration ruleConfig) {
-        ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
-        Collection<ShardingSphereRule> rules = new 
LinkedList<>(database.getRuleMetaData().getRules());
-        Optional<ShardingSphereRule> toBeChangedRule = 
rules.stream().filter(each -> 
each.getConfiguration().getClass().equals(ruleConfig.getClass())).findFirst();
-        if (toBeChangedRule.isPresent() && toBeChangedRule.get() instanceof 
PartialRuleUpdateSupported && ((PartialRuleUpdateSupported) 
toBeChangedRule.get()).partialUpdate(ruleConfig)) {
-            ((PartialRuleUpdateSupported) 
toBeChangedRule.get()).updateConfiguration(ruleConfig);
-            return;
-        }
-        try {
-            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);
-        } catch (final SQLException ex) {
-            log.error("Alter database: {} rule configurations failed", 
databaseName, ex);
-        }
-    }
-    
-    /**
-     * Drop rule configuration.
-     *
-     * @param databaseName database name
-     * @param ruleConfig rule configurations
-     */
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    public synchronized void dropRuleConfiguration(final String databaseName, 
final RuleConfiguration ruleConfig) {
-        ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
-        Collection<ShardingSphereRule> rules = new 
LinkedList<>(database.getRuleMetaData().getRules());
-        Optional<ShardingSphereRule> toBeChangedRule = 
rules.stream().filter(each -> 
each.getConfiguration().getClass().equals(ruleConfig.getClass())).findFirst();
-        if (toBeChangedRule.isPresent() && toBeChangedRule.get() instanceof 
PartialRuleUpdateSupported && ((PartialRuleUpdateSupported) 
toBeChangedRule.get()).partialUpdate(ruleConfig)) {
-            ((PartialRuleUpdateSupported) 
toBeChangedRule.get()).updateConfiguration(ruleConfig);
-            return;
-        }
-        try {
-            rules.removeIf(each -> 
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
-            if (!((DatabaseRuleConfiguration) ruleConfig).isEmpty()) {
-                rules.addAll(DatabaseRulesBuilder.build(databaseName, 
database.getProtocolType(), database.getRuleMetaData().getRules(),
-                        ruleConfig, computeNodeInstanceContext, 
database.getResourceMetaData()));
-            }
-            refreshMetadata(databaseName, database, rules);
-        } catch (final SQLException ex) {
-            log.error("Drop database: {} rule configurations failed", 
databaseName, ex);
-        }
-    }
-    
-    private void refreshMetadata(final String databaseName, final 
ShardingSphereDatabase database, final Collection<ShardingSphereRule> rules) 
throws SQLException {
-        database.getRuleMetaData().getRules().clear();
-        database.getRuleMetaData().getRules().addAll(rules);
-        MetaDataContexts reloadMetaDataContexts = 
createMetaDataContextsByAlterRule(databaseName, 
database.getRuleMetaData().getConfigurations());
-        metaDataContexts.set(reloadMetaDataContexts);
-        
metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchemas().putAll(buildShardingSphereSchemas(metaDataContexts.get().getMetaData().getDatabase(databaseName)));
-    }
-    
-    private MetaDataContexts createMetaDataContextsByAlterRule(final String 
databaseName, final Collection<RuleConfiguration> ruleConfigs) throws 
SQLException {
-        Map<String, ShardingSphereDatabase> changedDatabases = 
createChangedDatabases(databaseName, false, null, ruleConfigs);
-        return newMetaDataContexts(new 
ShardingSphereMetaData(changedDatabases, 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(),
-                metaDataContexts.get().getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.get().getMetaData().getProps()));
-    }
-    
-    /**
-     * Alter schema meta data.
-     *
-     * @param databaseName database name
-     * @param reloadDatabase reload database
-     * @param currentDatabase current database
-     * @param isDropConfig is drop configuration
-     */
-    public void alterSchemaMetaData(final String databaseName, final 
ShardingSphereDatabase reloadDatabase, final ShardingSphereDatabase 
currentDatabase, final boolean isDropConfig) {
-        Map<String, ShardingSphereSchema> toBeAlterSchemas = 
GenericSchemaManager.getToBeDeletedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
-        Map<String, ShardingSphereSchema> toBeAddedSchemas = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
-        if (isDropConfig) {
-            toBeAddedSchemas.forEach((key, value) -> 
metaDataPersistService.getDatabaseMetaDataService().persistByDropConfiguration(databaseName,
 key, value));
-        } else {
-            toBeAddedSchemas.forEach((key, value) -> 
metaDataPersistService.getDatabaseMetaDataService().persistByAlterConfiguration(databaseName,
 key, value));
-        }
-        toBeAlterSchemas.forEach((key, value) -> 
metaDataPersistService.getDatabaseMetaDataService().delete(databaseName, key, 
value));
-    }
-    
-    /**
-     * Get effective resource meta data.
-     *
-     * @param database database
-     * @param resource resource
-     * @return effective resource meta data
-     */
-    public ResourceMetaData getEffectiveResourceMetaData(final 
ShardingSphereDatabase database, final SwitchingResource resource) {
+    private ResourceMetaData getEffectiveResourceMetaData(final 
ShardingSphereDatabase database, final SwitchingResource resource) {
         Map<StorageNode, DataSource> storageNodes = 
getStorageNodes(database.getResourceMetaData().getDataSources(), resource);
         Map<String, StorageUnit> storageUnits = 
getStorageUnits(database.getResourceMetaData().getStorageUnits(), resource);
         return new ResourceMetaData(storageNodes, storageUnits);
@@ -272,63 +178,10 @@ public final class ConfigurationManager {
         return result;
     }
     
-    @SneakyThrows(Exception.class)
-    private void closeStaleRules(final String databaseName) {
-        for (ShardingSphereRule each : 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules())
 {
-            if (each instanceof AutoCloseable) {
-                ((AutoCloseable) each).close();
-            }
-        }
-    }
-    
-    /**
-     * Create meta data contexts.
-     *
-     * @param databaseName database name
-     * @param internalLoadMetaData internal load meta data
-     * @param switchingResource switching resource
-     * @param ruleConfigs rule configs
-     * @return MetaDataContexts meta data contexts
-     * @throws SQLException SQL exception
-     */
-    public MetaDataContexts createMetaDataContexts(final String databaseName, 
final boolean internalLoadMetaData,
-                                                   final SwitchingResource 
switchingResource, final Collection<RuleConfiguration> ruleConfigs) throws 
SQLException {
-        Map<String, ShardingSphereDatabase> changedDatabases = 
createChangedDatabases(databaseName, internalLoadMetaData, switchingResource, 
ruleConfigs);
-        ConfigurationProperties props = 
metaDataContexts.get().getMetaData().getProps();
-        RuleMetaData changedGlobalMetaData = new RuleMetaData(
-                
GlobalRulesBuilder.buildRules(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getConfigurations(),
 changedDatabases, props));
-        return newMetaDataContexts(new 
ShardingSphereMetaData(changedDatabases, 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
-    }
-    
-    /**
-     * Create changed databases.
-     *
-     * @param databaseName database name
-     * @param internalLoadMetaData internal load meta data
-     * @param switchingResource switching resource
-     * @param ruleConfigs rule configs
-     * @return ShardingSphere databases
-     * @throws SQLException SQL exception
-     */
-    public synchronized Map<String, ShardingSphereDatabase> 
createChangedDatabases(final String databaseName, final boolean 
internalLoadMetaData,
-                                                                               
    final SwitchingResource switchingResource, final 
Collection<RuleConfiguration> ruleConfigs) throws SQLException {
-        ResourceMetaData effectiveResourceMetaData = 
getEffectiveResourceMetaData(metaDataContexts.get().getMetaData().getDatabase(databaseName),
 switchingResource);
-        Collection<RuleConfiguration> toBeCreatedRuleConfigs = null == 
ruleConfigs
-                ? 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getRuleMetaData().getConfigurations()
-                : ruleConfigs;
-        DatabaseConfiguration toBeCreatedDatabaseConfig = 
getDatabaseConfiguration(effectiveResourceMetaData, switchingResource, 
toBeCreatedRuleConfigs);
-        ShardingSphereDatabase changedDatabase = 
createChangedDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName).getName(),
 internalLoadMetaData,
-                metaDataPersistService, toBeCreatedDatabaseConfig, 
metaDataContexts.get().getMetaData().getProps(), computeNodeInstanceContext);
-        Map<String, ShardingSphereDatabase> result = new 
LinkedHashMap<>(metaDataContexts.get().getMetaData().getDatabases());
-        result.put(databaseName.toLowerCase(), changedDatabase);
-        return result;
-    }
-    
     private DatabaseConfiguration getDatabaseConfiguration(final 
ResourceMetaData resourceMetaData, final SwitchingResource switchingResource,
                                                            final 
Collection<RuleConfiguration> toBeCreatedRuleConfigs) {
-        Map<String, DataSourcePoolProperties> propsMap = null == 
switchingResource
-                ? resourceMetaData.getStorageUnits().entrySet().stream()
-                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new))
+        Map<String, DataSourcePoolProperties> propsMap = null == 
switchingResource ? resourceMetaData.getStorageUnits().entrySet().stream()
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new))
                 : switchingResource.getMergedDataSourcePoolPropertiesMap();
         return new 
DataSourceProvidedDatabaseConfiguration(getMergedStorageNodeDataSources(resourceMetaData,
 switchingResource), toBeCreatedRuleConfigs, propsMap);
     }
@@ -349,56 +202,28 @@ public final class ConfigurationManager {
                 : ExternalMetaDataFactory.create(databaseName, databaseConfig, 
props, computeNodeInstanceContext);
     }
     
-    private Map<String, ShardingSphereSchema> buildShardingSphereSchemas(final 
ShardingSphereDatabase database) {
-        Map<String, ShardingSphereSchema> result = new 
LinkedHashMap<>(database.getSchemas().size(), 1F);
-        database.getSchemas().forEach((key, value) -> result.put(key, new 
ShardingSphereSchema(value.getTables(), value.getViews())));
-        return result;
+    private Map<String, ShardingSphereDatabase> 
buildShardingSphereDatabase(final ShardingSphereDatabase originalDatabase) {
+        return 
Collections.singletonMap(originalDatabase.getName().toLowerCase(), new 
ShardingSphereDatabase(originalDatabase.getName(),
+                originalDatabase.getProtocolType(), 
originalDatabase.getResourceMetaData(), originalDatabase.getRuleMetaData(), 
buildSchemas(originalDatabase)));
     }
     
-    /**
-     * Alter global rule configuration.
-     *
-     * @param ruleConfig global rule configuration
-     */
-    public synchronized void alterGlobalRuleConfiguration(final 
RuleConfiguration ruleConfig) {
-        if (null == ruleConfig) {
-            return;
-        }
-        closeStaleTransactionRule(ruleConfig);
-        Collection<ShardingSphereRule> rules = new 
LinkedList<>(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules());
-        rules.removeIf(each -> 
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
-        rules.addAll(GlobalRulesBuilder.buildSingleRules(ruleConfig, 
metaDataContexts.get().getMetaData().getDatabases(), 
metaDataContexts.get().getMetaData().getProps()));
-        
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().clear();
-        
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
-        ShardingSphereMetaData toBeChangedMetaData = new 
ShardingSphereMetaData(metaDataContexts.get().getMetaData().getDatabases(), 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(),
-                metaDataContexts.get().getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.get().getMetaData().getProps());
-        metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
+    private Map<String, ShardingSphereSchema> buildSchemas(final 
ShardingSphereDatabase originalDatabase) {
+        Map<String, ShardingSphereSchema> result = new 
LinkedHashMap<>(originalDatabase.getSchemas().size(), 1F);
+        originalDatabase.getSchemas().keySet().forEach(schemaName -> 
result.put(schemaName.toLowerCase(),
+                new 
ShardingSphereSchema(originalDatabase.getSchema(schemaName).getTables(),
+                        
metaDataPersistService.getDatabaseMetaDataService().getViewMetaDataPersistService().load(originalDatabase.getName(),
 schemaName))));
+        return result;
     }
     
-    // Optimize string comparison rule type.
     @SneakyThrows(Exception.class)
-    private void closeStaleTransactionRule(final RuleConfiguration ruleConfig) 
{
-        YamlRuleConfiguration yamlRuleConfig = new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(ruleConfig);
-        if 
(!"transaction".equals(Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RepositoryTupleEntity.class)).value()))
 {
-            return;
-        }
-        Optional<TransactionRule> transactionRule = 
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().findSingleRule(TransactionRule.class);
-        if (transactionRule.isPresent()) {
-            ((AutoCloseable) transactionRule.get()).close();
+    private void closeStaleRules(final String databaseName) {
+        for (ShardingSphereRule each : 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules())
 {
+            if (each instanceof AutoCloseable) {
+                ((AutoCloseable) each).close();
+            }
         }
     }
     
-    /**
-     * Alter properties.
-     *
-     * @param props properties to be altered
-     */
-    public synchronized void alterProperties(final Properties props) {
-        ShardingSphereMetaData toBeChangedMetaData = new 
ShardingSphereMetaData(metaDataContexts.get().getMetaData().getDatabases(), 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(),
-                metaDataContexts.get().getMetaData().getGlobalRuleMetaData(), 
new ConfigurationProperties(props));
-        metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
-    }
-    
     private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData 
metaData) {
         return MetaDataContextsFactory.create(metaDataPersistService, 
metaData);
     }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/StorageUnitEventSubscriber.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/StorageUnitEventSubscriber.java
index 0e79ac89046..ba45a28bfee 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/StorageUnitEventSubscriber.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/StorageUnitEventSubscriber.java
@@ -44,7 +44,7 @@ public final class StorageUnitEventSubscriber implements 
EventSubscriber {
                 .getActiveVersionByFullPath(event.getActiveVersionKey()))) {
             return;
         }
-        
contextManager.getMetaDataContextManager().getConfigurationManager().registerStorageUnit(event.getDatabaseName(),
+        
contextManager.getMetaDataContextManager().getStorageUnitManager().registerStorageUnit(event.getDatabaseName(),
                 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load(event.getDatabaseName(),
 event.getStorageUnitName()));
     }
     
@@ -59,7 +59,7 @@ public final class StorageUnitEventSubscriber implements 
EventSubscriber {
                 .getActiveVersionByFullPath(event.getActiveVersionKey()))) {
             return;
         }
-        
contextManager.getMetaDataContextManager().getConfigurationManager().alterStorageUnit(
+        
contextManager.getMetaDataContextManager().getStorageUnitManager().alterStorageUnit(
                 event.getDatabaseName(), 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load(event.getDatabaseName(),
 event.getStorageUnitName()));
     }
     
@@ -73,6 +73,6 @@ public final class StorageUnitEventSubscriber implements 
EventSubscriber {
         if 
(!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName()))
 {
             return;
         }
-        
contextManager.getMetaDataContextManager().getConfigurationManager().unregisterStorageUnit(event.getDatabaseName(),
 event.getStorageUnitName());
+        
contextManager.getMetaDataContextManager().getStorageUnitManager().unregisterStorageUnit(event.getDatabaseName(),
 event.getStorageUnitName());
     }
 }


Reply via email to