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

menghaoran 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 5e3a3f808b0 Unify ContextManagerBuilder impl (#18795)
5e3a3f808b0 is described below

commit 5e3a3f808b0db72b5957bf202eef3105eb69be1b
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jul 3 00:44:50 2022 +0800

    Unify ContextManagerBuilder impl (#18795)
---
 .../dbdiscovery/rule/DatabaseDiscoveryRule.java    | 42 ++++++++++----------
 .../shardingsphere/sharding/rule/ShardingRule.java | 18 ++++-----
 .../core/connection/ConnectionManagerTest.java     | 16 +-------
 .../cluster/ClusterContextManagerBuilder.java      | 46 +++++++++++-----------
 .../ClusterContextManagerCoordinator.java          | 20 +++++-----
 .../ClusterContextManagerCoordinatorTest.java      | 16 ++++----
 .../memory/MemoryContextManagerBuilder.java        | 14 +++----
 .../StandaloneContextManagerBuilder.java           | 30 ++++++--------
 .../rdl/rule/RuleDefinitionBackendHandler.java     |  4 +-
 .../pipeline/core/util/PipelineContextUtil.java    |  8 ++--
 10 files changed, 98 insertions(+), 116 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
index a46964674e6..caacbd7530b 100644
--- 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
+++ 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
@@ -59,7 +59,7 @@ import java.util.stream.Collectors;
 /**
  * Database discovery rule.
  */
-public final class DatabaseDiscoveryRule implements DatabaseRule, 
DataSourceContainedRule, StatusContainedRule, ExportableRule, InstanceAwareRule 
{
+public final class DatabaseDiscoveryRule implements DatabaseRule, 
InstanceAwareRule, DataSourceContainedRule, StatusContainedRule, ExportableRule 
{
     
     @Getter
     private final RuleConfiguration configuration;
@@ -127,6 +127,26 @@ public final class DatabaseDiscoveryRule implements 
DatabaseRule, DataSourceCont
         DynamicDataSourceStrategyFactory.findInstance().ifPresent(optional -> 
optional.init(this));
     }
     
+    @Override
+    public void setInstanceContext(final InstanceContext instanceContext) {
+        
initHeartBeatJobs(instanceContext.getInstance().getInstanceMetaData().getId());
+    }
+    
+    private void initHeartBeatJobs(final String instanceId) {
+        Optional<ModeScheduleContext> modeScheduleContext = 
ModeScheduleContextFactory.getInstance().get(instanceId);
+        if (modeScheduleContext.isPresent()) {
+            for (Entry<String, DatabaseDiscoveryDataSourceRule> entry : 
dataSourceRules.entrySet()) {
+                DatabaseDiscoveryDataSourceRule rule = entry.getValue();
+                Map<String, DataSource> dataSources = 
dataSourceMap.entrySet().stream().filter(each -> 
!rule.getDisabledDataSourceNames().contains(each.getKey()))
+                        .collect(Collectors.toMap(Entry::getKey, 
Entry::getValue));
+                String jobName = 
rule.getDatabaseDiscoveryProviderAlgorithm().getType() + "-" + databaseName + 
"-" + rule.getGroupName();
+                CronJob job = new CronJob(jobName, each -> new 
HeartbeatJob(databaseName, rule.getGroupName(), 
rule.getPrimaryDataSourceName(), dataSources,
+                        rule.getDatabaseDiscoveryProviderAlgorithm(), 
rule.getDisabledDataSourceNames()).execute(null), 
rule.getHeartbeatProps().getProperty("keep-alive-cron"));
+                modeScheduleContext.get().startCronJob(job);
+            }
+        }
+    }
+    
     /**
      * Get single data source rule.
      *
@@ -186,28 +206,8 @@ public final class DatabaseDiscoveryRule implements 
DatabaseRule, DataSourceCont
         return result;
     }
     
-    private void initHeartBeatJobs(final InstanceContext instanceContext) {
-        Optional<ModeScheduleContext> modeScheduleContext = 
ModeScheduleContextFactory.getInstance().get(instanceContext.getInstance().getInstanceMetaData().getId());
-        if (modeScheduleContext.isPresent()) {
-            for (Entry<String, DatabaseDiscoveryDataSourceRule> entry : 
dataSourceRules.entrySet()) {
-                DatabaseDiscoveryDataSourceRule rule = entry.getValue();
-                Map<String, DataSource> dataSources = 
dataSourceMap.entrySet().stream().filter(each -> 
!rule.getDisabledDataSourceNames().contains(each.getKey()))
-                        .collect(Collectors.toMap(Entry::getKey, 
Entry::getValue));
-                String jobName = 
rule.getDatabaseDiscoveryProviderAlgorithm().getType() + "-" + databaseName + 
"-" + rule.getGroupName();
-                CronJob job = new CronJob(jobName, each -> new 
HeartbeatJob(databaseName, rule.getGroupName(), 
rule.getPrimaryDataSourceName(), dataSources,
-                        rule.getDatabaseDiscoveryProviderAlgorithm(), 
rule.getDisabledDataSourceNames()).execute(null), 
rule.getHeartbeatProps().getProperty("keep-alive-cron"));
-                modeScheduleContext.get().startCronJob(job);
-            }
-        }
-    }
-    
     @Override
     public String getType() {
         return DatabaseDiscoveryRule.class.getSimpleName();
     }
-    
-    @Override
-    public void setInstanceContext(final InstanceContext instanceContext) {
-        initHeartBeatJobs(instanceContext);
-    }
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index ee827159edb..68ee7e50d7a 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -83,7 +83,7 @@ import java.util.stream.Collectors;
  * Sharding rule.
  */
 @Getter
-public final class ShardingRule implements DatabaseRule, 
DataNodeContainedRule, TableContainedRule, InstanceAwareRule {
+public final class ShardingRule implements DatabaseRule, InstanceAwareRule, 
DataNodeContainedRule, TableContainedRule {
     
     private static final String ALGORITHM_EXPRESSION_KEY = 
"algorithm-expression";
     
@@ -307,6 +307,14 @@ public final class ShardingRule implements DatabaseRule, 
DataNodeContainedRule,
         return null == shardingColumn ? "" : shardingColumn;
     }
     
+    @Override
+    public void setInstanceContext(final InstanceContext instanceContext) {
+        keyGenerators.values().stream().filter(each -> each instanceof 
InstanceAwareAlgorithm).forEach(each -> ((InstanceAwareAlgorithm) 
each).setInstanceContext(instanceContext));
+        if (defaultKeyGenerateAlgorithm instanceof InstanceAwareAlgorithm) {
+            ((InstanceAwareAlgorithm) 
defaultKeyGenerateAlgorithm).setInstanceContext(instanceContext);
+        }
+    }
+    
     @Override
     public Collection<String> getAllTables() {
         Collection<String> result = new HashSet<>(getTables());
@@ -774,14 +782,6 @@ public final class ShardingRule implements DatabaseRule, 
DataNodeContainedRule,
         return binaryExpression.getLeft() instanceof ColumnSegment && 
binaryExpression.getRight() instanceof ColumnSegment && 
"=".equals(binaryExpression.getOperator());
     }
     
-    @Override
-    public void setInstanceContext(final InstanceContext instanceContext) {
-        keyGenerators.values().stream().filter(each -> each instanceof 
InstanceAwareAlgorithm).forEach(each -> ((InstanceAwareAlgorithm) 
each).setInstanceContext(instanceContext));
-        if (defaultKeyGenerateAlgorithm instanceof InstanceAwareAlgorithm) {
-            ((InstanceAwareAlgorithm) 
defaultKeyGenerateAlgorithm).setInstanceContext(instanceContext);
-        }
-    }
-    
     private ShardingAlgorithm createShardingAlgorithm(final String name, final 
ShardingSphereAlgorithmConfiguration config, final 
Collection<ShardingTableRuleConfiguration> tables,
                                                       final 
Collection<ShardingAutoTableRuleConfiguration> autoTables) {
         Map<String, String> algorithmTablePrefixMap = 
getAlgorithmTablePrefixMap(tables, autoTables);
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
index 7d62061b1a9..5590e84cd4a 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
@@ -30,9 +30,6 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.test.mock.MockedDataSource;
 import org.apache.shardingsphere.traffic.rule.TrafficRule;
-import org.apache.shardingsphere.traffic.rule.TrafficStrategyRule;
-import org.apache.shardingsphere.traffic.spi.TrafficAlgorithm;
-import org.apache.shardingsphere.traffic.spi.TrafficLoadBalanceAlgorithm;
 import org.apache.shardingsphere.transaction.core.TransactionType;
 import org.apache.shardingsphere.transaction.core.TransactionTypeHolder;
 import org.apache.shardingsphere.transaction.rule.TransactionRule;
@@ -87,10 +84,9 @@ public final class ConnectionManagerTest {
     private ContextManager mockContextManager() throws SQLException {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         Map<String, DataSource> dataSourceMap = mockDataSourceMap();
-        TrafficRule trafficRule = mockTrafficRule();
-        MetaDataPersistService metaDataPersistService = 
mockMetaDataPersistService();
+        MetaDataPersistService persistService = mockMetaDataPersistService();
         
when(result.getDataSourceMap(DefaultDatabase.LOGIC_NAME)).thenReturn(dataSourceMap);
-        
when(result.getMetaDataContexts().getPersistService()).thenReturn(Optional.of(metaDataPersistService));
+        
when(result.getMetaDataContexts().getPersistService()).thenReturn(Optional.of(persistService));
         ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
         
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class,
 RETURNS_DEEP_STUBS));
@@ -130,14 +126,6 @@ public final class ConnectionManagerTest {
         return result;
     }
     
-    private TrafficRule mockTrafficRule() {
-        TrafficRule result = mock(TrafficRule.class);
-        when(result.getLabels()).thenReturn(Arrays.asList("OLTP", "OLAP"));
-        when(result.getStrategyRules()).thenReturn(Collections.singletonList(
-                new TrafficStrategyRule("sql_match", Arrays.asList("OLTP", 
"OLAP"), mock(TrafficAlgorithm.class), 
mock(TrafficLoadBalanceAlgorithm.class))));
-        return result;
-    }
-    
     private Map<String, DataSource> mockDataSourceMap() throws SQLException {
         Map<String, DataSource> result = new HashMap<>(2, 1);
         result.put("ds", new MockedDataSource());
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 8793b7830e8..52916e3e0fd 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -64,42 +64,43 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         MetaDataPersistService persistService = new 
MetaDataPersistService(repository);
         persistConfigurations(persistService, parameter);
         RegistryCenter registryCenter = new RegistryCenter(repository);
-        MetaDataContexts metaDataContexts = 
createMetaDataContexts(persistService, parameter);
+        MetaDataContexts metaDataContexts = 
buildMetaDataContexts(persistService, parameter);
         persistMetaData(metaDataContexts);
-        ContextManager result = createContextManager(repository, 
registryCenter, parameter.getInstanceMetaData(), metaDataContexts, 
parameter.getModeConfig());
-        registerOnline(persistService, parameter, result, registryCenter);
+        InstanceContext instanceContext = buildInstanceContext(registryCenter, 
parameter.getInstanceMetaData(), parameter.getModeConfig());
+        registryCenter.getRepository().watchSessionConnection(instanceContext);
+        ContextManager result = new ContextManager(metaDataContexts, 
instanceContext);
+        registerOnline(persistService, registryCenter, parameter, result);
         return result;
     }
     
-    private void persistConfigurations(final MetaDataPersistService 
metaDataPersistService, final ContextManagerBuilderParameter parameter) {
+    private void persistConfigurations(final MetaDataPersistService 
persistService, final ContextManagerBuilderParameter parameter) {
         boolean isOverwrite = parameter.getModeConfig().isOverwrite();
         if (!parameter.isEmpty()) {
-            
metaDataPersistService.persistConfigurations(parameter.getDatabaseConfigs(), 
parameter.getGlobalRuleConfigs(), parameter.getProps(), isOverwrite);
+            
persistService.persistConfigurations(parameter.getDatabaseConfigs(), 
parameter.getGlobalRuleConfigs(), parameter.getProps(), isOverwrite);
         }
     }
     
-    private MetaDataContexts createMetaDataContexts(final 
MetaDataPersistService persistService, final ContextManagerBuilderParameter 
parameter) throws SQLException {
+    private MetaDataContexts buildMetaDataContexts(final 
MetaDataPersistService persistService, final ContextManagerBuilderParameter 
parameter) throws SQLException {
         Collection<String> databaseNames = parameter.getInstanceMetaData() 
instanceof JDBCInstanceMetaData
                 ? parameter.getDatabaseConfigs().keySet()
                 : 
persistService.getSchemaMetaDataService().loadAllDatabaseNames();
         Collection<RuleConfiguration> globalRuleConfigs = 
persistService.getGlobalRuleService().load();
         ConfigurationProperties props = new 
ConfigurationProperties(persistService.getPropsService().load());
-        Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(getDatabaseConfigMap(databaseNames, 
persistService, parameter), props);
+        Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(buildDatabaseConfigMap(databaseNames, 
persistService, parameter), props);
         ShardingSphereRuleMetaData globalMetaData = new 
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, 
databases));
         return new MetaDataContexts(persistService, new 
ShardingSphereMetaData(databases, globalMetaData, props), 
OptimizerContextFactory.create(databases, globalMetaData));
     }
     
-    private Map<String, DatabaseConfiguration> getDatabaseConfigMap(final 
Collection<String> databaseNames,
-                                                                    final 
MetaDataPersistService metaDataPersistService, final 
ContextManagerBuilderParameter parameter) {
+    private Map<String, DatabaseConfiguration> buildDatabaseConfigMap(final 
Collection<String> databaseNames,
+                                                                      final 
MetaDataPersistService persistService, final ContextManagerBuilderParameter 
parameter) {
         Map<String, DatabaseConfiguration> result = new 
HashMap<>(databaseNames.size(), 1);
-        databaseNames.forEach(each -> result.put(each, 
createDatabaseConfiguration(each, metaDataPersistService, parameter)));
+        databaseNames.forEach(each -> result.put(each, 
buildDatabaseConfiguration(each, persistService, parameter)));
         return result;
     }
     
-    private DatabaseConfiguration createDatabaseConfiguration(final String 
databaseName,
-                                                              final 
MetaDataPersistService metaDataPersistService, final 
ContextManagerBuilderParameter parameter) {
-        Map<String, DataSource> dataSources = 
metaDataPersistService.getEffectiveDataSources(databaseName, 
parameter.getDatabaseConfigs());
-        Collection<RuleConfiguration> databaseRuleConfigs = 
metaDataPersistService.getDatabaseRulePersistService().load(databaseName);
+    private DatabaseConfiguration buildDatabaseConfiguration(final String 
databaseName, final MetaDataPersistService persistService, final 
ContextManagerBuilderParameter parameter) {
+        Map<String, DataSource> dataSources = 
persistService.getEffectiveDataSources(databaseName, 
parameter.getDatabaseConfigs());
+        Collection<RuleConfiguration> databaseRuleConfigs = 
persistService.getDatabaseRulePersistService().load(databaseName);
         return new DataSourceProvidedDatabaseConfiguration(dataSources, 
databaseRuleConfigs);
     }
     
@@ -108,20 +109,17 @@ public final class ClusterContextManagerBuilder 
implements ContextManagerBuilder
                 .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService().persistMetaData(databaseName, schemaName, 
tables))));
     }
     
-    private ContextManager createContextManager(final ClusterPersistRepository 
repository, final RegistryCenter registryCenter, final InstanceMetaData 
instanceMetaData,
-                                                final MetaDataContexts 
metaDataContexts, final ModeConfiguration modeConfig) {
-        ClusterWorkerIdGenerator clusterWorkerIdGenerator = new 
ClusterWorkerIdGenerator(repository, registryCenter, instanceMetaData);
-        DistributedLockContext distributedLockContext = new 
DistributedLockContext(repository);
-        InstanceContext instanceContext = new InstanceContext(new 
ComputeNodeInstance(instanceMetaData), clusterWorkerIdGenerator, modeConfig, 
distributedLockContext);
-        repository.watchSessionConnection(instanceContext);
-        return new ContextManager(metaDataContexts, instanceContext);
+    private InstanceContext buildInstanceContext(final RegistryCenter 
registryCenter, final InstanceMetaData instanceMetaData, final 
ModeConfiguration modeConfig) {
+        ClusterWorkerIdGenerator clusterWorkerIdGenerator = new 
ClusterWorkerIdGenerator(registryCenter.getRepository(), registryCenter, 
instanceMetaData);
+        DistributedLockContext distributedLockContext = new 
DistributedLockContext(registryCenter.getRepository());
+        return new InstanceContext(new ComputeNodeInstance(instanceMetaData), 
clusterWorkerIdGenerator, modeConfig, distributedLockContext);
     }
     
-    private void registerOnline(final MetaDataPersistService 
metaDataPersistService,
-                                final ContextManagerBuilderParameter 
parameter, final ContextManager contextManager, final RegistryCenter 
registryCenter) {
+    private void registerOnline(final MetaDataPersistService persistService, 
final RegistryCenter registryCenter,
+                                final ContextManagerBuilderParameter 
parameter, final ContextManager contextManager) {
         
contextManager.getInstanceContext().getInstance().setLabels(parameter.getLabels());
         
contextManager.getInstanceContext().getComputeNodeInstances().addAll(registryCenter.getComputeNodeStatusService().loadAllComputeNodeInstances());
-        new ClusterContextManagerCoordinator(metaDataPersistService, 
contextManager, registryCenter);
+        new ClusterContextManagerCoordinator(persistService, registryCenter, 
contextManager);
         
registryCenter.onlineInstance(contextManager.getInstanceContext().getInstance());
     }
     
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
index b28f423d9cd..79698ae9c0b 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
@@ -68,16 +68,16 @@ import java.util.stream.Collectors;
  */
 public final class ClusterContextManagerCoordinator {
     
-    private final MetaDataPersistService metaDataPersistService;
-    
-    private final ContextManager contextManager;
+    private final MetaDataPersistService persistService;
     
     private final RegistryCenter registryCenter;
     
-    public ClusterContextManagerCoordinator(final MetaDataPersistService 
metaDataPersistService, final ContextManager contextManager, final 
RegistryCenter registryCenter) {
-        this.metaDataPersistService = metaDataPersistService;
-        this.contextManager = contextManager;
+    private final ContextManager contextManager;
+    
+    public ClusterContextManagerCoordinator(final MetaDataPersistService 
persistService, final RegistryCenter registryCenter, final ContextManager 
contextManager) {
+        this.persistService = persistService;
         this.registryCenter = registryCenter;
+        this.contextManager = contextManager;
         ShardingSphereEventBus.getInstance().register(this);
         disableDataSources();
     }
@@ -150,7 +150,7 @@ public final class ClusterContextManagerCoordinator {
      */
     @Subscribe
     public synchronized void renew(final RuleConfigurationsChangedEvent event) 
{
-        if 
(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
 event.getDatabaseVersion())) {
+        if 
(persistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
 event.getDatabaseVersion())) {
             contextManager.alterRuleConfiguration(event.getDatabaseName(), 
event.getRuleConfigurations());
             disableDataSources();
         }
@@ -163,7 +163,7 @@ public final class ClusterContextManagerCoordinator {
      */
     @Subscribe
     public synchronized void renew(final DataSourceChangedEvent event) {
-        if 
(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
 event.getDatabaseVersion())) {
+        if 
(persistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
 event.getDatabaseVersion())) {
             
contextManager.alterDataSourceConfiguration(event.getDatabaseName(), 
event.getDataSourcePropertiesMap());
             disableDataSources();
         }
@@ -268,8 +268,8 @@ public final class ClusterContextManagerCoordinator {
      */
     @Subscribe
     public synchronized void renew(final DatabaseVersionChangedEvent event) {
-        Map<String, DataSourceProperties> dataSourcePropertiesMap = 
metaDataPersistService.getDataSourceService().load(event.getDatabaseName(), 
event.getActiveVersion());
-        Collection<RuleConfiguration> ruleConfigs = 
metaDataPersistService.getDatabaseRulePersistService().load(event.getDatabaseName(),
 event.getActiveVersion());
+        Map<String, DataSourceProperties> dataSourcePropertiesMap = 
persistService.getDataSourceService().load(event.getDatabaseName(), 
event.getActiveVersion());
+        Collection<RuleConfiguration> ruleConfigs = 
persistService.getDatabaseRulePersistService().load(event.getDatabaseName(), 
event.getActiveVersion());
         
contextManager.alterDataSourceAndRuleConfiguration(event.getDatabaseName(), 
dataSourcePropertiesMap, ruleConfigs);
         disableDataSources();
     }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
index 64859cc5f84..653fbc31659 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
@@ -125,7 +125,7 @@ public final class ClusterContextManagerCoordinatorTest {
     private ContextManager contextManager;
     
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private MetaDataPersistService metaDataPersistService;
+    private MetaDataPersistService persistService;
     
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private ShardingSphereDatabase database;
@@ -140,7 +140,7 @@ public final class ClusterContextManagerCoordinatorTest {
         contextManager.renewMetaDataContexts(new 
MetaDataContexts(contextManager.getMetaDataContexts().getPersistService().get(),
                 new ShardingSphereMetaData(createDatabases(), 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData(), new 
ConfigurationProperties(new Properties())),
                 createOptimizerContext()));
-        coordinator = new 
ClusterContextManagerCoordinator(metaDataPersistService, contextManager, new 
RegistryCenter(mock(ClusterPersistRepository.class)));
+        coordinator = new ClusterContextManagerCoordinator(persistService, new 
RegistryCenter(mock(ClusterPersistRepository.class)), contextManager);
     }
     
     private ContextManagerBuilderParameter 
createContextManagerBuilderParameter() {
@@ -169,8 +169,8 @@ public final class ClusterContextManagerCoordinatorTest {
     
     @Test
     public void assertDatabaseAdd() throws SQLException {
-        
when(metaDataPersistService.getDataSourceService().load("db_add")).thenReturn(getDataSourcePropertiesMap());
-        
when(metaDataPersistService.getDatabaseRulePersistService().load("db_add")).thenReturn(Collections.emptyList());
+        
when(persistService.getDataSourceService().load("db_add")).thenReturn(getDataSourcePropertiesMap());
+        
when(persistService.getDatabaseRulePersistService().load("db_add")).thenReturn(Collections.emptyList());
         coordinator.renew(new DatabaseAddedEvent("db_add"));
         
assertNotNull(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("db_add").getResource().getDataSources());
     }
@@ -216,7 +216,7 @@ public final class ClusterContextManagerCoordinatorTest {
     
     @Test
     public void assertRuleConfigurationsChanged() {
-        
when(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion("db",
 "0")).thenReturn(true);
+        
when(persistService.getDatabaseVersionPersistService().isActiveVersion("db", 
"0")).thenReturn(true);
         
assertThat(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("db"),
 is(database));
         coordinator.renew(new RuleConfigurationsChangedEvent("db", "0", 
Collections.emptyList()));
         
assertThat(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("db"),
 not(database));
@@ -235,7 +235,7 @@ public final class ClusterContextManagerCoordinatorTest {
     
     @Test
     public void assertDataSourceChanged() {
-        
when(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion("db",
 "0")).thenReturn(true);
+        
when(persistService.getDatabaseVersionPersistService().isActiveVersion("db", 
"0")).thenReturn(true);
         coordinator.renew(new DataSourceChangedEvent("db", "0", 
getChangedDataSourcePropertiesMap()));
         
assertTrue(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("db").getResource().getDataSources().containsKey("ds_2"));
     }
@@ -321,8 +321,8 @@ public final class ClusterContextManagerCoordinatorTest {
     
     @Test
     public void assertRenewDatabaseVersionChangedEvent() {
-        when(metaDataPersistService.getDataSourceService().load("db", 
"1")).thenReturn(getVersionChangedDataSourcePropertiesMap());
-        when(metaDataPersistService.getDatabaseRulePersistService().load("db", 
"1")).thenReturn(Collections.emptyList());
+        when(persistService.getDataSourceService().load("db", 
"1")).thenReturn(getVersionChangedDataSourcePropertiesMap());
+        when(persistService.getDatabaseRulePersistService().load("db", 
"1")).thenReturn(Collections.emptyList());
         Map<String, DataSource> dataSourceMap = initContextManager();
         coordinator.renew(new DatabaseVersionChangedEvent("db", "1"));
         assertThat(contextManager.getDataSourceMap("db").get("ds_0"), 
is(dataSourceMap.get("ds_0")));
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
index 0f56ba12f40..9d613c9e4f9 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
@@ -45,21 +45,21 @@ public final class MemoryContextManagerBuilder implements 
ContextManagerBuilder
     
     @Override
     public ContextManager build(final ContextManagerBuilderParameter 
parameter) throws SQLException {
+        return new ContextManager(buildMetaDataContexts(parameter), 
buildInstanceContext(parameter));
+    }
+    
+    private MetaDataContexts buildMetaDataContexts(final 
ContextManagerBuilderParameter parameter) throws SQLException {
         ConfigurationProperties props = new 
ConfigurationProperties(parameter.getProps());
         Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(parameter.getDatabaseConfigs(), props);
         ShardingSphereRuleMetaData globalMetaData = new 
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(parameter.getGlobalRuleConfigs(),
 databases));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(null, new 
ShardingSphereMetaData(databases, globalMetaData, props), 
OptimizerContextFactory.create(databases, globalMetaData));
-        return new ContextManager(metaDataContexts, 
buildInstanceContext(parameter));
+        return new MetaDataContexts(null, new 
ShardingSphereMetaData(databases, globalMetaData, props), 
OptimizerContextFactory.create(databases, globalMetaData));
     }
     
     private InstanceContext buildInstanceContext(final 
ContextManagerBuilderParameter parameter) {
         ComputeNodeInstance instance = new 
ComputeNodeInstance(parameter.getInstanceMetaData());
         instance.setLabels(parameter.getLabels());
-        return new InstanceContext(instance, new MemoryWorkerIdGenerator(), 
buildMemoryModeConfiguration(parameter.getModeConfig()), new 
MemoryLockContext());
-    }
-    
-    private ModeConfiguration buildMemoryModeConfiguration(final 
ModeConfiguration modeConfiguration) {
-        return Optional.ofNullable(modeConfiguration).orElseGet(() -> new 
ModeConfiguration(getType(), null, false));
+        return new InstanceContext(instance,
+                new MemoryWorkerIdGenerator(), 
Optional.ofNullable(parameter.getModeConfig()).orElseGet(() -> new 
ModeConfiguration(getType(), null, false)), new MemoryLockContext());
     }
     
     @Override
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index 3b89d5f8fe5..5c439ed25e2 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -54,21 +54,20 @@ public final class StandaloneContextManagerBuilder 
implements ContextManagerBuil
     public ContextManager build(final ContextManagerBuilderParameter 
parameter) throws SQLException {
         MetaDataPersistService persistService = new 
MetaDataPersistService(StandalonePersistRepositoryFactory.getInstance(parameter.getModeConfig().getRepository()));
         persistConfigurations(persistService, parameter);
-        MetaDataContexts metaDataContexts = 
createMetaDataContexts(persistService, parameter);
-        return createContextManager(parameter, metaDataContexts);
+        return new ContextManager(buildMetaDataContexts(persistService, 
parameter), buildInstanceContext(parameter));
     }
     
-    private void persistConfigurations(final MetaDataPersistService 
metaDataPersistService, final ContextManagerBuilderParameter parameter) {
+    private void persistConfigurations(final MetaDataPersistService 
persistService, final ContextManagerBuilderParameter parameter) {
         if (!parameter.isEmpty()) {
-            
metaDataPersistService.persistConfigurations(parameter.getDatabaseConfigs(), 
parameter.getGlobalRuleConfigs(), parameter.getProps(), 
parameter.getModeConfig().isOverwrite());
+            
persistService.persistConfigurations(parameter.getDatabaseConfigs(), 
parameter.getGlobalRuleConfigs(), parameter.getProps(), 
parameter.getModeConfig().isOverwrite());
         }
     }
     
-    private MetaDataContexts createMetaDataContexts(final 
MetaDataPersistService persistService, final ContextManagerBuilderParameter 
parameter) throws SQLException {
+    private MetaDataContexts buildMetaDataContexts(final 
MetaDataPersistService persistService, final ContextManagerBuilderParameter 
parameter) throws SQLException {
         Collection<String> databaseNames = parameter.getInstanceMetaData() 
instanceof JDBCInstanceMetaData
                 ? parameter.getDatabaseConfigs().keySet()
                 : 
persistService.getSchemaMetaDataService().loadAllDatabaseNames();
-        Map<String, DatabaseConfiguration> databaseConfigMap = 
getDatabaseConfigMap(databaseNames, persistService, parameter);
+        Map<String, DatabaseConfiguration> databaseConfigMap = 
buildDatabaseConfigMap(databaseNames, persistService, parameter);
         Collection<RuleConfiguration> globalRuleConfigs = 
persistService.getGlobalRuleService().load();
         ConfigurationProperties props = new 
ConfigurationProperties(persistService.getPropsService().load());
         Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(databaseConfigMap, props);
@@ -76,24 +75,21 @@ public final class StandaloneContextManagerBuilder 
implements ContextManagerBuil
         return new MetaDataContexts(persistService, new 
ShardingSphereMetaData(databases, globalMetaData, props), 
OptimizerContextFactory.create(databases, globalMetaData));
     }
     
-    private Map<String, DatabaseConfiguration> getDatabaseConfigMap(final 
Collection<String> databaseNames, final MetaDataPersistService 
metaDataPersistService,
-                                                                    final 
ContextManagerBuilderParameter parameter) {
+    private Map<String, DatabaseConfiguration> buildDatabaseConfigMap(final 
Collection<String> databaseNames,
+                                                                      final 
MetaDataPersistService persistService, final ContextManagerBuilderParameter 
parameter) {
         Map<String, DatabaseConfiguration> result = new 
HashMap<>(databaseNames.size(), 1);
-        databaseNames.forEach(each -> result.put(each, 
createDatabaseConfiguration(each, metaDataPersistService, parameter)));
+        databaseNames.forEach(each -> result.put(each, 
buildDatabaseConfiguration(each, persistService, parameter)));
         return result;
     }
     
-    private DatabaseConfiguration createDatabaseConfiguration(final String 
databaseName, final MetaDataPersistService metaDataPersistService,
-                                                              final 
ContextManagerBuilderParameter parameter) {
-        Map<String, DataSource> dataSources = 
metaDataPersistService.getEffectiveDataSources(databaseName, 
parameter.getDatabaseConfigs());
-        Collection<RuleConfiguration> databaseRuleConfigs = 
metaDataPersistService.getDatabaseRulePersistService().load(databaseName);
+    private DatabaseConfiguration buildDatabaseConfiguration(final String 
databaseName, final MetaDataPersistService persistService, final 
ContextManagerBuilderParameter parameter) {
+        Map<String, DataSource> dataSources = 
persistService.getEffectiveDataSources(databaseName, 
parameter.getDatabaseConfigs());
+        Collection<RuleConfiguration> databaseRuleConfigs = 
persistService.getDatabaseRulePersistService().load(databaseName);
         return new DataSourceProvidedDatabaseConfiguration(dataSources, 
databaseRuleConfigs);
     }
     
-    private ContextManager createContextManager(final 
ContextManagerBuilderParameter parameter, final MetaDataContexts 
metaDataContexts) {
-        InstanceContext instanceContext = new InstanceContext(
-                new ComputeNodeInstance(parameter.getInstanceMetaData()), new 
StandaloneWorkerIdGenerator(), parameter.getModeConfig(), new 
StandaloneLockContext());
-        return new ContextManager(metaDataContexts, instanceContext);
+    private InstanceContext buildInstanceContext(final 
ContextManagerBuilderParameter parameter) {
+        return new InstanceContext(new 
ComputeNodeInstance(parameter.getInstanceMetaData()), new 
StandaloneWorkerIdGenerator(), parameter.getModeConfig(), new 
StandaloneLockContext());
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index 19440280bbd..aa55c545dc0 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -161,12 +161,12 @@ public final class RuleDefinitionBackendHandler<T extends 
RuleDefinitionStatemen
         }
     }
     
-    private void persistRuleConfigurationChange(final MetaDataPersistService 
metaDataPersistService, final String version, final ShardingSphereDatabase 
database,
+    private void persistRuleConfigurationChange(final MetaDataPersistService 
persistService, final String version, final ShardingSphereDatabase database,
                                                 final RuleConfiguration 
currentRuleConfig, final RuleConfiguration alteredRuleConfig) {
         Collection<RuleConfiguration> configs = new 
LinkedList<>(database.getRuleMetaData().getConfigurations());
         configs.remove(currentRuleConfig);
         configs.add(alteredRuleConfig);
-        
metaDataPersistService.getDatabaseRulePersistService().persist(database.getName(),
 version, configs);
+        
persistService.getDatabaseRulePersistService().persist(database.getName(), 
version, configs);
         ShardingSphereEventBus.getInstance().post(new 
MetadataVersionPreparedEvent(version, database.getName()));
     }
     
diff --git 
a/shardingsphere-test/shardingsphere-pipeline-test/src/test/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineContextUtil.java
 
b/shardingsphere-test/shardingsphere-pipeline-test/src/test/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineContextUtil.java
index efcea8515a9..45ee81513c4 100644
--- 
a/shardingsphere-test/shardingsphere-pipeline-test/src/test/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineContextUtil.java
+++ 
b/shardingsphere-test/shardingsphere-pipeline-test/src/test/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineContextUtil.java
@@ -96,8 +96,8 @@ public final class PipelineContextUtil {
                 
ConfigurationFileUtil.readFile("config_sharding_sphere_jdbc_source.yaml"));
         ShardingSphereDataSource dataSource = (ShardingSphereDataSource) 
PipelineDataSourceFactory.newInstance(pipelineDataSourceConfig).getDataSource();
         ContextManager contextManager = getContextManager(dataSource);
-        MetaDataPersistService metaDataPersistService = new 
MetaDataPersistService(getClusterPersistRepository());
-        MetaDataContexts metaDataContexts = 
renewMetaDataContexts(contextManager.getMetaDataContexts(), 
metaDataPersistService);
+        MetaDataPersistService persistService = new 
MetaDataPersistService(getClusterPersistRepository());
+        MetaDataContexts metaDataContexts = 
renewMetaDataContexts(contextManager.getMetaDataContexts(), persistService);
         PipelineContext.initContextManager(new 
ContextManager(metaDataContexts, contextManager.getInstanceContext()));
     }
     
@@ -113,12 +113,12 @@ public final class PipelineContextUtil {
         return PERSIST_REPOSITORY_LAZY_INITIALIZER.get();
     }
     
-    private static MetaDataContexts renewMetaDataContexts(final 
MetaDataContexts old, final MetaDataPersistService metaDataPersistService) {
+    private static MetaDataContexts renewMetaDataContexts(final 
MetaDataContexts old, final MetaDataPersistService persistService) {
         Map<String, ShardingSphereTable> tables = new HashMap<>(3, 1);
         tables.put("t_order", new ShardingSphereTable("t_order", 
Arrays.asList(new ShardingSphereColumn("order_id", Types.INTEGER, true, false, 
false),
                 new ShardingSphereColumn("user_id", Types.VARCHAR, false, 
false, false)), Collections.emptyList(), Collections.emptyList()));
         
old.getMetaData().getDatabases().get(DefaultDatabase.LOGIC_NAME).getSchemas().get(DefaultDatabase.LOGIC_NAME).putAll(tables);
-        return new MetaDataContexts(metaDataPersistService, old.getMetaData(), 
old.getOptimizerContext());
+        return new MetaDataContexts(persistService, old.getMetaData(), 
old.getOptimizerContext());
     }
     
     /**

Reply via email to