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 4fe7896486e Remove metaDataContexts field for 
StandaloneModeContextManager (#23140)
4fe7896486e is described below

commit 4fe7896486e5f9c5bfce2490918846871f048954
Author: zhaojinchao <[email protected]>
AuthorDate: Wed Dec 28 19:30:21 2022 +0800

    Remove metaDataContexts field for StandaloneModeContextManager (#23140)
    
    * Remove metaDataContexts field for StandaloneModeContextManager
    
    * Add synchronized
---
 .../mode/manager/ContextManager.java               |  2 +-
 .../standalone/StandaloneModeContextManager.java   | 64 ++++++++++++----------
 2 files changed, 37 insertions(+), 29 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 da64e7460b8..713de311d48 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
@@ -514,7 +514,7 @@ public final class ContextManager implements AutoCloseable {
      * @param schemaName schema name
      * @param tableName to be reloaded table name
      */
-    public void reloadTable(final String databaseName, final String 
schemaName, final String tableName) {
+    public synchronized void reloadTable(final String databaseName, final 
String schemaName, final String tableName) {
         Map<String, DataSource> dataSourceMap = 
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources();
         try {
             reloadTable(databaseName, schemaName, tableName, dataSourceMap);
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
index 1ca4af433ed..ac6f0513606 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
@@ -54,8 +54,6 @@ public final class StandaloneModeContextManager implements 
ModeContextManager, C
     
     private ContextManager contextManager;
     
-    private volatile MetaDataContexts metaDataContexts;
-    
     @Override
     public void createDatabase(final String databaseName) {
         contextManager.addDatabase(databaseName);
@@ -197,39 +195,50 @@ public final class StandaloneModeContextManager 
implements ModeContextManager, C
     
     @Override
     public void registerStorageUnits(final String databaseName, final 
Map<String, DataSourceProperties> toBeRegisterStorageUnitProps) throws 
SQLException {
-        SwitchingResource switchingResource = new 
ResourceSwitchManager().create(metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(),
 toBeRegisterStorageUnitProps);
-        
metaDataContexts.getMetaData().getDatabases().putAll(contextManager.createChangedDatabases(databaseName,
 switchingResource, null));
-        
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(each
 -> each.addResource(metaDataContexts.getMetaData().getDatabase(databaseName)));
-        
metaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> metaDataContexts.getPersistService().getDatabaseMetaDataService()
-                
.persist(metaDataContexts.getMetaData().getActualDatabaseName(databaseName), 
schemaName, schema));
-        
metaDataContexts.getPersistService().getDataSourceService().append(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 toBeRegisterStorageUnitProps);
+        SwitchingResource switchingResource =
+                new 
ResourceSwitchManager().create(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 toBeRegisterStorageUnitProps);
+        
contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.createChangedDatabases(databaseName,
 switchingResource, null));
+        
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class)
+                .forEach(each -> 
each.addResource(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName)));
+        
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchemas()
+                .forEach((schemaName, schema) -> 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService()
+                        
.persist(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName),
 schemaName, schema));
+        
contextManager.getMetaDataContexts().getPersistService().getDataSourceService().append(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName),
+                toBeRegisterStorageUnitProps);
         clearServiceCache();
     }
     
     @Override
     public void alterStorageUnits(final String databaseName, final Map<String, 
DataSourceProperties> toBeUpdatedStorageUnitProps) throws SQLException {
-        SwitchingResource switchingResource = new 
ResourceSwitchManager().create(metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(),
 toBeUpdatedStorageUnitProps);
-        
metaDataContexts.getMetaData().getDatabases().putAll(contextManager.createChangedDatabases(databaseName,
 switchingResource, null));
-        
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(each
 -> each.addResource(metaDataContexts.getMetaData().getDatabase(databaseName)));
-        
metaDataContexts.getMetaData().getDatabases().putAll(contextManager.newShardingSphereDatabase(metaDataContexts.getMetaData().getDatabase(databaseName)));
-        
metaDataContexts.getPersistService().getDataSourceService().append(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 toBeUpdatedStorageUnitProps);
+        SwitchingResource switchingResource =
+                new 
ResourceSwitchManager().create(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 toBeUpdatedStorageUnitProps);
+        
contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.createChangedDatabases(databaseName,
 switchingResource, null));
+        
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class)
+                .forEach(each -> 
each.addResource(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName)));
+        contextManager.getMetaDataContexts().getMetaData().getDatabases()
+                
.putAll(contextManager.newShardingSphereDatabase(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName)));
+        
contextManager.getMetaDataContexts().getPersistService().getDataSourceService().append(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName),
+                toBeUpdatedStorageUnitProps);
         switchingResource.closeStaleDataSources();
         clearServiceCache();
     }
     
     @Override
     public void unregisterStorageUnits(final String databaseName, final 
Collection<String> toBeDroppedStorageUnitNames) throws SQLException {
-        Map<String, DataSourceProperties> dataSourcePropsMap = 
metaDataContexts.getPersistService().getDataSourceService().load(metaDataContexts.getMetaData().getActualDatabaseName(databaseName));
+        Map<String, DataSourceProperties> dataSourcePropsMap = 
contextManager.getMetaDataContexts().getPersistService().getDataSourceService()
+                
.load(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName));
         Map<String, DataSourceProperties> toBeDeletedDataSourcePropsMap = 
getToBeDeletedDataSourcePropsMap(dataSourcePropsMap, 
toBeDroppedStorageUnitNames);
         SwitchingResource switchingResource =
-                new 
ResourceSwitchManager().createByDropResource(metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(),
 toBeDeletedDataSourcePropsMap);
-        
metaDataContexts.getMetaData().getDatabases().putAll(contextManager.renewDatabase(metaDataContexts.getMetaData().getDatabase(databaseName),
 switchingResource));
+                new 
ResourceSwitchManager().createByDropResource(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 toBeDeletedDataSourcePropsMap);
+        contextManager.getMetaDataContexts().getMetaData().getDatabases()
+                
.putAll(contextManager.renewDatabase(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName),
 switchingResource));
         MetaDataContexts reloadMetaDataContexts = 
contextManager.createMetaDataContexts(databaseName, switchingResource, null);
-        contextManager.alterSchemaMetaData(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName), 
metaDataContexts.getMetaData().getDatabase(databaseName));
-        contextManager.deletedSchemaNames(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName), 
metaDataContexts.getMetaData().getDatabase(databaseName));
-        metaDataContexts = reloadMetaDataContexts;
+        contextManager.alterSchemaMetaData(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName), 
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName));
+        contextManager.deletedSchemaNames(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName), 
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName));
+        contextManager.renewMetaDataContexts(reloadMetaDataContexts);
         Map<String, DataSourceProperties> toBeReversedDataSourcePropsMap = 
getToBeReversedDataSourcePropsMap(dataSourcePropsMap, 
toBeDroppedStorageUnitNames);
-        
metaDataContexts.getPersistService().getDataSourceService().persist(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 toBeReversedDataSourcePropsMap);
+        
contextManager.getMetaDataContexts().getPersistService().getDataSourceService().persist(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName),
+                toBeReversedDataSourcePropsMap);
         switchingResource.closeStaleDataSources();
         clearServiceCache();
     }
@@ -244,27 +253,27 @@ public final class StandaloneModeContextManager 
implements ModeContextManager, C
     
     @Override
     public void alterRuleConfiguration(final String databaseName, final 
Collection<RuleConfiguration> ruleConfigs) {
-        // TODO Verify it
-        ShardingSphereDatabase currentDatabase = 
metaDataContexts.getMetaData().getDatabase(databaseName);
+        ShardingSphereDatabase currentDatabase = 
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName);
         contextManager.alterRuleConfiguration(databaseName, ruleConfigs);
-        ShardingSphereDatabase reloadDatabase = 
metaDataContexts.getMetaData().getDatabase(databaseName);
+        ShardingSphereDatabase reloadDatabase = 
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName);
         contextManager.alterSchemaMetaData(databaseName, reloadDatabase, 
currentDatabase);
-        
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 ruleConfigs);
+        
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService()
+                
.persist(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName),
 ruleConfigs);
         clearServiceCache();
     }
     
     @Override
     public void alterGlobalRuleConfiguration(final 
Collection<RuleConfiguration> globalRuleConfigs) {
         contextManager.alterGlobalRuleConfiguration(globalRuleConfigs);
-        
metaDataContexts.getPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations());
+        
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().persist(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations());
         clearServiceCache();
     }
     
     @Override
     public void alterProperties(final Properties props) {
         contextManager.alterProperties(props);
-        if (null != metaDataContexts.getPersistService().getPropsService()) {
-            
metaDataContexts.getPersistService().getPropsService().persist(props);
+        if (null != 
contextManager.getMetaDataContexts().getPersistService().getPropsService()) {
+            
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
         }
         clearServiceCache();
     }
@@ -276,6 +285,5 @@ public final class StandaloneModeContextManager implements 
ModeContextManager, C
     @Override
     public void setContextManagerAware(final ContextManager contextManager) {
         this.contextManager = contextManager;
-        this.metaDataContexts = contextManager.getMetaDataContexts();
     }
 }

Reply via email to