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

panjuan 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 626c1d765fb Adjust methods order for ContextManager (#18929)
626c1d765fb is described below

commit 626c1d765fbf62935b1b3460f93fe0464569e9e1
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jul 7 15:50:59 2022 +0800

    Adjust methods order for ContextManager (#18929)
---
 .../mode/manager/ContextManager.java               | 146 ++++++++++-----------
 1 file changed, 69 insertions(+), 77 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 d16d040aabb..37d63d132ab 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
@@ -201,26 +201,86 @@ public final class ContextManager implements 
AutoCloseable {
      * Add resource.
      *
      * @param databaseName database name
-     * @param toBeAddedDataSourcePropsMap data source properties map
+     * @param toBeAddedDataSourcePropsMap to be added data source properties 
map
      * @throws SQLException SQL exception
      */
     public synchronized void addResource(final String databaseName, final 
Map<String, DataSourceProperties> toBeAddedDataSourcePropsMap) throws 
SQLException {
-        refreshMetaDataContextForAddResource(databaseName, 
toBeAddedDataSourcePropsMap);
+        MetaDataContexts changedMetaDataContexts = 
buildChangedMetaDataContextWithAddedDataSource(databaseName, 
toBeAddedDataSourcePropsMap);
+        refreshMetaDataContext(databaseName, changedMetaDataContexts);
         metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDataSourceService().append(databaseName, 
toBeAddedDataSourcePropsMap));
     }
     
+    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 = newMetaDataContexts(metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
+        persistMetaData(result);
+        return result;
+    }
+    
     /**
      * Alter resource.
      *
      * @param databaseName database name
-     * @param toBeAlteredDataSourcePropsMap data source properties map
+     * @param toBeAlteredDataSourcePropsMap to be altered data source 
properties map
      * @throws SQLException SQL exception
      */
     public synchronized void alterResource(final String databaseName, final 
Map<String, DataSourceProperties> toBeAlteredDataSourcePropsMap) throws 
SQLException {
-        refreshMetaDataContextForAlterResource(databaseName, 
toBeAlteredDataSourcePropsMap);
+        MetaDataContexts changedMetaDataContexts = 
buildChangedMetaDataContextWithAlteredDataSource(databaseName, 
toBeAlteredDataSourcePropsMap);
+        refreshMetaDataContext(databaseName, changedMetaDataContexts);
         metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDataSourceService().append(databaseName, 
toBeAlteredDataSourcePropsMap));
     }
     
+    private MetaDataContexts 
buildChangedMetaDataContextWithAlteredDataSource(final String databaseName, 
final Map<String, DataSourceProperties> alteredDataSourceProps) throws 
SQLException {
+        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabases().get(databaseName);
+        Map<String, DataSource> pendingClosedDataSources = 
getChangedDataSources(database, alteredDataSourceProps);
+        Map<String, DataSourceProperties> pendingAlteredDataSourceProps = 
alteredDataSourceProps.entrySet().stream().filter(entry -> 
pendingClosedDataSources.containsKey(entry.getKey()))
+                .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
+        
pendingClosedDataSources.values().forEach(database.getResource()::close);
+        Map<String, DataSource> dataSourceMap = new 
HashMap<>(database.getResource().getDataSources());
+        
dataSourceMap.putAll(DataSourcePoolCreator.create(pendingAlteredDataSourceProps));
+        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 = newMetaDataContexts(metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
+        persistMetaData(result);
+        return result;
+    }
+    
+    private Map<String, DataSource> getChangedDataSources(final 
ShardingSphereDatabase database, final Map<String, DataSourceProperties> 
dataSourcePropsMap) {
+        Collection<String> changedDataSourceNames = 
getChangedDataSourceProperties(database, dataSourcePropsMap).keySet();
+        return 
database.getResource().getDataSources().entrySet().stream().filter(entry -> 
changedDataSourceNames.contains(entry.getKey()))
+                .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
+    }
+    
+    private Map<String, DataSourceProperties> 
getChangedDataSourceProperties(final ShardingSphereDatabase database, final 
Map<String, DataSourceProperties> dataSourcePropsMap) {
+        return dataSourcePropsMap.entrySet().stream()
+                .filter(entry -> 
isModifiedDataSource(database.getResource().getDataSources(), entry.getKey(), 
entry.getValue()))
+                .collect(Collectors.toMap(Entry::getKey, Entry::getValue, 
(oldValue, currentValue) -> oldValue, LinkedHashMap::new));
+    }
+    
+    private boolean isModifiedDataSource(final Map<String, DataSource> 
originalDataSources, final String dataSourceName, final DataSourceProperties 
dataSourceProps) {
+        return originalDataSources.containsKey(dataSourceName) && 
!dataSourceProps.equals(DataSourcePropertiesCreator.create(originalDataSources.get(dataSourceName)));
+    }
+    
+    private void refreshMetaDataContext(final String databaseName, final 
MetaDataContexts changedMetaDataContexts) {
+        
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)));
+    }
+    
     /**
      * Drop resource.
      *
@@ -385,6 +445,11 @@ public final class ContextManager implements AutoCloseable 
{
         return currentSchemas.entrySet().stream().filter(entry -> 
!reloadedDatabase.getSchemas().containsKey(entry.getKey())).collect(Collectors.toMap(Entry::getKey,
 Entry::getValue));
     }
     
+    private void persistMetaData(final MetaDataContexts metaDataContexts) {
+        metaDataContexts.getMetaData().getDatabases().forEach((databaseName, 
schemas) -> schemas.getSchemas()
+                .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().persistMetaData(databaseName, schemaName, 
tables))));
+    }
+    
     /**
      * Reload schema.
      *
@@ -461,79 +526,6 @@ public final class ContextManager implements AutoCloseable 
{
         }
     }
     
-    private Map<String, DataSource> getChangedDataSources(final 
ShardingSphereDatabase database, final Map<String, DataSourceProperties> 
dataSourcePropsMap) {
-        Collection<String> changedDataSourceNames = 
getChangedDataSourceProperties(database, dataSourcePropsMap).keySet();
-        return 
database.getResource().getDataSources().entrySet().stream().filter(entry -> 
changedDataSourceNames.contains(entry.getKey()))
-                .collect(Collectors.toMap(Map.Entry::getKey, 
Map.Entry::getValue));
-    }
-    
-    private Map<String, DataSourceProperties> 
getChangedDataSourceProperties(final ShardingSphereDatabase database, final 
Map<String, DataSourceProperties> dataSourcePropsMap) {
-        return dataSourcePropsMap.entrySet().stream()
-                .filter(entry -> 
isModifiedDataSource(database.getResource().getDataSources(), entry.getKey(), 
entry.getValue()))
-                .collect(Collectors.toMap(Map.Entry::getKey, 
Map.Entry::getValue, (oldValue, currentValue) -> oldValue, LinkedHashMap::new));
-    }
-    
-    private boolean isModifiedDataSource(final Map<String, DataSource> 
originalDataSources, final String dataSourceName, final DataSourceProperties 
dataSourceProps) {
-        return originalDataSources.containsKey(dataSourceName) && 
!dataSourceProps.equals(DataSourcePropertiesCreator.create(originalDataSources.get(dataSourceName)));
-    }
-    
-    private void refreshMetaDataContextForAddResource(final String 
databaseName, final Map<String, DataSourceProperties> dataSourcePropsMap) 
throws SQLException {
-        MetaDataContexts changedMetaDataContexts = 
buildChangedMetaDataContextWithAddedDataSource(databaseName, 
dataSourcePropsMap);
-        refreshMetaDataContext(databaseName, changedMetaDataContexts);
-    }
-    
-    private void refreshMetaDataContextForAlterResource(final String 
databaseName, final Map<String, DataSourceProperties> dataSourcePropsMap) 
throws SQLException {
-        MetaDataContexts changedMetaDataContexts = 
buildChangedMetaDataContextWithAlteredDataSource(databaseName, 
dataSourcePropsMap);
-        refreshMetaDataContext(databaseName, changedMetaDataContexts);
-    }
-    
-    private void refreshMetaDataContext(final String databaseName, final 
MetaDataContexts changedMetaDataContexts) {
-        
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 = newMetaDataContexts(metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
-        persistMetaData(result);
-        return result;
-    }
-    
-    private MetaDataContexts 
buildChangedMetaDataContextWithAlteredDataSource(final String databaseName, 
final Map<String, DataSourceProperties> alteredDataSourceProps) throws 
SQLException {
-        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabases().get(databaseName);
-        Map<String, DataSource> pendingClosedDataSources = 
getChangedDataSources(database, alteredDataSourceProps);
-        Map<String, DataSourceProperties> pendingAlteredDataSourceProps = 
alteredDataSourceProps.entrySet().stream().filter(entry -> 
pendingClosedDataSources.containsKey(entry.getKey()))
-                .collect(Collectors.toMap(Map.Entry::getKey, 
Map.Entry::getValue));
-        
pendingClosedDataSources.values().forEach(database.getResource()::close);
-        Map<String, DataSource> dataSourceMap = new 
HashMap<>(database.getResource().getDataSources());
-        
dataSourceMap.putAll(DataSourcePoolCreator.create(pendingAlteredDataSourceProps));
-        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 = newMetaDataContexts(metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
-        persistMetaData(result);
-        return result;
-    }
-    
-    private void persistMetaData(final MetaDataContexts metaDataContexts) {
-        metaDataContexts.getMetaData().getDatabases().forEach((databaseName, 
schemas) -> schemas.getSchemas()
-                .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().persistMetaData(databaseName, schemaName, 
tables))));
-    }
-    
     @Override
     public void close() throws Exception {
         executorEngine.close();

Reply via email to