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 40929eb7f3b Refactor build MetaDataContext to avoid modifying data 
sources when new metadata context not finish built (#31434)
40929eb7f3b is described below

commit 40929eb7f3bdfc8e9db89972cab861670c7ad078
Author: zhaojinchao <[email protected]>
AuthorDate: Wed May 29 13:43:48 2024 +0800

    Refactor build MetaDataContext to avoid modifying data sources when new 
metadata context not finish built (#31434)
---
 .../mode/manager/ContextManager.java               |  1 -
 .../mode/service/manager/ConfigurationManager.java | 22 ++++++++++------------
 .../StandaloneMetaDataManagerPersistService.java   |  2 --
 3 files changed, 10 insertions(+), 15 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 76ee61a2391..a6af4feacf1 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -173,7 +173,6 @@ public final class ContextManager implements AutoCloseable {
         ConfigurationManager configurationManager = 
metaDataContextManager.getConfigurationManager();
         Map<String, DataSourcePoolProperties> dataSourcePoolPropsFromRegCenter 
= metaDataPersistService.getDataSourceUnitService().load(database.getName());
         SwitchingResource switchingResource = new 
ResourceSwitchManager().alterStorageUnit(database.getResourceMetaData(), 
dataSourcePoolPropsFromRegCenter);
-        
metaDataContexts.get().getMetaData().getDatabases().putAll(configurationManager.renewDatabase(database,
 switchingResource));
         Collection<RuleConfiguration> ruleConfigs = 
metaDataPersistService.getDatabaseRulePersistService().load(database.getName());
         Map<String, ShardingSphereDatabase> changedDatabases = 
configurationManager.createChangedDatabases(database.getName(), false, 
switchingResource, ruleConfigs);
         ConfigurationProperties props = new 
ConfigurationProperties(metaDataPersistService.getPropsService().load());
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
index 5fb6face955..d90a65a6c69 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
@@ -131,7 +131,6 @@ public final class ConfigurationManager {
     }
     
     private void buildNewMetaDataContext(final String databaseName, final 
SwitchingResource switchingResource, final boolean isDropConfig) throws 
SQLException {
-        
metaDataContexts.get().getMetaData().getDatabases().putAll(renewDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName),
 switchingResource));
         MetaDataContexts reloadMetaDataContexts = 
createMetaDataContexts(databaseName, false, switchingResource, null);
         persistSchemaMetaData(databaseName, reloadMetaDataContexts, 
isDropConfig);
         
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
@@ -244,23 +243,22 @@ public final class ConfigurationManager {
     }
     
     /**
-     * Renew ShardingSphere databases.
+     * Get effective resource meta data.
      *
      * @param database database
      * @param resource resource
-     * @return ShardingSphere databases
+     * @return effective resource meta data
      */
-    public Map<String, ShardingSphereDatabase> renewDatabase(final 
ShardingSphereDatabase database, final SwitchingResource resource) {
+    public 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 Collections.singletonMap(database.getName().toLowerCase(), new 
ShardingSphereDatabase(database.getName(), database.getProtocolType(),
-                new ResourceMetaData(storageNodes, storageUnits), 
database.getRuleMetaData(), database.getSchemas()));
+        return new ResourceMetaData(storageNodes, storageUnits);
     }
     
     private Map<StorageNode, DataSource> getStorageNodes(final 
Map<StorageNode, DataSource> currentStorageNodes, final SwitchingResource 
resource) {
         Map<StorageNode, DataSource> result = new 
LinkedHashMap<>(currentStorageNodes.size(), 1F);
         for (Entry<StorageNode, DataSource> entry : 
currentStorageNodes.entrySet()) {
-            if (!resource.getStaleDataSources().containsKey(entry.getKey())) {
+            if (null == resource || 
!resource.getStaleDataSources().containsKey(entry.getKey())) {
                 result.put(entry.getKey(), entry.getValue());
             }
         }
@@ -270,7 +268,7 @@ public final class ConfigurationManager {
     private Map<String, StorageUnit> getStorageUnits(final Map<String, 
StorageUnit> currentStorageUnits, final SwitchingResource resource) {
         Map<String, StorageUnit> result = new 
LinkedHashMap<>(currentStorageUnits.size(), 1F);
         for (Entry<String, StorageUnit> entry : 
currentStorageUnits.entrySet()) {
-            if (!resource.getStaleStorageUnitNames().contains(entry.getKey())) 
{
+            if (null == resource || 
!resource.getStaleStorageUnitNames().contains(entry.getKey())) {
                 result.put(entry.getKey(), entry.getValue());
             }
         }
@@ -296,8 +294,8 @@ public final class ConfigurationManager {
      * @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 {
+    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(
@@ -317,11 +315,11 @@ public final class ConfigurationManager {
      */
     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(
-                
metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 switchingResource, toBeCreatedRuleConfigs);
+        DatabaseConfiguration toBeCreatedDatabaseConfig = 
getDatabaseConfiguration(effectiveResourceMetaData, switchingResource, 
toBeCreatedRuleConfigs);
         ShardingSphereDatabase changedDatabase = 
createChangedDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName).getName(),
 internalLoadMetaData,
                 persistServiceFacade.getMetaDataPersistService(), 
toBeCreatedDatabaseConfig, metaDataContexts.get().getMetaData().getProps(), 
computeNodeInstanceContext);
         Map<String, ShardingSphereDatabase> result = new 
LinkedHashMap<>(metaDataContexts.get().getMetaData().getDatabases());
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
index b526e0a0a0c..f5600759226 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
@@ -250,8 +250,6 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         SwitchingResource switchingResource =
                 new 
ResourceSwitchManager().unregisterStorageUnit(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 toBeDroppedStorageUnitNames);
         ConfigurationManager configurationManager = 
contextManager.getMetaDataContextManager().getConfigurationManager();
-        contextManager.getMetaDataContexts().getMetaData().getDatabases()
-                
.putAll(configurationManager.renewDatabase(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName),
 switchingResource));
         MetaDataContexts reloadMetaDataContexts = 
configurationManager.createMetaDataContexts(databaseName, false, 
switchingResource, null);
         configurationManager.alterSchemaMetaData(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
                 
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName), 
true);

Reply via email to