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

jianglongtao 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 58a77318f60 Add todo in ContextManager (#18806)
58a77318f60 is described below

commit 58a77318f60520133d2fb5e2f33bfb05f24c2411
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jul 3 15:41:46 2022 +0800

    Add todo in ContextManager (#18806)
    
    * Add todo
    
    * Change call order
---
 .../mode/manager/ContextManager.java               | 80 ++++++++++++----------
 1 file changed, 42 insertions(+), 38 deletions(-)

diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 9f9e427e34a..d3c7057cfd4 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -221,6 +221,30 @@ public final class ContextManager implements AutoCloseable 
{
         metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDataSourceService().append(databaseName, 
toBeAlteredDataSourcePropsMap));
     }
     
+    private void refreshMetaDataContext(final String databaseName, final 
Map<String, DataSourceProperties> dataSourcePropsMap) throws SQLException {
+        MetaDataContexts changedMetaDataContexts = 
buildChangedMetaDataContextWithAddedDataSource(databaseName, 
dataSourcePropsMap);
+        
metaDataContexts.getMetaData().getDatabases().putAll(changedMetaDataContexts.getMetaData().getDatabases());
+        
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().putAll(changedMetaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases());
+        
metaDataContexts.getOptimizerContext().getParserContexts().putAll(changedMetaDataContexts.getOptimizerContext().getParserContexts());
+        
metaDataContexts.getOptimizerContext().getPlannerContexts().putAll(changedMetaDataContexts.getOptimizerContext().getPlannerContexts());
+        
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(each
 -> 
each.addResource(metaDataContexts.getMetaData().getDatabases().get(databaseName)));
+    }
+    
+    private MetaDataContexts 
buildChangedMetaDataContextWithAddedDataSource(final String databaseName, final 
Map<String, DataSourceProperties> addedDataSourceProps) throws SQLException {
+        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabases().get(databaseName);
+        Map<String, DataSource> dataSourceMap = new 
HashMap<>(database.getResource().getDataSources());
+        
dataSourceMap.putAll(DataSourcePoolCreator.create(addedDataSourceProps));
+        ConfigurationProperties props = 
metaDataContexts.getMetaData().getProps();
+        DatabaseConfiguration databaseConfig = new 
DataSourceProvidedDatabaseConfiguration(dataSourceMap, 
database.getRuleMetaData().getConfigurations());
+        Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(Collections.singletonMap(database.getName(),
 databaseConfig), props, instanceContext);
+        ShardingSphereRuleMetaData globalMetaData = new 
ShardingSphereRuleMetaData(
+                
GlobalRulesBuilder.buildRules(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 databases, instanceContext));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, globalMetaData, props);
+        MetaDataContexts result = new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
+        persistMetaData(result);
+        return result;
+    }
+    
     /**
      * Drop resource.
      *
@@ -228,7 +252,11 @@ public final class ContextManager implements AutoCloseable 
{
      * @param toBeDroppedResourceNames to be dropped resource names
      */
     public void dropResource(final String databaseName, final 
Collection<String> toBeDroppedResourceNames) {
-        
toBeDroppedResourceNames.forEach(metaDataContexts.getMetaData().getDatabases().get(databaseName).getResource().getDataSources()::remove);
+        Map<String, DataSource> dataSourceMap = 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getResource().getDataSources();
+        // TODO should check to be dropped resources are unused here. 
ContextManager is atomic domain to maintain metadata, not Dist SQL handler
+        for (String each : toBeDroppedResourceNames) {
+            dataSourceMap.remove(each);
+        }
         metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDataSourceService().drop(databaseName, toBeDroppedResourceNames));
     }
     
@@ -249,6 +277,19 @@ public final class ContextManager implements AutoCloseable 
{
         }
     }
     
+    private MetaDataContexts buildChangedMetaDataContext(final 
ShardingSphereDatabase originalDatabase, final Collection<RuleConfiguration> 
ruleConfigs) throws SQLException {
+        ConfigurationProperties props = 
metaDataContexts.getMetaData().getProps();
+        Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(
+                Collections.singletonMap(originalDatabase.getName(), new 
DataSourceProvidedDatabaseConfiguration(originalDatabase.getResource().getDataSources(),
 ruleConfigs)),
+                props, instanceContext);
+        ShardingSphereRuleMetaData globalMetaData = new 
ShardingSphereRuleMetaData(
+                
GlobalRulesBuilder.buildRules(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 databases, instanceContext));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, globalMetaData, props);
+        MetaDataContexts result = new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
+        persistMetaData(result);
+        return result;
+    }
+    
     /**
      * Alter data source configuration.
      *
@@ -477,15 +518,6 @@ public final class ContextManager implements AutoCloseable 
{
         return new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), 
changedMetaData, metaDataContexts.getOptimizerContext());
     }
     
-    private void refreshMetaDataContext(final String databaseName, final 
Map<String, DataSourceProperties> dataSourcePropsMap) throws SQLException {
-        MetaDataContexts changedMetaDataContexts = 
buildChangedMetaDataContextWithAddedDataSource(databaseName, 
dataSourcePropsMap);
-        
metaDataContexts.getMetaData().getDatabases().putAll(changedMetaDataContexts.getMetaData().getDatabases());
-        
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().putAll(changedMetaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases());
-        
metaDataContexts.getOptimizerContext().getParserContexts().putAll(changedMetaDataContexts.getOptimizerContext().getParserContexts());
-        
metaDataContexts.getOptimizerContext().getPlannerContexts().putAll(changedMetaDataContexts.getOptimizerContext().getPlannerContexts());
-        
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(each
 -> 
each.addResource(metaDataContexts.getMetaData().getDatabases().get(databaseName)));
-    }
-    
     private void refreshMetaDataContext(final String databaseName, final 
MetaDataContexts changedMetaDataContexts, final Map<String, 
DataSourceProperties> dataSourcePropsMap) {
         
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().putAll(changedMetaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases());
         Map<String, ShardingSphereDatabase> databases = new 
HashMap<>(metaDataContexts.getMetaData().getDatabases());
@@ -499,34 +531,6 @@ public final class ContextManager implements AutoCloseable 
{
         
pendingClosedDataSources.forEach(metaDataContexts.getMetaData().getDatabases().get(databaseName).getResource()::close);
     }
     
-    private MetaDataContexts 
buildChangedMetaDataContextWithAddedDataSource(final String databaseName, final 
Map<String, DataSourceProperties> addedDataSourceProps) throws SQLException {
-        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabases().get(databaseName);
-        Map<String, DataSource> dataSourceMap = new 
HashMap<>(database.getResource().getDataSources());
-        
dataSourceMap.putAll(DataSourcePoolCreator.create(addedDataSourceProps));
-        ConfigurationProperties props = 
metaDataContexts.getMetaData().getProps();
-        DatabaseConfiguration databaseConfig = new 
DataSourceProvidedDatabaseConfiguration(dataSourceMap, 
database.getRuleMetaData().getConfigurations());
-        Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(Collections.singletonMap(database.getName(),
 databaseConfig), props, instanceContext);
-        ShardingSphereRuleMetaData globalMetaData = new 
ShardingSphereRuleMetaData(
-                
GlobalRulesBuilder.buildRules(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 databases, instanceContext));
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, globalMetaData, props);
-        MetaDataContexts result = new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
-        persistMetaData(result);
-        return result;
-    }
-    
-    private MetaDataContexts buildChangedMetaDataContext(final 
ShardingSphereDatabase originalDatabase, final Collection<RuleConfiguration> 
ruleConfigs) throws SQLException {
-        ConfigurationProperties props = 
metaDataContexts.getMetaData().getProps();
-        Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(
-                Collections.singletonMap(originalDatabase.getName(), new 
DataSourceProvidedDatabaseConfiguration(originalDatabase.getResource().getDataSources(),
 ruleConfigs)),
-                props, instanceContext);
-        ShardingSphereRuleMetaData globalMetaData = new 
ShardingSphereRuleMetaData(
-                
GlobalRulesBuilder.buildRules(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 databases, instanceContext));
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, globalMetaData, props);
-        MetaDataContexts result = new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
-        persistMetaData(result);
-        return result;
-    }
-    
     private MetaDataContexts 
buildChangedMetaDataContextWithChangedDataSource(final ShardingSphereDatabase 
originalDatabase,
                                                                               
final Map<String, DataSourceProperties> newDataSourceProps) throws SQLException 
{
         Collection<String> deletedDataSources = 
getDeletedDataSources(originalDatabase, newDataSourceProps).keySet();

Reply via email to