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

sunnianjun 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 1daa1fa36e9 Move MetaDataPersistService from MetaDataContexts to 
PersistServiceFacade (#31376)
1daa1fa36e9 is described below

commit 1daa1fa36e99be575d1ff1a496edad605d274710
Author: Haoran Meng <[email protected]>
AuthorDate: Fri May 24 17:47:39 2024 +0800

    Move MetaDataPersistService from MetaDataContexts to PersistServiceFacade 
(#31376)
    
    * Move MetaDataPersistService from MetaDataContexts to PersistServiceFacade
    
    * Move MetaDataPersistService from MetaDataContexts to PersistServiceFacade
    
    * Move MetaDataPersistService from MetaDataContexts to PersistServiceFacade
---
 .../impl/proxy/ProxyStateExporterTest.java         |  3 +-
 .../PrometheusPluginLifecycleServiceTest.java      |  3 +-
 ...eadwriteSplittingStorageUnitStatusExecutor.java |  2 +-
 .../DatabaseRuleDefinitionExecuteEngine.java       |  2 +-
 .../DriverDatabaseConnectionManager.java           |  2 +-
 .../DriverDatabaseConnectionManagerTest.java       |  2 +-
 .../pipeline/core/job/api/PipelineAPIFactory.java  |  2 +-
 .../core/util/PipelineDistributedBarrier.java      |  2 +-
 .../schema/TableMetaDataPersistService.java        |  8 ++--
 .../mode/manager/ContextManager.java               | 31 ++++++++-------
 .../context/ConfigurationContextManager.java       | 27 +++++++------
 .../context/ResourceMetaDataContextManager.java    |  5 ++-
 .../ShardingSphereDatabaseContextManager.java      |  3 ++
 .../mode/metadata/MetaDataContexts.java            |  7 +---
 .../mode/metadata/MetaDataContextsFactory.java     | 26 ++++++-------
 .../mode/service/PersistServiceFacade.java         |  4 ++
 .../mode/subsciber/RuleItemChangedSubscriber.java  |  6 ++-
 .../mode/manager/ContextManagerTest.java           | 16 ++------
 .../mode/metadata/MetaDataContextsFactoryTest.java |  1 -
 .../cluster/ClusterContextManagerBuilder.java      |  2 +-
 .../subscriber/ConfigurationChangedSubscriber.java | 20 ++++++----
 .../ResourceMetaDataChangedSubscriber.java         | 10 +++--
 .../ClusterMetaDataManagerPersistService.java      | 39 ++++++++++---------
 .../ProcessListChangedSubscriberTest.java          |  2 +-
 .../ResourceMetaDataChangedSubscriberTest.java     |  2 +-
 .../subscriber/StateChangedSubscriberTest.java     |  2 +-
 .../StandaloneContextManagerBuilder.java           |  2 +-
 .../StandaloneMetaDataManagerPersistService.java   | 45 ++++++++++++----------
 .../ral/updatable/SetDistVariableExecutor.java     | 16 ++++----
 .../YamlDatabaseConfigurationImportExecutor.java   |  3 +-
 .../ProxyDatabaseConnectionManagerTest.java        |  3 +-
 .../backend/connector/ProxySQLExecutorTest.java    |  3 +-
 .../proxy/backend/context/ProxyContextTest.java    |  3 +-
 .../DatabaseAdminQueryBackendHandlerTest.java      |  5 ++-
 .../ral/QueryableRALBackendHandlerTest.java        |  3 +-
 .../ral/updatable/SetDistVariableExecutorTest.java |  8 ++--
 .../FrontDatabaseProtocolTypeFactoryTest.java      |  3 +-
 .../frontend/state/impl/OKProxyStateTest.java      |  3 +-
 .../PostgreSQLCommandExecuteEngineTest.java        |  4 +-
 .../repository/PipelineGovernanceFacadeTest.java   |  2 +-
 .../pipeline/core/util/PipelineContextUtils.java   |  6 +--
 .../core/util/PipelineDistributedBarrierTest.java  |  4 +-
 .../MigrationDataConsistencyCheckerTest.java       |  2 +-
 43 files changed, 190 insertions(+), 154 deletions(-)

diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
index 30fb1fd01df..f2fc0fcdaf0 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
@@ -35,6 +35,7 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.standalone.workerid.generator.StandaloneWorkerIdGenerator;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
@@ -84,6 +85,6 @@ class ProxyStateExporterTest {
         ComputeNodeInstanceContext computeNodeInstanceContext = new 
ComputeNodeInstanceContext(
                 new ComputeNodeInstance(mock(InstanceMetaData.class)), new 
StandaloneWorkerIdGenerator(), new ModeConfiguration("Standalone", null),
                 mock(LockContext.class), new EventBusContext());
-        return new ContextManager(metaDataContexts, 
computeNodeInstanceContext);
+        return new ContextManager(metaDataContexts, 
computeNodeInstanceContext, mock(PersistRepository.class));
     }
 }
diff --git 
a/agent/plugins/metrics/type/prometheus/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/prometheus/PrometheusPluginLifecycleServiceTest.java
 
b/agent/plugins/metrics/type/prometheus/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/prometheus/PrometheusPluginLifecycleServiceTest.java
index 3dd40301194..be934e12108 100644
--- 
a/agent/plugins/metrics/type/prometheus/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/prometheus/PrometheusPluginLifecycleServiceTest.java
+++ 
b/agent/plugins/metrics/type/prometheus/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/prometheus/PrometheusPluginLifecycleServiceTest.java
@@ -30,6 +30,7 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.standalone.workerid.generator.StandaloneWorkerIdGenerator;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
@@ -73,6 +74,6 @@ class PrometheusPluginLifecycleServiceTest {
         ComputeNodeInstanceContext computeNodeInstanceContext = new 
ComputeNodeInstanceContext(
                 new ComputeNodeInstance(mock(InstanceMetaData.class)), new 
StandaloneWorkerIdGenerator(), new ModeConfiguration("Standalone", null),
                 mock(LockContext.class), new EventBusContext());
-        return new ContextManager(metaDataContexts, 
computeNodeInstanceContext);
+        return new ContextManager(metaDataContexts, 
computeNodeInstanceContext, mock(PersistRepository.class));
     }
 }
diff --git 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingStorageUnitStatusExecutor.java
 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingStorageUnitStatusExecutor.java
index 9ba188fd2c3..f8dcce5ec9c 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingStorageUnitStatusExecutor.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingStorageUnitStatusExecutor.java
@@ -77,7 +77,7 @@ public final class 
AlterReadwriteSplittingStorageUnitStatusExecutor
     
     private void updateStatus(final ContextManager contextManager, final 
AlterReadwriteSplittingStorageUnitStatusStatement sqlStatement) {
         DataSourceState status = sqlStatement.isEnable() ? 
DataSourceState.ENABLED : DataSourceState.DISABLED;
-        new 
QualifiedDataSourceStatusService(contextManager.getMetaDataContexts().getPersistService().getRepository())
+        new QualifiedDataSourceStatusService(contextManager.getRepository())
                 .changeStatus(database.getName(), sqlStatement.getRuleName(), 
sqlStatement.getStorageUnitName(), status);
     }
     
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
index 22525d5feca..20d07acebce 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
@@ -55,7 +55,7 @@ public final class DatabaseRuleDefinitionExecuteEngine {
         checkBeforeUpdate();
         RuleConfiguration currentRuleConfig = 
rule.map(ShardingSphereRule::getConfiguration).orElse(null);
         if (getRefreshStatus(rule.isPresent())) {
-            
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService()
+            
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
                     
.switchActiveVersion(DatabaseRuleOperatorFactory.newInstance(contextManager, 
executor).operate(sqlStatement, database, currentRuleConfig));
         }
     }
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
index 85e675c4cb3..f4472436f14 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
@@ -109,7 +109,7 @@ public final class DriverDatabaseConnectionManager 
implements OnlineDatabaseConn
         if (rule.getStrategyRules().isEmpty()) {
             return Collections.emptyMap();
         }
-        MetaDataPersistService persistService = 
contextManager.getMetaDataContexts().getPersistService();
+        MetaDataPersistService persistService = 
contextManager.getPersistServiceFacade().getMetaDataPersistService();
         String actualDatabaseName = 
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName();
         Map<String, DataSourcePoolProperties> propsMap = 
persistService.getDataSourceUnitService().load(actualDatabaseName);
         Preconditions.checkState(!propsMap.isEmpty(), "Can not get data source 
properties from meta data.");
diff --git 
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
 
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
index a611dc0e633..9391da3a394 100644
--- 
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
+++ 
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
@@ -78,7 +78,7 @@ class DriverDatabaseConnectionManagerTest {
         Map<String, StorageUnit> storageUnits = mockStorageUnits();
         
when(result.getStorageUnits(DefaultDatabase.LOGIC_NAME)).thenReturn(storageUnits);
         MetaDataPersistService persistService = mockMetaDataPersistService();
-        
when(result.getMetaDataContexts().getPersistService()).thenReturn(persistService);
+        
when(result.getPersistServiceFacade().getMetaDataPersistService()).thenReturn(persistService);
         
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(
                 new RuleMetaData(Arrays.asList(mock(AuthorityRule.class, 
RETURNS_DEEP_STUBS), mock(TransactionRule.class, RETURNS_DEEP_STUBS),
                         mock(TrafficRule.class, RETURNS_DEEP_STUBS))));
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/job/api/PipelineAPIFactory.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/job/api/PipelineAPIFactory.java
index 2d169478de2..b8ad17805f0 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/job/api/PipelineAPIFactory.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/job/api/PipelineAPIFactory.java
@@ -63,7 +63,7 @@ public final class PipelineAPIFactory {
             @Override
             protected PipelineGovernanceFacade initialize() {
                 ContextManager contextManager = 
PipelineContextManager.getContext(contextKey).getContextManager();
-                return new PipelineGovernanceFacade((ClusterPersistRepository) 
contextManager.getMetaDataContexts().getPersistService().getRepository());
+                return new PipelineGovernanceFacade((ClusterPersistRepository) 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getRepository());
             }
         }).get();
     }
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineDistributedBarrier.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineDistributedBarrier.java
index 70035e61e10..88ddf2a1757 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineDistributedBarrier.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/util/PipelineDistributedBarrier.java
@@ -163,7 +163,7 @@ public final class PipelineDistributedBarrier {
         
         @Override
         protected ClusterPersistRepository initialize() {
-            return (ClusterPersistRepository) 
PipelineContextManager.getContext(contextKey).getContextManager().getMetaDataContexts().getPersistService().getRepository();
+            return (ClusterPersistRepository) 
PipelineContextManager.getContext(contextKey).getContextManager().getPersistServiceFacade().getMetaDataPersistService().getRepository();
         }
     }
 }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistService.java
index bdbf2a73514..6feca1c9742 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistService.java
@@ -32,8 +32,8 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
-import java.util.Map;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 
 /**
@@ -55,8 +55,10 @@ public final class TableMetaDataPersistService implements 
SchemaMetaDataPersistS
             String tableName = entry.getKey().toLowerCase();
             List<String> versions = 
repository.getChildrenKeys(TableMetaDataNode.getTableVersionsNode(databaseName, 
schemaName, tableName));
             String nextActiveVersion = versions.isEmpty() ? DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
-            
repository.persist(TableMetaDataNode.getTableVersionNode(databaseName, 
schemaName, tableName, nextActiveVersion),
-                    YamlEngine.marshal(new 
YamlTableSwapper().swapToYamlConfiguration(entry.getValue())));
+            if (entry.getValue() != null) {
+                
repository.persist(TableMetaDataNode.getTableVersionNode(databaseName, 
schemaName, tableName, nextActiveVersion),
+                        YamlEngine.marshal(new 
YamlTableSwapper().swapToYamlConfiguration(entry.getValue())));
+            }
             if (Strings.isNullOrEmpty(getActiveVersion(databaseName, 
schemaName, tableName))) {
                 
repository.persist(TableMetaDataNode.getTableActiveVersionNode(databaseName, 
schemaName, tableName), DEFAULT_VERSION);
             }
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 8293ccd04d9..159240a7950 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
@@ -46,6 +46,7 @@ import 
org.apache.shardingsphere.mode.manager.switcher.SwitchingResource;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
 import org.apache.shardingsphere.mode.service.PersistServiceFacade;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.mode.state.StateContext;
 
 import java.sql.SQLException;
@@ -77,15 +78,18 @@ public final class ContextManager implements AutoCloseable {
     
     private final PersistServiceFacade persistServiceFacade;
     
-    public ContextManager(final MetaDataContexts metaDataContexts, final 
ComputeNodeInstanceContext computeNodeInstanceContext) {
+    private final PersistRepository repository;
+    
+    public ContextManager(final MetaDataContexts metaDataContexts, final 
ComputeNodeInstanceContext computeNodeInstanceContext, final PersistRepository 
repository) {
         this.metaDataContexts = new AtomicReference<>(metaDataContexts);
         this.computeNodeInstanceContext = computeNodeInstanceContext;
-        shardingSphereDatabaseContextManager = new 
ShardingSphereDatabaseContextManager(this.metaDataContexts);
-        configurationContextManager = new 
ConfigurationContextManager(this.metaDataContexts, computeNodeInstanceContext);
-        resourceMetaDataContextManager = new 
ResourceMetaDataContextManager(this.metaDataContexts);
+        this.repository = repository;
+        persistServiceFacade = new PersistServiceFacade(repository, 
computeNodeInstanceContext.getModeConfiguration(), this);
+        shardingSphereDatabaseContextManager = new 
ShardingSphereDatabaseContextManager(this.metaDataContexts, 
persistServiceFacade);
+        configurationContextManager = new 
ConfigurationContextManager(this.metaDataContexts, computeNodeInstanceContext, 
persistServiceFacade);
+        resourceMetaDataContextManager = new 
ResourceMetaDataContextManager(this.metaDataContexts, persistServiceFacade);
         executorEngine = 
ExecutorEngine.createExecutorEngineWithSize(metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE));
         stateContext = new StateContext();
-        persistServiceFacade = new 
PersistServiceFacade(metaDataContexts.getPersistService().getRepository(), 
computeNodeInstanceContext.getModeConfiguration(), this);
     }
     
     /**
@@ -138,7 +142,7 @@ public final class ContextManager implements AutoCloseable {
     public void refreshDatabaseMetaData(final ShardingSphereDatabase database, 
final boolean force) {
         try {
             MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
-            MetaDataPersistService persistService = 
metaDataContexts.get().getPersistService();
+            MetaDataPersistService persistService = 
persistServiceFacade.getMetaDataPersistService();
             if (force) {
                 metaDataContexts.set(reloadedMetaDataContexts);
                 
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
@@ -165,14 +169,14 @@ public final class ContextManager implements 
AutoCloseable {
             deletedSchemaNames(database.getName(), 
reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), 
database);
             metaDataContexts.set(reloadedMetaDataContexts);
             
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
-                    .forEach((schemaName, schema) -> 
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().compareAndPersist(database.getName(),
 schemaName, schema));
+                    .forEach((schemaName, schema) -> 
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().compareAndPersist(database.getName(),
 schemaName, schema));
         } catch (final SQLException ex) {
             log.error("Refresh table meta data: {} failed", 
database.getName(), ex);
         }
     }
     
     private MetaDataContexts createMetaDataContexts(final 
ShardingSphereDatabase database) throws SQLException {
-        MetaDataPersistService metaDataPersistService = 
metaDataContexts.get().getPersistService();
+        MetaDataPersistService metaDataPersistService = 
persistServiceFacade.getMetaDataPersistService();
         Map<String, DataSourcePoolProperties> dataSourcePoolPropsFromRegCenter 
= metaDataPersistService.getDataSourceUnitService().load(database.getName());
         SwitchingResource switchingResource = new 
ResourceSwitchManager().alterStorageUnit(database.getResourceMetaData(), 
dataSourcePoolPropsFromRegCenter);
         
metaDataContexts.get().getMetaData().getDatabases().putAll(configurationContextManager.renewDatabase(database,
 switchingResource));
@@ -196,7 +200,7 @@ public final class ContextManager implements AutoCloseable {
      */
     public void deletedSchemaNames(final String databaseName, final 
ShardingSphereDatabase reloadDatabase, final ShardingSphereDatabase 
currentDatabase) {
         
GenericSchemaManager.getToBeDeletedSchemaNames(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas()).keySet()
-                .forEach(each -> 
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().dropSchema(databaseName,
 each));
+                .forEach(each -> 
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().dropSchema(databaseName,
 each));
     }
     
     /**
@@ -211,11 +215,11 @@ public final class ContextManager implements 
AutoCloseable {
             ShardingSphereSchema reloadedSchema = loadSchema(database, 
schemaName, dataSourceName);
             if (reloadedSchema.getTables().isEmpty()) {
                 database.dropSchema(schemaName);
-                
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().dropSchema(database.getName(),
+                
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().dropSchema(database.getName(),
                         schemaName);
             } else {
                 database.addSchema(schemaName, reloadedSchema);
-                
metaDataContexts.get().getPersistService().getDatabaseMetaDataService()
+                
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService()
                         .compareAndPersist(database.getName(), schemaName, 
reloadedSchema);
             }
         } catch (final SQLException ex) {
@@ -230,7 +234,7 @@ public final class ContextManager implements AutoCloseable {
                 Collections.singletonMap(dataSourceName, 
database.getResourceMetaData().getStorageUnits().get(dataSourceName).getDataSource()),
                 database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
         ShardingSphereSchema result = 
GenericSchemaBuilder.build(material).get(schemaName);
-        
result.getViews().putAll(metaDataContexts.get().getPersistService().getDatabaseMetaDataService().getViewMetaDataPersistService().load(database.getName(),
 schemaName));
+        
result.getViews().putAll(persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().getViewMetaDataPersistService().load(database.getName(),
 schemaName));
         return result;
     }
     
@@ -273,7 +277,7 @@ public final class ContextManager implements AutoCloseable {
     
     private void persistTable(final ShardingSphereDatabase database, final 
String schemaName, final String tableName, final GenericSchemaBuilderMaterial 
material) throws SQLException {
         ShardingSphereSchema schema = 
GenericSchemaBuilder.build(Collections.singleton(tableName), 
material).getOrDefault(schemaName, new ShardingSphereSchema());
-        
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().getTableMetaDataPersistService()
+        
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().getTableMetaDataPersistService()
                 .persist(database.getName(), schemaName, 
Collections.singletonMap(tableName, schema.getTable(tableName)));
     }
     
@@ -281,5 +285,6 @@ public final class ContextManager implements AutoCloseable {
     public void close() {
         executorEngine.close();
         metaDataContexts.get().close();
+        repository.close();
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
index 859803b68a2..4684a182c35 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
@@ -40,15 +40,16 @@ import 
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
-import org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleEntity;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.switcher.ResourceSwitchManager;
 import org.apache.shardingsphere.mode.manager.switcher.SwitchingResource;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.service.PersistServiceFacade;
+import org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleEntity;
 import org.apache.shardingsphere.transaction.rule.TransactionRule;
 
 import javax.sql.DataSource;
@@ -76,6 +77,8 @@ public final class ConfigurationContextManager {
     
     private final ComputeNodeInstanceContext computeNodeInstanceContext;
     
+    private final PersistServiceFacade persistServiceFacade;
+    
     /**
      * Register storage unit.
      *
@@ -132,7 +135,7 @@ public final class ConfigurationContextManager {
         MetaDataContexts reloadMetaDataContexts = 
createMetaDataContexts(databaseName, false, switchingResource, null);
         persistSchemaMetaData(databaseName, reloadMetaDataContexts, 
isDropConfig);
         
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
-                .ifPresent(optional -> 
optional.getSchemaData().forEach((schemaName, schemaData) -> 
reloadMetaDataContexts.getPersistService().getShardingSphereDataPersistService()
+                .ifPresent(optional -> 
optional.getSchemaData().forEach((schemaName, schemaData) -> 
persistServiceFacade.getMetaDataPersistService().getShardingSphereDataPersistService()
                         .persist(databaseName, schemaName, schemaData, 
metaDataContexts.get().getMetaData().getDatabases())));
         alterSchemaMetaData(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName), 
metaDataContexts.get().getMetaData().getDatabase(databaseName), isDropConfig);
         metaDataContexts.set(reloadMetaDataContexts);
@@ -142,10 +145,10 @@ public final class ConfigurationContextManager {
     
     private void persistSchemaMetaData(final String databaseName, final 
MetaDataContexts reloadMetaDataContexts, final boolean isDropConfig) {
         if (isDropConfig) {
-            
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> 
reloadMetaDataContexts.getPersistService().getDatabaseMetaDataService()
+            
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> 
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService()
                     
.persistByDropConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
         } else {
-            
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> 
reloadMetaDataContexts.getPersistService().getDatabaseMetaDataService()
+            
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> 
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService()
                     
.persistByAlterConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
         }
     }
@@ -233,11 +236,11 @@ public final class ConfigurationContextManager {
         Map<String, ShardingSphereSchema> toBeAlterSchemas = 
GenericSchemaManager.getToBeDeletedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
         Map<String, ShardingSphereSchema> toBeAddedSchemas = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
         if (isDropConfig) {
-            toBeAddedSchemas.forEach((key, value) -> 
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persistByDropConfiguration(databaseName,
 key, value));
+            toBeAddedSchemas.forEach((key, value) -> 
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().persistByDropConfiguration(databaseName,
 key, value));
         } else {
-            toBeAddedSchemas.forEach((key, value) -> 
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(databaseName,
 key, value));
+            toBeAddedSchemas.forEach((key, value) -> 
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(databaseName,
 key, value));
         }
-        toBeAlterSchemas.forEach((key, value) -> 
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().delete(databaseName,
 key, value));
+        toBeAlterSchemas.forEach((key, value) -> 
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().delete(databaseName,
 key, value));
     }
     
     /**
@@ -320,7 +323,7 @@ public final class ConfigurationContextManager {
         DatabaseConfiguration toBeCreatedDatabaseConfig = 
getDatabaseConfiguration(
                 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 switchingResource, toBeCreatedRuleConfigs);
         ShardingSphereDatabase changedDatabase = 
createChangedDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName).getName(),
 internalLoadMetaData,
-                metaDataContexts.get().getPersistService(), 
toBeCreatedDatabaseConfig, metaDataContexts.get().getMetaData().getProps(), 
computeNodeInstanceContext);
+                persistServiceFacade.getMetaDataPersistService(), 
toBeCreatedDatabaseConfig, metaDataContexts.get().getMetaData().getProps(), 
computeNodeInstanceContext);
         Map<String, ShardingSphereDatabase> result = new 
LinkedHashMap<>(metaDataContexts.get().getMetaData().getDatabases());
         result.put(databaseName.toLowerCase(), changedDatabase);
         return result;
@@ -366,7 +369,7 @@ public final class ConfigurationContextManager {
     public Map<String, ShardingSphereDatabase> newShardingSphereDatabase(final 
ShardingSphereDatabase originalDatabase) {
         return 
Collections.singletonMap(originalDatabase.getName().toLowerCase(), new 
ShardingSphereDatabase(originalDatabase.getName(),
                 originalDatabase.getProtocolType(), 
originalDatabase.getResourceMetaData(), originalDatabase.getRuleMetaData(),
-                
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().loadSchemas(originalDatabase.getName())));
+                
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().loadSchemas(originalDatabase.getName())));
     }
     
     /**
@@ -414,6 +417,6 @@ public final class ConfigurationContextManager {
     }
     
     private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData 
metaData) {
-        return 
MetaDataContextsFactory.create(metaDataContexts.get().getPersistService(), 
metaData);
+        return 
MetaDataContextsFactory.create(persistServiceFacade.getMetaDataPersistService(),
 metaData);
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ResourceMetaDataContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ResourceMetaDataContextManager.java
index 1e4dbcddaf8..3463544e13d 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ResourceMetaDataContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ResourceMetaDataContextManager.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedTy
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
 import 
org.apache.shardingsphere.mode.metadata.refresher.util.TableRefreshUtils;
+import org.apache.shardingsphere.mode.service.PersistServiceFacade;
 
 import java.util.Collections;
 import java.util.Optional;
@@ -45,6 +46,8 @@ public final class ResourceMetaDataContextManager {
     
     private final AtomicReference<MetaDataContexts> metaDataContexts;
     
+    private final PersistServiceFacade persistServiceFacade;
+    
     /**
      * Add database.
      *
@@ -56,7 +59,7 @@ public final class ResourceMetaDataContextManager {
         }
         DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), 
metaDataContexts.get().getMetaData().getProps());
         metaDataContexts.get().getMetaData().addDatabase(databaseName, 
protocolType, metaDataContexts.get().getMetaData().getProps());
-        
metaDataContexts.set(MetaDataContextsFactory.create(metaDataContexts.get().getPersistService(),
 metaDataContexts.get().getMetaData()));
+        
metaDataContexts.set(MetaDataContextsFactory.create(persistServiceFacade.getMetaDataPersistService(),
 metaDataContexts.get().getMetaData()));
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ShardingSphereDatabaseContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ShardingSphereDatabaseContextManager.java
index 09b2d2df2aa..ccf49cbc12f 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ShardingSphereDatabaseContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ShardingSphereDatabaseContextManager.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereTableDa
 import 
org.apache.shardingsphere.infra.yaml.data.pojo.YamlShardingSphereRowData;
 import 
org.apache.shardingsphere.infra.yaml.data.swapper.YamlShardingSphereRowDataSwapper;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.service.PersistServiceFacade;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,6 +39,8 @@ public final class ShardingSphereDatabaseContextManager {
     
     private final AtomicReference<MetaDataContexts> metaDataContexts;
     
+    private final PersistServiceFacade persistServiceFacade;
+    
     /**
      * Add ShardingSphere database data.
      *
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
index 910a7328d80..e261e2354f7 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
@@ -22,7 +22,6 @@ import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -33,14 +32,11 @@ import java.util.LinkedList;
 @Getter
 public final class MetaDataContexts implements AutoCloseable {
     
-    private final MetaDataPersistService persistService;
-    
     private final ShardingSphereMetaData metaData;
     
     private final ShardingSphereStatistics statistics;
     
-    public MetaDataContexts(final MetaDataPersistService persistService, final 
ShardingSphereMetaData metaData, final ShardingSphereStatistics statistics) {
-        this.persistService = persistService;
+    public MetaDataContexts(final ShardingSphereMetaData metaData, final 
ShardingSphereStatistics statistics) {
         this.metaData = metaData;
         this.statistics = statistics;
     }
@@ -48,7 +44,6 @@ public final class MetaDataContexts implements AutoCloseable {
     @SneakyThrows(Exception.class)
     @Override
     public void close() {
-        persistService.getRepository().close();
         for (ShardingSphereRule each : getAllRules()) {
             if (each instanceof AutoCloseable) {
                 ((AutoCloseable) each).close();
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index b2535dcc3fa..a1217a72202 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -49,8 +49,8 @@ import 
org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
 import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.mode.storage.QualifiedDataSourceStatus;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
+import org.apache.shardingsphere.mode.storage.QualifiedDataSourceStatus;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
@@ -112,10 +112,10 @@ public final class MetaDataContextsFactory {
         RuleMetaData globalRuleMetaData = new 
RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, 
props));
         ShardingSphereMetaData shardingSphereMetaData = new 
ShardingSphereMetaData(databases, globalResourceMetaData, globalRuleMetaData, 
props);
         ShardingSphereStatistics shardingSphereStatistics = 
initStatistics(persistService, shardingSphereMetaData);
-        MetaDataContexts result = new MetaDataContexts(persistService, 
shardingSphereMetaData, shardingSphereStatistics);
+        MetaDataContexts result = new MetaDataContexts(shardingSphereMetaData, 
shardingSphereStatistics);
         if (!isDatabaseMetaDataExisted) {
-            persistDatabaseConfigurations(result, param);
-            persistMetaData(result);
+            persistDatabaseConfigurations(result, param, persistService);
+            persistMetaData(result, persistService);
         }
         return result;
     }
@@ -128,7 +128,7 @@ public final class MetaDataContextsFactory {
      * @return meta data contexts
      */
     public static MetaDataContexts create(final MetaDataPersistService 
persistService, final ShardingSphereMetaData metaData) {
-        return new MetaDataContexts(persistService, metaData, 
initStatistics(persistService, metaData));
+        return new MetaDataContexts(metaData, initStatistics(persistService, 
metaData));
     }
     
     private static Collection<String> getDatabaseNames(final 
ComputeNodeInstanceContext computeNodeInstanceContext,
@@ -218,21 +218,21 @@ public final class MetaDataContextsFactory {
         }
     }
     
-    private static void persistDatabaseConfigurations(final MetaDataContexts 
metadataContexts, final ContextManagerBuilderParameter param) {
-        
metadataContexts.getPersistService().persistGlobalRuleConfiguration(param.getGlobalRuleConfigs(),
 param.getProps());
+    private static void persistDatabaseConfigurations(final MetaDataContexts 
metadataContexts, final ContextManagerBuilderParameter param, final 
MetaDataPersistService persistService) {
+        
persistService.persistGlobalRuleConfiguration(param.getGlobalRuleConfigs(), 
param.getProps());
         for (Entry<String, ? extends DatabaseConfiguration> entry : 
param.getDatabaseConfigs().entrySet()) {
             String databaseName = entry.getKey();
-            
metadataContexts.getPersistService().persistConfigurations(entry.getKey(), 
entry.getValue(),
+            persistService.persistConfigurations(entry.getKey(), 
entry.getValue(),
                     
metadataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnits().entrySet().stream()
                             .collect(Collectors.toMap(Entry::getKey, each -> 
each.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                     
metadataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules());
         }
     }
     
-    private static void persistMetaData(final MetaDataContexts 
metaDataContexts) {
-        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
each.getSchemas()
-                .forEach((schemaName, schema) -> 
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(each.getName(),
 schemaName, schema)));
-        
metaDataContexts.getStatistics().getDatabaseData().forEach((databaseName, 
databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) 
-> metaDataContexts
-                
.getPersistService().getShardingSphereDataPersistService().persist(databaseName,
 schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
+    private static void persistMetaData(final MetaDataContexts 
metaDataContexts, final MetaDataPersistService persistService) {
+        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
each.getSchemas().forEach((schemaName, schema) -> 
persistService.getDatabaseMetaDataService()
+                .persistByAlterConfiguration(each.getName(), schemaName, 
schema)));
+        
metaDataContexts.getStatistics().getDatabaseData().forEach((databaseName, 
databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) 
-> persistService
+                .getShardingSphereDataPersistService().persist(databaseName, 
schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
index de646661a22..1f06cccb0e7 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.mode.service;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.mode.state.StatePersistService;
@@ -30,6 +31,8 @@ import 
org.apache.shardingsphere.mode.state.StatePersistService;
 @Getter
 public final class PersistServiceFacade {
     
+    private final MetaDataPersistService metaDataPersistService;
+    
     private final ComputeNodePersistService computeNodePersistService;
     
     private final StatePersistService statePersistService;
@@ -37,6 +40,7 @@ public final class PersistServiceFacade {
     private final MetaDataManagerPersistService metaDataManagerPersistService;
     
     public PersistServiceFacade(final PersistRepository repository, final 
ModeConfiguration modeConfiguration, final ContextManager contextManager) {
+        metaDataPersistService = new MetaDataPersistService(repository);
         computeNodePersistService = new ComputeNodePersistService(repository);
         statePersistService = new StatePersistService(repository);
         metaDataManagerPersistService = 
TypedSPILoader.getService(MetaDataManagerPersistServiceBuilder.class, 
modeConfiguration.getType()).build(contextManager);
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/subsciber/RuleItemChangedSubscriber.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/subsciber/RuleItemChangedSubscriber.java
index 8c2cb2ad484..3643dca1dff 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/subsciber/RuleItemChangedSubscriber.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/subsciber/RuleItemChangedSubscriber.java
@@ -43,12 +43,14 @@ public final class RuleItemChangedSubscriber implements 
EventSubscriber {
     @SuppressWarnings({"rawtypes", "unchecked", "unused"})
     @Subscribe
     public void renew(final AlterRuleItemEvent event) {
-        if 
(!event.getActiveVersion().equals(contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())))
 {
+        if 
(!event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                .getActiveVersionByFullPath(event.getActiveVersionKey()))) {
             return;
         }
         RuleItemConfigurationChangedProcessor processor = 
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class, 
event.getType());
         String yamlContent =
-                
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getVersionPathByActiveVersion(event.getActiveVersionKey(),
 event.getActiveVersion());
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                        
.getVersionPathByActiveVersion(event.getActiveVersionKey(), 
event.getActiveVersion());
         String databaseName = event.getDatabaseName();
         RuleConfiguration currentRuleConfig = 
processor.findRuleConfiguration(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName));
         synchronized (this) {
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index b0e80fe3341..95e5ce0c188 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -40,9 +40,9 @@ import 
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
 import 
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
-import 
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
+import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
@@ -89,7 +89,7 @@ class ContextManagerTest {
         
when(metaDataContexts.getMetaData().getDatabases().values()).thenReturn(Collections.singleton(database));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
-        contextManager = new ContextManager(metaDataContexts, 
computeNodeInstanceContext);
+        contextManager = new ContextManager(metaDataContexts, 
computeNodeInstanceContext, mock(PersistRepository.class));
     }
     
     private ShardingSphereDatabase mockDatabase() {
@@ -243,21 +243,13 @@ class ContextManagerTest {
     @Test
     void assertReloadSchema() {
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getName()).thenReturn("foo_db");
-        DatabaseMetaDataPersistService databaseMetaDataPersistService = 
mock(DatabaseMetaDataPersistService.class, RETURNS_DEEP_STUBS);
-        MetaDataPersistService persistService = 
mock(MetaDataPersistService.class);
-        
when(persistService.getDatabaseMetaDataService()).thenReturn(databaseMetaDataPersistService);
-        when(metaDataContexts.getPersistService()).thenReturn(persistService);
         ShardingSphereDatabase database = mockDatabase();
         contextManager.reloadSchema(database, "foo_schema", "foo_ds");
-        verify(databaseMetaDataPersistService).dropSchema("foo_db", 
"foo_schema");
+        
verify(contextManager.getRepository()).delete(DatabaseMetaDataNode.getMetaDataSchemaPath("foo_db",
 "foo_schema"));
     }
     
     @Test
     void assertReloadTable() {
-        DatabaseMetaDataPersistService databaseMetaDataPersistService = 
mock(DatabaseMetaDataPersistService.class, RETURNS_DEEP_STUBS);
-        MetaDataPersistService persistService = 
mock(MetaDataPersistService.class);
-        
when(persistService.getDatabaseMetaDataService()).thenReturn(databaseMetaDataPersistService);
-        when(metaDataContexts.getPersistService()).thenReturn(persistService);
         ShardingSphereDatabase database = mockDatabase();
         contextManager.reloadTable(database, "foo_schema", "foo_table");
         
assertTrue(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getResourceMetaData().getStorageUnits().containsKey("foo_ds"));
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactoryTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactoryTest.java
index 1bfb368c20f..de344bd39c2 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactoryTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactoryTest.java
@@ -120,7 +120,6 @@ class MetaDataContextsFactoryTest {
         
when(databaseMetaDataPersistService.loadAllDatabaseNames()).thenReturn(Collections.singletonList("foo_db"));
         
when(metaDataPersistService.getDatabaseMetaDataService()).thenReturn(databaseMetaDataPersistService);
         try (MetaDataContexts actual = 
MetaDataContextsFactory.create(metaDataPersistService, 
createContextManagerBuilderParameter(), mock(ComputeNodeInstanceContext.class, 
RETURNS_DEEP_STUBS))) {
-            assertThat(actual.getPersistService(), is(metaDataPersistService));
             
assertThat(actual.getMetaData().getGlobalRuleMetaData().getRules().size(), 
is(1));
             
assertThat(actual.getMetaData().getGlobalRuleMetaData().getRules().iterator().next(),
 instanceOf(MockedRule.class));
             
assertTrue(actual.getMetaData().getDatabases().containsKey("foo_db"));
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 0d477c8b0e4..a4d13f555ce 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -69,7 +69,7 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         }
         MetaDataPersistService metaDataPersistService = new 
MetaDataPersistService(repository);
         MetaDataContexts metaDataContexts = 
MetaDataContextsFactory.create(metaDataPersistService, param, 
computeNodeInstanceContext, new 
QualifiedDataSourceStatusService(repository).loadStatus());
-        ContextManager result = new ContextManager(metaDataContexts, 
computeNodeInstanceContext);
+        ContextManager result = new ContextManager(metaDataContexts, 
computeNodeInstanceContext, repository);
         createSubscribers(eventBusContext, repository);
         registerOnline(eventBusContext, computeNodeInstanceContext, 
repository, param, result);
         setClusterState(result);
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java
index bbe45c2fead..0da5fe19070 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java
@@ -43,11 +43,12 @@ public final class ConfigurationChangedSubscriber 
implements EventSubscriber {
      */
     @Subscribe
     public void renew(final RegisterStorageUnitEvent event) {
-        if 
(!event.getActiveVersion().equals(contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())))
 {
+        if 
(!event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                .getActiveVersionByFullPath(event.getActiveVersionKey()))) {
             return;
         }
         
contextManager.getConfigurationContextManager().registerStorageUnit(event.getDatabaseName(),
-                
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().load(event.getDatabaseName(),
 event.getStorageUnitName()));
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load(event.getDatabaseName(),
 event.getStorageUnitName()));
     }
     
     /**
@@ -57,11 +58,12 @@ public final class ConfigurationChangedSubscriber 
implements EventSubscriber {
      */
     @Subscribe
     public void renew(final AlterStorageUnitEvent event) {
-        if 
(!event.getActiveVersion().equals(contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())))
 {
+        if 
(!event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                .getActiveVersionByFullPath(event.getActiveVersionKey()))) {
             return;
         }
         contextManager.getConfigurationContextManager().alterStorageUnit(
-                event.getDatabaseName(), 
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().load(event.getDatabaseName(),
 event.getStorageUnitName()));
+                event.getDatabaseName(), 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load(event.getDatabaseName(),
 event.getStorageUnitName()));
     }
     
     /**
@@ -84,10 +86,11 @@ public final class ConfigurationChangedSubscriber 
implements EventSubscriber {
      */
     @Subscribe
     public synchronized void renew(final AlterGlobalRuleConfigurationEvent 
event) {
-        if 
(!event.getActiveVersion().equals(contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())))
 {
+        if 
(!event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                .getActiveVersionByFullPath(event.getActiveVersionKey()))) {
             return;
         }
-        
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().load(event.getRuleSimpleName())
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getGlobalRuleService().load(event.getRuleSimpleName())
                 .ifPresent(optional -> 
contextManager.getConfigurationContextManager().alterGlobalRuleConfiguration(optional));
         
     }
@@ -99,9 +102,10 @@ public final class ConfigurationChangedSubscriber 
implements EventSubscriber {
      */
     @Subscribe
     public synchronized void renew(final AlterPropertiesEvent event) {
-        if 
(!event.getActiveVersion().equals(contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())))
 {
+        if 
(!event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                .getActiveVersionByFullPath(event.getActiveVersionKey()))) {
             return;
         }
-        
contextManager.getConfigurationContextManager().alterProperties(contextManager.getMetaDataContexts().getPersistService().getPropsService().load());
+        
contextManager.getConfigurationContextManager().alterProperties(contextManager.getPersistServiceFacade().getMetaDataPersistService().getPropsService().load());
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ResourceMetaDataChangedSubscriber.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ResourceMetaDataChangedSubscriber.java
index 05afc49a5ea..e8e234deba8 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ResourceMetaDataChangedSubscriber.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ResourceMetaDataChangedSubscriber.java
@@ -90,10 +90,11 @@ public final class ResourceMetaDataChangedSubscriber 
implements EventSubscriber
      */
     @Subscribe
     public synchronized void renew(final CreateOrAlterTableEvent event) {
-        if 
(!event.getActiveVersion().equals(contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())))
 {
+        if 
(!event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                .getActiveVersionByFullPath(event.getActiveVersionKey()))) {
             return;
         }
-        Map<String, ShardingSphereTable> tables = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService()
+        Map<String, ShardingSphereTable> tables = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService()
                 
.getTableMetaDataPersistService().load(event.getDatabaseName(), 
event.getSchemaName(), event.getTableName());
         
contextManager.getResourceMetaDataContextManager().alterSchema(event.getDatabaseName(),
 event.getSchemaName(), tables.values().iterator().next(), null);
     }
@@ -115,10 +116,11 @@ public final class ResourceMetaDataChangedSubscriber 
implements EventSubscriber
      */
     @Subscribe
     public synchronized void renew(final CreateOrAlterViewEvent event) {
-        if 
(!event.getActiveVersion().equals(contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())))
 {
+        if 
(!event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                .getActiveVersionByFullPath(event.getActiveVersionKey()))) {
             return;
         }
-        Map<String, ShardingSphereView> views = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService()
+        Map<String, ShardingSphereView> views = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService()
                 .getViewMetaDataPersistService().load(event.getDatabaseName(), 
event.getSchemaName(), event.getViewName());
         
contextManager.getResourceMetaDataContextManager().alterSchema(event.getDatabaseName(),
 event.getSchemaName(), null, views.values().iterator().next());
     }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistService.java
index eaddbaa3870..38d61ff5795 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistService.java
@@ -49,17 +49,17 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     
     @Override
     public void createDatabase(final String databaseName) {
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().addDatabase(databaseName);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().addDatabase(databaseName);
     }
     
     @Override
     public void dropDatabase(final String databaseName) {
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().dropDatabase(databaseName);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().dropDatabase(databaseName);
     }
     
     @Override
     public void createSchema(final String databaseName, final String 
schemaName) {
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().addSchema(databaseName,
 schemaName);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().addSchema(databaseName,
 schemaName);
     }
     
     @Override
@@ -67,7 +67,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
         String databaseName = alterSchemaPOJO.getDatabaseName();
         String schemaName = alterSchemaPOJO.getSchemaName();
         ShardingSphereSchema schema = 
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName);
-        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService();
         databaseMetaDataService.persistByAlterConfiguration(databaseName, 
alterSchemaPOJO.getRenameSchemaName(), schema);
         
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName, 
alterSchemaPOJO.getRenameSchemaName(), schema.getViews());
         databaseMetaDataService.dropSchema(databaseName, schemaName);
@@ -75,7 +75,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     
     @Override
     public void dropSchema(final String databaseName, final Collection<String> 
schemaNames) {
-        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService();
         schemaNames.forEach(each -> 
databaseMetaDataService.dropSchema(databaseName, each));
     }
     
@@ -85,7 +85,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
         String schemaName = alterSchemaMetaDataPOJO.getSchemaName();
         Map<String, ShardingSphereTable> tables = 
alterSchemaMetaDataPOJO.getAlteredTables().stream().collect(Collectors.toMap(ShardingSphereTable::getName,
 table -> table));
         Map<String, ShardingSphereView> views = 
alterSchemaMetaDataPOJO.getAlteredViews().stream().collect(Collectors.toMap(ShardingSphereView::getName,
 view -> view));
-        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService();
         
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName, 
schemaName, tables);
         
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName, 
schemaName, views);
         alterSchemaMetaDataPOJO.getDroppedTables().forEach(each -> 
databaseMetaDataService.getTableMetaDataPersistService().delete(databaseName, 
schemaName, each));
@@ -94,19 +94,21 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     
     @Override
     public void registerStorageUnits(final String databaseName, final 
Map<String, DataSourcePoolProperties> toBeRegisteredProps) {
-        
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().persistConfigurations(databaseName,
 toBeRegisteredProps);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().persistConfigurations(databaseName,
 toBeRegisteredProps);
     }
     
     @Override
     public void alterStorageUnits(final String databaseName, final Map<String, 
DataSourcePoolProperties> toBeUpdatedProps) {
-        DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>> 
dataSourceService = 
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService();
-        
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(dataSourceService.persistConfigurations(databaseName,
 toBeUpdatedProps));
+        DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>> 
dataSourceService = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService();
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                
.switchActiveVersion(dataSourceService.persistConfigurations(databaseName, 
toBeUpdatedProps));
     }
     
     @Override
     public void unregisterStorageUnits(final String databaseName, final 
Collection<String> toBeDroppedStorageUnitNames) {
-        
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().deleteConfigurations(databaseName,
-                
getToBeDroppedDataSourcePoolProperties(contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().load(databaseName),
 toBeDroppedStorageUnitNames));
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().deleteConfigurations(databaseName,
+                
getToBeDroppedDataSourcePoolProperties(contextManager.getPersistServiceFacade().getMetaDataPersistService()
+                        .getDataSourceUnitService().load(databaseName), 
toBeDroppedStorageUnitNames));
     }
     
     private Map<String, DataSourcePoolProperties> 
getToBeDroppedDataSourcePoolProperties(final Map<String, 
DataSourcePoolProperties> propsMap, final Collection<String> 
toBeDroppedResourceNames) {
@@ -122,14 +124,15 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     @Override
     public void alterSingleRuleConfiguration(final String databaseName, final 
Collection<RuleConfiguration> ruleConfigs) {
         ruleConfigs.removeIf(each -> 
!each.getClass().isAssignableFrom(SingleRuleConfiguration.class));
-        
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService()
-                
.switchActiveVersion(contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persistConfigurations(databaseName,
 ruleConfigs));
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                
.switchActiveVersion(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService().persistConfigurations(databaseName,
 ruleConfigs));
     }
     
     @Override
     public Collection<MetaDataVersion> alterRuleConfiguration(final String 
databaseName, final RuleConfiguration toBeAlteredRuleConfig) {
         if (null != toBeAlteredRuleConfig) {
-            return 
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persistConfigurations(databaseName,
 Collections.singleton(toBeAlteredRuleConfig));
+            return 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService()
+                    .persistConfigurations(databaseName, 
Collections.singleton(toBeAlteredRuleConfig));
         }
         return Collections.emptyList();
     }
@@ -137,22 +140,22 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     @Override
     public void removeRuleConfigurationItem(final String databaseName, final 
RuleConfiguration toBeRemovedRuleConfig) {
         if (null != toBeRemovedRuleConfig) {
-            
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().deleteConfigurations(databaseName,
 Collections.singleton(toBeRemovedRuleConfig));
+            
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService().deleteConfigurations(databaseName,
 Collections.singleton(toBeRemovedRuleConfig));
         }
     }
     
     @Override
     public void removeRuleConfiguration(final String databaseName, final 
String ruleName) {
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().delete(databaseName,
 ruleName);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService().delete(databaseName,
 ruleName);
     }
     
     @Override
     public void alterGlobalRuleConfiguration(final RuleConfiguration 
toBeAlteredRuleConfig) {
-        
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
     }
     
     @Override
     public void alterProperties(final Properties props) {
-        
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getPropsService().persist(props);
     }
 }
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/subscriber/ProcessListChangedSubscriberTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/subscriber/ProcessListChangedSubscriberTest.java
index 1a831fe5d29..50a6721557f 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/subscriber/ProcessListChangedSubscriberTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/subscriber/ProcessListChangedSubscriberTest.java
@@ -83,7 +83,7 @@ class ProcessListChangedSubscriberTest {
     void setUp() throws SQLException {
         EventBusContext eventBusContext = new EventBusContext();
         contextManager = new 
ClusterContextManagerBuilder().build(createContextManagerBuilderParameter(), 
eventBusContext);
-        
contextManager.renewMetaDataContexts(MetaDataContextsFactory.create(contextManager.getMetaDataContexts().getPersistService(),
 new ShardingSphereMetaData(createDatabases(),
+        
contextManager.renewMetaDataContexts(MetaDataContextsFactory.create(contextManager.getPersistServiceFacade().getMetaDataPersistService(),
 new ShardingSphereMetaData(createDatabases(),
                 
contextManager.getMetaDataContexts().getMetaData().getGlobalResourceMetaData(), 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData(),
                 new ConfigurationProperties(new Properties()))));
         subscriber = new ProcessListChangedSubscriber(contextManager, 
repository);
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ResourceMetaDataChangedSubscriberTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ResourceMetaDataChangedSubscriberTest.java
index 9ac799c8edf..b003d9e79ca 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ResourceMetaDataChangedSubscriberTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ResourceMetaDataChangedSubscriberTest.java
@@ -80,7 +80,7 @@ class ResourceMetaDataChangedSubscriberTest {
     @BeforeEach
     void setUp() throws SQLException {
         contextManager = new 
ClusterContextManagerBuilder().build(createContextManagerBuilderParameter(), 
new EventBusContext());
-        
contextManager.renewMetaDataContexts(MetaDataContextsFactory.create(contextManager.getMetaDataContexts().getPersistService(),
 new ShardingSphereMetaData(createDatabases(),
+        
contextManager.renewMetaDataContexts(MetaDataContextsFactory.create(contextManager.getPersistServiceFacade().getMetaDataPersistService(),
 new ShardingSphereMetaData(createDatabases(),
                 
contextManager.getMetaDataContexts().getMetaData().getGlobalResourceMetaData(), 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData(),
                 new ConfigurationProperties(new Properties()))));
         subscriber = new ResourceMetaDataChangedSubscriber(contextManager);
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriberTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriberTest.java
index 15ab1b2825a..f708bbf6c4e 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriberTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriberTest.java
@@ -86,7 +86,7 @@ class StateChangedSubscriberTest {
     void setUp() throws SQLException {
         EventBusContext eventBusContext = new EventBusContext();
         contextManager = new 
ClusterContextManagerBuilder().build(createContextManagerBuilderParameter(), 
eventBusContext);
-        
contextManager.renewMetaDataContexts(MetaDataContextsFactory.create(contextManager.getMetaDataContexts().getPersistService(),
 new ShardingSphereMetaData(createDatabases(),
+        
contextManager.renewMetaDataContexts(MetaDataContextsFactory.create(contextManager.getPersistServiceFacade().getMetaDataPersistService(),
 new ShardingSphereMetaData(createDatabases(),
                 
contextManager.getMetaDataContexts().getMetaData().getGlobalResourceMetaData(), 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData(),
                 new ConfigurationProperties(new Properties()))));
         subscriber = new StateChangedSubscriber(contextManager);
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index a6048e66907..5c2b3da39b0 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -49,7 +49,7 @@ public final class StandaloneContextManagerBuilder implements 
ContextManagerBuil
         MetaDataPersistService persistService = new 
MetaDataPersistService(repository);
         ComputeNodeInstanceContext computeNodeInstanceContext = 
buildComputeNodeInstanceContext(param, eventBusContext);
         MetaDataContexts metaDataContexts = 
MetaDataContextsFactory.create(persistService, param, 
computeNodeInstanceContext);
-        ContextManager result = new ContextManager(metaDataContexts, 
computeNodeInstanceContext);
+        ContextManager result = new ContextManager(metaDataContexts, 
computeNodeInstanceContext, repository);
         new StandaloneEventSubscriberRegistry(result).register();
         return result;
     }
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
index 1099ebf8b87..0bfcd58c287 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
@@ -71,14 +71,14 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     @Override
     public void createDatabase(final String databaseName) {
         
contextManager.getResourceMetaDataContextManager().addDatabase(databaseName);
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().addDatabase(databaseName);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().addDatabase(databaseName);
         clearServiceCache();
     }
     
     @Override
     public void dropDatabase(final String databaseName) {
         
contextManager.getResourceMetaDataContextManager().dropDatabase(databaseName);
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().dropDatabase(databaseName);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().dropDatabase(databaseName);
         clearServiceCache();
     }
     
@@ -89,7 +89,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         database.addSchema(schemaName, schema);
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(databaseName,
 schemaName, schema);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(databaseName,
 schemaName, schema);
     }
     
     @Override
@@ -99,7 +99,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         putSchemaMetaData(database, alterSchemaPOJO.getSchemaName(), 
alterSchemaPOJO.getRenameSchemaName(), 
alterSchemaPOJO.getLogicDataSourceName());
         removeSchemaMetaData(database, alterSchemaPOJO.getSchemaName());
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
-        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService();
         
databaseMetaDataService.persistByAlterConfiguration(alterSchemaPOJO.getDatabaseName(),
 alterSchemaPOJO.getRenameSchemaName(), 
database.getSchema(alterSchemaPOJO.getRenameSchemaName()));
         
databaseMetaDataService.getViewMetaDataPersistService().persist(alterSchemaPOJO.getDatabaseName(),
 alterSchemaPOJO.getRenameSchemaName(),
                 
database.getSchema(alterSchemaPOJO.getRenameSchemaName()).getViews());
@@ -204,7 +204,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         addDataNode(database, 
alterSchemaMetaDataPOJO.getLogicDataSourceName(), schemaName, tables, views);
         removeDataNode(database, schemaName, 
alterSchemaMetaDataPOJO.getDroppedTables(), 
alterSchemaMetaDataPOJO.getDroppedViews());
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
-        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+        DatabaseMetaDataPersistService databaseMetaDataService = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService();
         
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName, 
schemaName, tables);
         
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName, 
schemaName, views);
         alterSchemaMetaDataPOJO.getDroppedTables().forEach(each -> 
databaseMetaDataService.getTableMetaDataPersistService().delete(databaseName, 
schemaName, each));
@@ -215,14 +215,16 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
     public void registerStorageUnits(final String databaseName, final 
Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException {
         SwitchingResource switchingResource =
                 new 
ResourceSwitchManager().registerStorageUnit(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 toBeRegisteredProps);
-        
contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.getConfigurationContextManager().createChangedDatabases(databaseName,
 false, switchingResource, null));
+        
contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.getConfigurationContextManager()
+                .createChangedDatabases(databaseName, false, 
switchingResource, null));
         
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()
                 .forEach(each -> ((GlobalRule) 
each).refresh(contextManager.getMetaDataContexts().getMetaData().getDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
         
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchemas()
-                .forEach((schemaName, schema) -> 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService()
+                .forEach((schemaName, schema) -> 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService()
                         
.persistByAlterConfiguration(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
-        DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>> 
dataSourceService = 
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService();
-        
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(dataSourceService.persistConfigurations(databaseName,
 toBeRegisteredProps));
+        DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>> 
dataSourceService = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService();
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                
.switchActiveVersion(dataSourceService.persistConfigurations(databaseName, 
toBeRegisteredProps));
         clearServiceCache();
     }
     
@@ -230,11 +232,13 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
     public void alterStorageUnits(final String databaseName, final Map<String, 
DataSourcePoolProperties> toBeUpdatedProps) throws SQLException {
         SwitchingResource switchingResource =
                 new 
ResourceSwitchManager().alterStorageUnit(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 toBeUpdatedProps);
-        
contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.getConfigurationContextManager().createChangedDatabases(databaseName,
 true, switchingResource, null));
+        
contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.getConfigurationContextManager()
+                .createChangedDatabases(databaseName, true, switchingResource, 
null));
         
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()
                 .forEach(each -> ((GlobalRule) 
each).refresh(contextManager.getMetaDataContexts().getMetaData().getDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
-        DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>> 
dataSourceService = 
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService();
-        
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(dataSourceService.persistConfigurations(databaseName,
 toBeUpdatedProps));
+        DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>> 
dataSourceService = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService();
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
+                
.switchActiveVersion(dataSourceService.persistConfigurations(databaseName, 
toBeUpdatedProps));
         switchingResource.closeStaleDataSources();
         clearServiceCache();
     }
@@ -257,9 +261,9 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     @Override
     public void alterSingleRuleConfiguration(final String databaseName, final 
Collection<RuleConfiguration> ruleConfigs) {
         ruleConfigs.removeIf(each -> 
!each.getClass().isAssignableFrom(SingleRuleConfiguration.class));
-        Collection<MetaDataVersion> metaDataVersions = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService()
+        Collection<MetaDataVersion> metaDataVersions = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService()
                 
.persistConfigurations(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
 ruleConfigs);
-        
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
         
contextManager.getConfigurationContextManager().alterRuleConfiguration(databaseName,
 ruleConfigs.iterator().next());
         clearServiceCache();
     }
@@ -267,9 +271,9 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     @Override
     public Collection<MetaDataVersion> alterRuleConfiguration(final String 
databaseName, final RuleConfiguration toBeAlteredRuleConfig) {
         if (null != toBeAlteredRuleConfig) {
-            Collection<MetaDataVersion> metaDataVersions = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService()
+            Collection<MetaDataVersion> metaDataVersions = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService()
                     
.persistConfigurations(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
 Collections.singletonList(toBeAlteredRuleConfig));
-            
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
+            
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
             sendDatabaseRuleChangedEvent(databaseName, metaDataVersions);
             clearServiceCache();
         }
@@ -291,28 +295,29 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
     public void removeRuleConfigurationItem(final String databaseName, final 
RuleConfiguration toBeRemovedRuleConfig) {
         if (null != toBeRemovedRuleConfig) {
             sendDatabaseRuleChangedEvent(databaseName,
-                    
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().deleteConfigurations(databaseName,
 Collections.singleton(toBeRemovedRuleConfig)));
+                    
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService()
+                            .deleteConfigurations(databaseName, 
Collections.singleton(toBeRemovedRuleConfig)));
             clearServiceCache();
         }
     }
     
     @Override
     public void removeRuleConfiguration(final String databaseName, final 
String ruleName) {
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().delete(databaseName,
 ruleName);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService().delete(databaseName,
 ruleName);
         clearServiceCache();
     }
     
     @Override
     public void alterGlobalRuleConfiguration(final RuleConfiguration 
toBeAlteredRuleConfig) {
         
contextManager.getConfigurationContextManager().alterGlobalRuleConfiguration(toBeAlteredRuleConfig);
-        
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
         clearServiceCache();
     }
     
     @Override
     public void alterProperties(final Properties props) {
         contextManager.getConfigurationContextManager().alterProperties(props);
-        
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
+        
contextManager.getPersistServiceFacade().getMetaDataPersistService().getPropsService().persist(props);
         clearServiceCache();
     }
     
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutor.java
index f0384da4642..d3b04aef273 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutor.java
@@ -25,6 +25,8 @@ import 
org.apache.shardingsphere.distsql.statement.ral.updatable.SetDistVariable
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import 
org.apache.shardingsphere.infra.exception.kernel.syntax.InvalidVariableValueException;
+import 
org.apache.shardingsphere.infra.exception.kernel.syntax.UnsupportedVariableException;
 import org.apache.shardingsphere.infra.props.TypedPropertyKey;
 import org.apache.shardingsphere.infra.props.TypedPropertyValue;
 import 
org.apache.shardingsphere.infra.props.exception.TypedPropertyValueException;
@@ -33,8 +35,6 @@ import 
org.apache.shardingsphere.logging.constant.LoggingConstants;
 import org.apache.shardingsphere.logging.util.LoggingUtils;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import 
org.apache.shardingsphere.infra.exception.kernel.syntax.InvalidVariableValueException;
-import 
org.apache.shardingsphere.infra.exception.kernel.syntax.UnsupportedVariableException;
 import org.slf4j.LoggerFactory;
 
 import java.sql.SQLException;
@@ -71,8 +71,8 @@ public final class SetDistVariableExecutor implements 
DistSQLUpdateExecutor<SetD
         props.put(propertyKey.getKey(), getValue(propertyKey, value));
         
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().alterProperties(props);
         refreshRootLogger(props);
-        syncSQLShowToLoggingRule(propertyKey, metaDataContexts, value);
-        syncSQLSimpleToLoggingRule(propertyKey, metaDataContexts, value);
+        syncSQLShowToLoggingRule(propertyKey, metaDataContexts, value, 
contextManager);
+        syncSQLSimpleToLoggingRule(propertyKey, metaDataContexts, value, 
contextManager);
     }
     
     private Object getValue(final TypedPropertyKey propertyKey, final String 
value) {
@@ -97,20 +97,20 @@ public final class SetDistVariableExecutor implements 
DistSQLUpdateExecutor<SetD
         
rootLogger.setLevel(Level.valueOf(props.getOrDefault(ConfigurationPropertyKey.SYSTEM_LOG_LEVEL.getKey(),
 ConfigurationPropertyKey.SYSTEM_LOG_LEVEL.getDefaultValue()).toString()));
     }
     
-    private void syncSQLShowToLoggingRule(final TypedPropertyKey propertyKey, 
final MetaDataContexts metaDataContexts, final String value) {
+    private void syncSQLShowToLoggingRule(final TypedPropertyKey propertyKey, 
final MetaDataContexts metaDataContexts, final String value, final 
ContextManager contextManager) {
         if (LoggingConstants.SQL_SHOW.equalsIgnoreCase(propertyKey.getKey())) {
             
LoggingUtils.getSQLLogger(metaDataContexts.getMetaData().getGlobalRuleMetaData()).ifPresent(option
 -> {
                 option.getProps().setProperty(LoggingConstants.SQL_LOG_ENABLE, 
value);
-                
metaDataContexts.getPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations());
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations());
             });
         }
     }
     
-    private void syncSQLSimpleToLoggingRule(final TypedPropertyKey 
propertyKey, final MetaDataContexts metaDataContexts, final String value) {
+    private void syncSQLSimpleToLoggingRule(final TypedPropertyKey 
propertyKey, final MetaDataContexts metaDataContexts, final String value, final 
ContextManager contextManager) {
         if 
(LoggingConstants.SQL_SIMPLE.equalsIgnoreCase(propertyKey.getKey())) {
             
LoggingUtils.getSQLLogger(metaDataContexts.getMetaData().getGlobalRuleMetaData()).ifPresent(option
 -> {
                 option.getProps().setProperty(LoggingConstants.SQL_LOG_SIMPLE, 
value);
-                
metaDataContexts.getPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations());
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations());
             });
         }
     }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
index 7df940380bb..565d8d7737e 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
@@ -130,7 +130,8 @@ public final class YamlDatabaseConfigurationImportExecutor {
         MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
         swapToRuleConfigs(yamlRuleConfigs).values().forEach(each -> 
addRule(ruleConfigs, each, database));
-        
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 ruleConfigs);
+        
ProxyContext.getInstance().getContextManager().getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService()
+                
.persist(metaDataContexts.getMetaData().getDatabase(databaseName).getName(), 
ruleConfigs);
     }
     
     private void addRule(final Collection<RuleConfiguration> ruleConfigs, 
final RuleConfiguration ruleConfig, final ShardingSphereDatabase database) {
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
index 3ea244d952b..18d70ce4b95 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.connection.ConnectionPostProcessor;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.datasource.JDBCBackendDataSource;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.statement.JDBCBackendStatement;
@@ -126,7 +127,7 @@ class ProxyDatabaseConnectionManagerTest {
         when(metaData.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singletonList(transactionRule)));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
-        return new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
 metaData), computeNodeInstanceContext);
+        return new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
 metaData), computeNodeInstanceContext, mock(PersistRepository.class));
     }
     
     @AfterEach
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
index 85e03d65583..baf87a324d5 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
@@ -44,6 +44,7 @@ import 
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
@@ -111,7 +112,7 @@ class ProxySQLExecutorTest {
         when(metaData.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Arrays.asList(mock(SQLFederationRule.class), transactionRule)));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
-        ContextManager contextManager = new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
 metaData), computeNodeInstanceContext);
+        ContextManager contextManager = new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
 metaData), computeNodeInstanceContext, mock(PersistRepository.class));
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
index 14aed7658d9..2951a46c86e 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
@@ -30,6 +30,7 @@ import 
org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -69,7 +70,7 @@ class ProxyContextTest {
     @Test
     void assertInit() {
         MetaDataContexts metaDataContexts = 
MetaDataContextsFactory.create(mock(MetaDataPersistService.class), new 
ShardingSphereMetaData());
-        ProxyContext.init(new ContextManager(metaDataContexts, 
mock(ComputeNodeInstanceContext.class, RETURNS_DEEP_STUBS)));
+        ProxyContext.init(new ContextManager(metaDataContexts, 
mock(ComputeNodeInstanceContext.class, RETURNS_DEEP_STUBS), 
mock(PersistRepository.class)));
         
assertThat(ProxyContext.getInstance().getContextManager().getStateContext(), 
is(ProxyContext.getInstance().getContextManager().getStateContext()));
         
assertThat(ProxyContext.getInstance().getContextManager().getStateContext().getCurrentClusterState(),
 is(ClusterState.OK));
         
assertThat(ProxyContext.getInstance().getContextManager().getMetaDataContexts(),
 is(ProxyContext.getInstance().getContextManager().getMetaDataContexts()));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
index 41032471533..a2743076f67 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.handler.admin;
 
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataMergedResult;
@@ -27,11 +28,11 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminQueryExecutor;
 import 
org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilder;
@@ -117,6 +118,6 @@ class DatabaseAdminQueryBackendHandlerTest {
                 mock(RuleMetaData.class), new ConfigurationProperties(new 
Properties()));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
-        return new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
 metaData), computeNodeInstanceContext);
+        return new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
 metaData), computeNodeInstanceContext, mock(PersistRepository.class));
     }
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
index 316347ec114..b889c72c713 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
@@ -37,6 +37,7 @@ import 
org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.DistSQLQueryBackendHandler;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
@@ -75,7 +76,7 @@ class QueryableRALBackendHandlerTest {
         when(connectionSession.getDatabaseName()).thenReturn("unknown");
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
-        ContextManager contextManager = new ContextManager(metaDataContexts, 
computeNodeInstanceContext);
+        ContextManager contextManager = new ContextManager(metaDataContexts, 
computeNodeInstanceContext, mock(PersistRepository.class));
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         assertThrows(UnknownDatabaseException.class, () -> new 
DistSQLQueryBackendHandler(mock(ExportDatabaseConfigurationStatement.class), 
connectionSession).execute());
     }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
index b4ac17556b9..37c543c9cd6 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
+import 
org.apache.shardingsphere.infra.exception.kernel.syntax.InvalidVariableValueException;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
@@ -33,8 +34,8 @@ import 
org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.metadata.persist.service.config.global.PropertiesPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import 
org.apache.shardingsphere.infra.exception.kernel.syntax.InvalidVariableValueException;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
 import org.junit.jupiter.api.Test;
@@ -47,9 +48,9 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 
 @ExtendWith(AutoMockExtension.class)
 @StaticMockSettings(ProxyContext.class)
@@ -109,7 +110,8 @@ class SetDistVariableExecutorTest {
         
when(metaDataPersistService.getPropsService()).thenReturn(mock(PropertiesPersistService.class));
         ContextManager result = new 
ContextManager(MetaDataContextsFactory.create(metaDataPersistService, new 
ShardingSphereMetaData()),
                 new ComputeNodeInstanceContext(new 
ComputeNodeInstance(mock(InstanceMetaData.class)), 
mock(WorkerIdGenerator.class),
-                        new ModeConfiguration("Standalone", null), 
mock(LockContext.class), new EventBusContext()));
+                        new ModeConfiguration("Standalone", null), 
mock(LockContext.class), new EventBusContext()),
+                mock(PersistRepository.class));
         return result;
     }
 }
diff --git 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
index 051917a5129..dda70c3a228 100644
--- 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
+++ 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.metadata.persist.data.ShardingSphereDataPersist
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
@@ -100,6 +101,6 @@ class FrontDatabaseProtocolTypeFactoryTest {
                 new ShardingSphereMetaData(databases, 
mock(ResourceMetaData.class), mock(RuleMetaData.class), new 
ConfigurationProperties(props)));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
-        return new ContextManager(metaDataContexts, 
computeNodeInstanceContext);
+        return new ContextManager(metaDataContexts, 
computeNodeInstanceContext, mock(PersistRepository.class));
     }
 }
diff --git 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
index 58642175da7..81f6da4a516 100644
--- 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
+++ 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
@@ -96,7 +97,7 @@ class OKProxyStateTest {
         when(metaData.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singletonList(transactionRule)));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
-        return new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
 metaData), computeNodeInstanceContext);
+        return new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
 metaData), computeNodeInstanceContext, mock(PersistRepository.class));
     }
     
     @SuppressWarnings({"unchecked", "SameParameterValue"})
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
index 6a79626bfcf..0d7481105e7 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
 import 
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.connection.ResourceLock;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -122,7 +123,8 @@ class PostgreSQLCommandExecuteEngineTest {
         PostgreSQLCommandExecuteEngine commandExecuteEngine = new 
PostgreSQLCommandExecuteEngine();
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
-        ContextManager contextManager = new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
 new ShardingSphereMetaData()), computeNodeInstanceContext);
+        ContextManager contextManager = new 
ContextManager(MetaDataContextsFactory.create(mock(MetaDataPersistService.class),
+                new ShardingSphereMetaData()), computeNodeInstanceContext, 
mock(PersistRepository.class));
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         commandExecuteEngine.writeQueryData(channelHandlerContext, 
databaseConnectionManager, queryCommandExecutor, 0);
         verify(resourceLock).doAwait(channelHandlerContext);
diff --git 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/registrycenter/repository/PipelineGovernanceFacadeTest.java
 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/registrycenter/repository/PipelineGovernanceFacadeTest.java
index c53465661d1..11269eecbc9 100644
--- 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/registrycenter/repository/PipelineGovernanceFacadeTest.java
+++ 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/registrycenter/repository/PipelineGovernanceFacadeTest.java
@@ -191,7 +191,7 @@ class PipelineGovernanceFacadeTest {
     
     private ClusterPersistRepository getClusterPersistRepository() {
         ContextManager contextManager = 
PipelineContextManager.getContext(PipelineContextUtils.getContextKey()).getContextManager();
-        return (ClusterPersistRepository) 
contextManager.getMetaDataContexts().getPersistService().getRepository();
+        return (ClusterPersistRepository) contextManager.getRepository();
     }
     
     private MigrationJobItemContext mockJobItemContext() {
diff --git 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
index ffed5f0061c..c744d85ca0a 100644
--- 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
+++ 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
@@ -35,8 +35,6 @@ import 
org.apache.shardingsphere.data.pipeline.core.job.progress.config.Pipeline
 import 
org.apache.shardingsphere.data.pipeline.core.job.progress.config.yaml.config.YamlPipelineProcessConfiguration;
 import 
org.apache.shardingsphere.data.pipeline.core.job.progress.config.yaml.config.YamlPipelineReadConfiguration;
 import 
org.apache.shardingsphere.data.pipeline.core.job.progress.config.yaml.swapper.YamlPipelineProcessConfigurationSwapper;
-import 
org.apache.shardingsphere.infra.metadata.caseinsensitive.CaseInsensitiveIdentifier;
-import 
org.apache.shardingsphere.infra.metadata.caseinsensitive.CaseInsensitiveQualifiedTable;
 import 
org.apache.shardingsphere.data.pipeline.core.metadata.model.PipelineColumnMetaData;
 import 
org.apache.shardingsphere.data.pipeline.core.preparer.datasource.param.CreateTableConfiguration;
 import 
org.apache.shardingsphere.data.pipeline.core.ratelimit.JobRateLimitAlgorithm;
@@ -53,6 +51,8 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDa
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
+import 
org.apache.shardingsphere.infra.metadata.caseinsensitive.CaseInsensitiveIdentifier;
+import 
org.apache.shardingsphere.infra.metadata.caseinsensitive.CaseInsensitiveQualifiedTable;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -107,7 +107,7 @@ public final class PipelineContextUtils {
         ContextManager contextManager = getContextManager(rootConfig);
         ClusterPersistRepository persistRepository = 
getClusterPersistRepository((ClusterPersistRepositoryConfiguration) 
modeConfig.getRepository());
         MetaDataContexts metaDataContexts = 
renewMetaDataContexts(contextManager.getMetaDataContexts(), new 
MetaDataPersistService(persistRepository));
-        PipelineContext pipelineContext = new PipelineContext(modeConfig, new 
ContextManager(metaDataContexts, 
contextManager.getComputeNodeInstanceContext()));
+        PipelineContext pipelineContext = new PipelineContext(modeConfig, new 
ContextManager(metaDataContexts, 
contextManager.getComputeNodeInstanceContext(), 
contextManager.getRepository()));
         PipelineContextManager.putContext(contextKey, pipelineContext);
     }
     
diff --git 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineDistributedBarrierTest.java
 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineDistributedBarrierTest.java
index 385bfca89c8..6ba3a30551d 100644
--- 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineDistributedBarrierTest.java
+++ 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineDistributedBarrierTest.java
@@ -44,7 +44,7 @@ class PipelineDistributedBarrierTest {
     void assertRegisterAndRemove() throws ReflectiveOperationException {
         String jobId = 
JobConfigurationBuilder.createYamlMigrationJobConfiguration().getJobId();
         PipelineContextKey contextKey = PipelineContextUtils.getContextKey();
-        PersistRepository repository = 
PipelineContextManager.getContext(contextKey).getContextManager().getMetaDataContexts().getPersistService().getRepository();
+        PersistRepository repository = 
PipelineContextManager.getContext(contextKey).getContextManager().getRepository();
         repository.persist(PipelineMetaDataNode.getJobRootPath(jobId), "");
         PipelineDistributedBarrier instance = 
PipelineDistributedBarrier.getInstance(contextKey);
         String parentPath = "/barrier";
@@ -60,7 +60,7 @@ class PipelineDistributedBarrierTest {
     void assertAwait() {
         String jobId = 
JobConfigurationBuilder.createYamlMigrationJobConfiguration().getJobId();
         PipelineContextKey contextKey = PipelineContextUtils.getContextKey();
-        PersistRepository repository = 
PipelineContextManager.getContext(contextKey).getContextManager().getMetaDataContexts().getPersistService().getRepository();
+        PersistRepository repository = 
PipelineContextManager.getContext(contextKey).getContextManager().getRepository();
         repository.persist(PipelineMetaDataNode.getJobRootPath(jobId), "");
         PipelineDistributedBarrier instance = 
PipelineDistributedBarrier.getInstance(contextKey);
         String barrierEnablePath = 
PipelineMetaDataNode.getJobBarrierEnablePath(jobId);
diff --git 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/scenario/migration/check/consistency/MigrationDataConsistencyCheckerTest.java
 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/scenario/migration/check/consistency/MigrationDataConsistencyCheckerTest.java
index 02d6722a8a1..8ea69409aea 100644
--- 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/scenario/migration/check/consistency/MigrationDataConsistencyCheckerTest.java
+++ 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/scenario/migration/check/consistency/MigrationDataConsistencyCheckerTest.java
@@ -72,7 +72,7 @@ class MigrationDataConsistencyCheckerTest {
     
     private ClusterPersistRepository getClusterPersistRepository() {
         ContextManager contextManager = 
PipelineContextManager.getContext(PipelineContextUtils.getContextKey()).getContextManager();
-        return (ClusterPersistRepository) 
contextManager.getMetaDataContexts().getPersistService().getRepository();
+        return (ClusterPersistRepository) contextManager.getRepository();
     }
     
     private ConsistencyCheckJobItemProgressContext 
createConsistencyCheckJobItemProgressContext(final String jobId) {

Reply via email to