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

yx9o 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 8065c590541 Refactor ContextManager.newMetaDataContexts (#18874)
8065c590541 is described below

commit 8065c5905414525c095b3e899884bfe3fb27a440
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jul 5 23:03:14 2022 +0800

    Refactor ContextManager.newMetaDataContexts (#18874)
    
    * Refactor ContextManager.newMetaDataContexts
    
    * Fix checkstyle
---
 .../mode/manager/ContextManager.java               | 49 ++++++++++------------
 1 file changed, 23 insertions(+), 26 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 321394ab868..a6c2ba16968 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
@@ -30,6 +30,7 @@ import 
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCre
 import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
 import 
org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
+import 
org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerContext;
 import 
org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerContextFactory;
 import 
org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
 import 
org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
@@ -283,7 +284,8 @@ public final class ContextManager implements AutoCloseable {
      * @param ruleConfigs rule configurations
      */
     @SuppressWarnings("rawtypes")
-    public synchronized void alterDataSourceAndRuleConfiguration(final String 
databaseName, final Map<String, DataSourceProperties> dataSourcePropsMap, final 
Collection<RuleConfiguration> ruleConfigs) {
+    public synchronized void alterDataSourceAndRuleConfiguration(final String 
databaseName,
+                                                                 final 
Map<String, DataSourceProperties> dataSourcePropsMap, final 
Collection<RuleConfiguration> ruleConfigs) {
         try {
             Collection<ResourceHeldRule> staleResourceHeldRules = 
getStaleResourceHeldRules(databaseName);
             SwitchingResource switchingResource = new 
ResourceSwitchManager().create(metaDataContexts.getMetaData().getDatabases().get(databaseName).getResource(),
 dataSourcePropsMap);
@@ -308,8 +310,7 @@ public final class ContextManager implements AutoCloseable {
         Map<String, ShardingSphereDatabase> changedDatabases = 
createChangedDatabases(databaseName, switchingResource, ruleConfigs);
         ShardingSphereRuleMetaData changedGlobalMetaData = new 
ShardingSphereRuleMetaData(
                 
GlobalRulesBuilder.buildRules(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 changedDatabases, instanceContext));
-        return new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null),
-                new ShardingSphereMetaData(changedDatabases, 
changedGlobalMetaData, metaDataContexts.getMetaData().getProps()),
+        return newMetaDataContexts(new 
ShardingSphereMetaData(changedDatabases, changedGlobalMetaData, 
metaDataContexts.getMetaData().getProps()),
                 OptimizerContextFactory.create(changedDatabases, 
changedGlobalMetaData));
     }
     
@@ -328,19 +329,27 @@ public final class ContextManager implements 
AutoCloseable {
         return result;
     }
     
+    private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData 
metaData, final OptimizerContext optimizerContext) {
+        return new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData, 
optimizerContext);
+    }
+    
     /**
      * Alter global rule configuration.
      *
      * @param ruleConfigs global rule configuration
      */
+    @SuppressWarnings("rawtypes")
     public synchronized void alterGlobalRuleConfiguration(final 
Collection<RuleConfiguration> ruleConfigs) {
         if (ruleConfigs.isEmpty()) {
             return;
         }
-        MetaDataContexts newMetaDataContexts = rebuildMetaDataContexts(
-                new 
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(ruleConfigs, 
metaDataContexts.getMetaData().getDatabases(), instanceContext)));
-        
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(ResourceHeldRule::closeStaleResources);
-        renewMetaDataContexts(newMetaDataContexts);
+        Collection<ResourceHeldRule> staleResourceHeldRules = 
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class);
+        ShardingSphereRuleMetaData toBeChangedGlobalRuleMetaData = new 
ShardingSphereRuleMetaData(
+                GlobalRulesBuilder.buildRules(ruleConfigs, 
metaDataContexts.getMetaData().getDatabases(), instanceContext));
+        ShardingSphereMetaData toBeChangedMetaData = new 
ShardingSphereMetaData(
+                metaDataContexts.getMetaData().getDatabases(), 
toBeChangedGlobalRuleMetaData, metaDataContexts.getMetaData().getProps());
+        metaDataContexts = newMetaDataContexts(toBeChangedMetaData, 
metaDataContexts.getOptimizerContext());
+        staleResourceHeldRules.forEach(ResourceHeldRule::closeStaleResources);
     }
     
     /**
@@ -349,7 +358,9 @@ public final class ContextManager implements AutoCloseable {
      * @param props properties to be altered
      */
     public synchronized void alterProperties(final Properties props) {
-        renewMetaDataContexts(rebuildMetaDataContexts(new 
ConfigurationProperties(props)));
+        ShardingSphereMetaData toBeChangedMetaData = new 
ShardingSphereMetaData(
+                metaDataContexts.getMetaData().getDatabases(), 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), new 
ConfigurationProperties(props));
+        metaDataContexts = newMetaDataContexts(toBeChangedMetaData, 
metaDataContexts.getOptimizerContext());
     }
     
     /**
@@ -434,8 +445,8 @@ public final class ContextManager implements AutoCloseable {
         FederationDatabaseMetaData alteredDatabaseMetaData = new 
FederationDatabaseMetaData(databaseName, schemas);
         
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().put(databaseName,
 alteredDatabaseMetaData);
         
metaDataContexts.getOptimizerContext().getPlannerContexts().put(databaseName, 
OptimizerPlannerContextFactory.create(alteredDatabaseMetaData));
-        renewMetaDataContexts(
-                rebuildMetaDataContexts(new 
ShardingSphereMetaData(alteredDatabases, 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps())));
+        renewMetaDataContexts(newMetaDataContexts(new 
ShardingSphereMetaData(alteredDatabases, 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps()),
+                metaDataContexts.getOptimizerContext()));
     }
     
     private void deleteSchemas(final String databaseName, final Map<String, 
ShardingSphereSchema> actualSchemas) {
@@ -497,20 +508,6 @@ public final class ContextManager implements AutoCloseable 
{
         return originalDataSources.containsKey(dataSourceName) && 
!dataSourceProps.equals(DataSourcePropertiesCreator.create(originalDataSources.get(dataSourceName)));
     }
     
-    private MetaDataContexts rebuildMetaDataContexts(final 
ShardingSphereMetaData changedMetaData) {
-        return new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), 
changedMetaData, metaDataContexts.getOptimizerContext());
-    }
-    
-    private MetaDataContexts rebuildMetaDataContexts(final 
ShardingSphereRuleMetaData globalRuleMetaData) {
-        ShardingSphereMetaData changedMetaData = new 
ShardingSphereMetaData(metaDataContexts.getMetaData().getDatabases(), 
globalRuleMetaData, metaDataContexts.getMetaData().getProps());
-        return new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), 
changedMetaData, metaDataContexts.getOptimizerContext());
-    }
-    
-    private MetaDataContexts rebuildMetaDataContexts(final 
ConfigurationProperties props) {
-        ShardingSphereMetaData changedMetaData = new 
ShardingSphereMetaData(metaDataContexts.getMetaData().getDatabases(), 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), props);
-        return new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), 
changedMetaData, metaDataContexts.getOptimizerContext());
-    }
-    
     private void refreshMetaDataContextForAddResource(final String 
databaseName, final Map<String, DataSourceProperties> dataSourcePropsMap) 
throws SQLException {
         MetaDataContexts changedMetaDataContexts = 
buildChangedMetaDataContextWithAddedDataSource(databaseName, 
dataSourcePropsMap);
         refreshMetaDataContext(databaseName, changedMetaDataContexts);
@@ -539,7 +536,7 @@ public final class ContextManager implements AutoCloseable {
         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));
+        MetaDataContexts result = newMetaDataContexts(metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
         persistMetaData(result);
         return result;
     }
@@ -558,7 +555,7 @@ public final class ContextManager implements AutoCloseable {
         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));
+        MetaDataContexts result = newMetaDataContexts(metaData, 
OptimizerContextFactory.create(databases, globalMetaData));
         persistMetaData(result);
         return result;
     }

Reply via email to