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

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new dd35e083cf9 Refactor MetaDataContexts.metaData from optional to 
required (#19162)
dd35e083cf9 is described below

commit dd35e083cf972fba37be328ff9dc608e7f68ebff
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Thu Jul 14 20:17:53 2022 +0800

    Refactor MetaDataContexts.metaData from optional to required (#19162)
---
 .../jdbc/core/connection/ConnectionManager.java      |  8 ++++----
 .../jdbc/core/connection/ConnectionManagerTest.java  |  3 +--
 .../data/pipeline/core/api/PipelineAPIFactory.java   |  9 +--------
 .../shardingsphere/mode/manager/ContextManager.java  | 20 ++++++++++----------
 .../mode/metadata/MetaDataContexts.java              | 14 --------------
 .../mode/manager/ContextManagerTest.java             | 12 ++++++------
 .../cluster/ClusterContextManagerBuilder.java        |  2 +-
 .../ClusterContextManagerCoordinatorTest.java        |  3 +--
 .../StandaloneContextManagerBuilderTextTest.java     |  4 +---
 .../ShowReadwriteSplittingReadResourcesHandler.java  |  2 +-
 .../ral/updatable/AlterSQLParserRuleHandler.java     |  2 +-
 .../ral/updatable/AlterTrafficRuleHandler.java       |  2 +-
 .../ral/updatable/AlterTransactionRuleHandler.java   |  2 +-
 .../ral/updatable/CreateTrafficRuleHandler.java      |  2 +-
 .../ral/updatable/DropTrafficRuleHandler.java        |  2 +-
 .../ImportDatabaseConfigurationHandler.java          |  2 +-
 .../distsql/ral/updatable/LabelInstanceHandler.java  |  2 +-
 .../SetReadwriteSplittingStatusHandler.java          | 14 +++-----------
 .../distsql/ral/updatable/SetVariableHandler.java    | 10 ++++------
 .../ral/updatable/UnlabelInstanceHandler.java        |  4 ++--
 .../rdl/rule/RuleDefinitionBackendHandler.java       | 14 ++++++--------
 .../ral/updatable/SetVariableExecutorTest.java       |  3 ++-
 22 files changed, 50 insertions(+), 86 deletions(-)

diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
index 059b9a61e7d..38d0ecf8ff9 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
@@ -85,14 +85,14 @@ public final class ConnectionManager implements 
ExecutorJDBCConnectionManager, A
     
     private Map<String, DataSource> getTrafficDataSourceMap(final String 
schema, final ContextManager contextManager) {
         TrafficRule trafficRule = 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TrafficRule.class);
-        Optional<MetaDataPersistService> metaDataPersistService = 
contextManager.getMetaDataContexts().getPersistService();
-        if (trafficRule.getStrategyRules().isEmpty() || 
!metaDataPersistService.isPresent()) {
+        MetaDataPersistService persistService = 
contextManager.getMetaDataContexts().getPersistService();
+        if (trafficRule.getStrategyRules().isEmpty()) {
             return Collections.emptyMap();
         }
-        Map<String, DataSourceProperties> dataSourcePropsMap = 
metaDataPersistService.get().getDataSourceService().load(schema);
+        Map<String, DataSourceProperties> dataSourcePropsMap = 
persistService.getDataSourceService().load(schema);
         Preconditions.checkState(!dataSourcePropsMap.isEmpty(), "Can not get 
data source properties from meta data.");
         DataSourceProperties dataSourcePropsSample = 
dataSourcePropsMap.values().iterator().next();
-        Collection<ShardingSphereUser> users = 
metaDataPersistService.get().getGlobalRuleService().loadUsers();
+        Collection<ShardingSphereUser> users = 
persistService.getGlobalRuleService().loadUsers();
         Collection<InstanceMetaData> instances = 
contextManager.getInstanceContext().getComputeNodeInstances(InstanceType.PROXY, 
trafficRule.getLabels());
         return 
DataSourcePoolCreator.create(createDataSourcePropertiesMap(instances, users, 
dataSourcePropsSample, schema));
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
index 5590e84cd4a..748e088b9a4 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
@@ -47,7 +47,6 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
@@ -86,7 +85,7 @@ public final class ConnectionManagerTest {
         Map<String, DataSource> dataSourceMap = mockDataSourceMap();
         MetaDataPersistService persistService = mockMetaDataPersistService();
         
when(result.getDataSourceMap(DefaultDatabase.LOGIC_NAME)).thenReturn(dataSourceMap);
-        
when(result.getMetaDataContexts().getPersistService()).thenReturn(Optional.of(persistService));
+        
when(result.getMetaDataContexts().getPersistService()).thenReturn(persistService);
         ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
         
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class,
 RETURNS_DEEP_STUBS));
diff --git 
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/PipelineAPIFactory.java
 
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/PipelineAPIFactory.java
index 4e1da7e835d..29c30aecf6a 100644
--- 
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/PipelineAPIFactory.java
+++ 
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/PipelineAPIFactory.java
@@ -33,12 +33,9 @@ import 
org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobOperateAPI;
 import 
org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobStatisticsAPI;
 import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
 
-import java.util.Optional;
-
 /**
  * Pipeline API factory.
  */
@@ -49,11 +46,7 @@ public final class PipelineAPIFactory {
         
         @Override
         protected GovernanceRepositoryAPI initialize() {
-            Optional<MetaDataPersistService> persistService = 
PipelineContext.getContextManager().getMetaDataContexts().getPersistService();
-            if (!persistService.isPresent()) {
-                throw new RuntimeException("persistService is not present");
-            }
-            return new GovernanceRepositoryAPIImpl((ClusterPersistRepository) 
persistService.get().getRepository());
+            return new GovernanceRepositoryAPIImpl((ClusterPersistRepository) 
PipelineContext.getContextManager().getMetaDataContexts().getPersistService().getRepository());
         }
     };
     
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 8885331bd92..27284c44576 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -110,7 +110,7 @@ public final class ContextManager implements AutoCloseable {
         DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), 
metaDataContexts.getMetaData().getProps());
         metaDataContexts.getMetaData().addDatabase(databaseName, protocolType);
         metaDataContexts.getOptimizerContext().addDatabase(databaseName, 
protocolType);
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().persistDatabase(databaseName));
+        
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistDatabase(databaseName);
     }
     
     /**
@@ -124,7 +124,7 @@ public final class ContextManager implements AutoCloseable {
         }
         metaDataContexts.getMetaData().dropDatabase(databaseName);
         metaDataContexts.getOptimizerContext().dropDatabase(databaseName);
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().deleteDatabase(databaseName));
+        
metaDataContexts.getPersistService().getDatabaseMetaDataService().deleteDatabase(databaseName);
     }
     
     /**
@@ -208,7 +208,7 @@ public final class ContextManager implements AutoCloseable {
         
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(each
 -> 
each.addResource(metaDataContexts.getMetaData().getDatabases().get(databaseName)));
         
metaDataContexts.getOptimizerContext().alterDatabase(metaDataContexts.getMetaData().getDatabases().get(databaseName),
 metaDataContexts.getMetaData().getGlobalRuleMetaData());
         persistMetaData(metaDataContexts);
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDataSourceService().append(databaseName, 
toBeUpdatedDataSourcePropsMap));
+        
metaDataContexts.getPersistService().getDataSourceService().append(databaseName,
 toBeUpdatedDataSourcePropsMap);
         switchingResource.closeStaleDataSources();
     }
     
@@ -224,7 +224,7 @@ public final class ContextManager implements AutoCloseable {
         for (String each : toBeDroppedResourceNames) {
             dataSourceMap.remove(each);
         }
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDataSourceService().drop(databaseName, toBeDroppedResourceNames));
+        
metaDataContexts.getPersistService().getDataSourceService().drop(databaseName, 
toBeDroppedResourceNames);
     }
     
     /**
@@ -319,7 +319,7 @@ public final class ContextManager implements AutoCloseable {
     }
     
     private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData 
metaData, final OptimizerContext optimizerContext) {
-        return new 
MetaDataContexts(metaDataContexts.getPersistService().orElse(null), metaData, 
optimizerContext);
+        return new MetaDataContexts(metaDataContexts.getPersistService(), 
metaData, optimizerContext);
     }
     
     /**
@@ -364,7 +364,7 @@ public final class ContextManager implements AutoCloseable {
             MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(databaseName, switchingResource, null);
             Map<String, ShardingSphereSchema> toBeDeletedSchemas = 
getToBeDeletedSchemas(reloadedMetaDataContexts.getMetaData().getDatabases().get(databaseName));
             metaDataContexts = reloadedMetaDataContexts;
-            toBeDeletedSchemas.keySet().forEach(each -> 
reloadedMetaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().deleteSchema(databaseName, each)));
+            toBeDeletedSchemas.keySet().forEach(each -> 
reloadedMetaDataContexts.getPersistService().getDatabaseMetaDataService().deleteSchema(databaseName,
 each));
             persistMetaData(reloadedMetaDataContexts);
         } catch (final SQLException ex) {
             log.error("Reload database: {} failed", databaseName, ex);
@@ -378,7 +378,7 @@ public final class ContextManager implements AutoCloseable {
     
     private void persistMetaData(final MetaDataContexts metaDataContexts) {
         metaDataContexts.getMetaData().getDatabases().forEach((databaseName, 
schemas) -> schemas.getSchemas()
-                .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().persistMetaData(databaseName, schemaName, 
tables))));
+                .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(databaseName,
 schemaName, tables)));
     }
     
     /**
@@ -393,10 +393,10 @@ public final class ContextManager implements 
AutoCloseable {
             ShardingSphereSchema reloadedSchema = loadSchema(databaseName, 
schemaName, dataSourceName);
             if (null == reloadedSchema) {
                 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas().remove(schemaName);
-                metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().deleteSchema(databaseName, schemaName));
+                
metaDataContexts.getPersistService().getDatabaseMetaDataService().deleteSchema(databaseName,
 schemaName);
             } else {
                 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas().put(schemaName,
 reloadedSchema);
-                metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().persistMetaData(databaseName, schemaName, 
reloadedSchema));
+                
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(databaseName,
 schemaName, reloadedSchema);
             }
         } catch (final SQLException ex) {
             log.error("Reload meta data of database: {} schema: {} with data 
source: {} failed", databaseName, schemaName, dataSourceName, ex);
@@ -453,7 +453,7 @@ public final class ContextManager implements AutoCloseable {
         ShardingSphereSchema schema = 
GenericSchemaBuilder.build(Collections.singletonList(tableName), 
materials).getOrDefault(schemaName, new ShardingSphereSchema());
         if (schema.containsTable(tableName)) {
             database.getSchemas().get(schemaName).put(tableName, 
schema.get(tableName));
-            metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().persistMetaData(databaseName, schemaName, 
database.getSchemas().get(schemaName)));
+            
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(databaseName,
 schemaName, database.getSchemas().get(schemaName));
         }
     }
     
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
index b83edfd4528..16093035756 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
@@ -24,8 +24,6 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 
-import java.util.Optional;
-
 /**
  * Meta data contexts.
  */
@@ -39,20 +37,8 @@ public final class MetaDataContexts implements AutoCloseable 
{
     
     private final OptimizerContext optimizerContext;
     
-    /**
-     * Get persist service.
-     *
-     * @return persist service
-     */
-    public Optional<MetaDataPersistService> getPersistService() {
-        return Optional.ofNullable(persistService);
-    }
-    
     @Override
     public void close() throws Exception {
-        if (null != persistService) {
-            persistService.getRepository().close();
-        }
         
metaData.getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(ResourceHeldRule::closeStaleResource);
         metaData.getDatabases().values().forEach(each -> 
each.getRuleMetaData().findRules(ResourceHeldRule.class).forEach(ResourceHeldRule::closeStaleResource));
     }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 696ef40facf..9a763394b7b 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -218,7 +218,7 @@ public final class ContextManagerTest {
         databases.put("foo_db", new ShardingSphereDatabase("foo_db", new 
MySQLDatabaseType(), resource, mock(ShardingSphereRuleMetaData.class), 
Collections.emptyMap()));
         
when(metaDataContexts.getMetaData().getDatabases()).thenReturn(databases);
         
when(metaDataContexts.getMetaData().getGlobalRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.emptyList()));
-        
when(metaDataContexts.getPersistService()).thenReturn(Optional.of(mock(MetaDataPersistService.class,
 RETURNS_DEEP_STUBS)));
+        
when(metaDataContexts.getPersistService()).thenReturn(mock(MetaDataPersistService.class,
 RETURNS_DEEP_STUBS));
         // TODO TransactionRule is global rule, do not use it in database rule 
test
         RuleConfiguration ruleConfig = new 
TransactionRuleConfiguration("LOCAL", null, new Properties());
         contextManager.alterRuleConfiguration("foo_db", 
Collections.singleton(ruleConfig));
@@ -271,9 +271,9 @@ public final class ContextManagerTest {
     public void assertReloadDatabase() {
         
when(metaDataContexts.getMetaData().getDatabases().get("foo_db").getResource().getDataSources()).thenReturn(Collections.singletonMap("foo_ds",
 new MockedDataSource()));
         DatabaseMetaDataPersistService databaseMetaDataPersistService = 
mock(DatabaseMetaDataPersistService.class, RETURNS_DEEP_STUBS);
-        MetaDataPersistService metaDataPersistService = 
mock(MetaDataPersistService.class);
-        
when(metaDataPersistService.getDatabaseMetaDataService()).thenReturn(databaseMetaDataPersistService);
-        
when(metaDataContexts.getPersistService()).thenReturn(Optional.of(metaDataPersistService));
+        MetaDataPersistService persistService = 
mock(MetaDataPersistService.class);
+        
when(persistService.getDatabaseMetaDataService()).thenReturn(databaseMetaDataPersistService);
+        when(metaDataContexts.getPersistService()).thenReturn(persistService);
         contextManager.reloadDatabase("foo_db");
         verify(databaseMetaDataPersistService, 
times(1)).deleteSchema(eq("foo_db"), eq("foo_schema"));
         verify(databaseMetaDataPersistService, 
times(1)).persistMetaData(eq("foo_db"), eq("foo_db"), 
any(ShardingSphereSchema.class));
@@ -282,8 +282,8 @@ public final class ContextManagerTest {
     @Test
     public void assertReloadTable() {
         
when(metaDataContexts.getMetaData().getDatabases().get("foo_db").getResource().getDataSources()).thenReturn(Collections.singletonMap("foo_ds",
 new MockedDataSource()));
-        MetaDataPersistService metaDataPersistService = 
mock(MetaDataPersistService.class);
-        
when(metaDataContexts.getPersistService()).thenReturn(Optional.of(metaDataPersistService));
+        MetaDataPersistService persistService = 
mock(MetaDataPersistService.class);
+        when(metaDataContexts.getPersistService()).thenReturn(persistService);
         contextManager.reloadTable("foo_db", "foo_schema", "foo_table");
         
assertTrue(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("foo_db").getResource().getDataSources().containsKey("foo_ds"));
     }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index c233ac1b4a9..e7fccb980ef 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -109,7 +109,7 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
     
     private void persistMetaData(final MetaDataContexts metaDataContexts) {
         metaDataContexts.getMetaData().getDatabases().forEach((databaseName, 
schemas) -> schemas.getSchemas()
-                .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseMetaDataService().persistMetaData(databaseName, schemaName, 
tables))));
+                .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(databaseName,
 schemaName, tables)));
     }
     
     private InstanceContext buildInstanceContext(final RegistryCenter 
registryCenter, final InstanceMetaData instanceMetaData, final 
ModeConfiguration modeConfig) {
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
index 5ec0a8e0dde..62fff7ebbe2 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
@@ -137,8 +137,7 @@ public final class ClusterContextManagerCoordinatorTest {
     @Before
     public void setUp() throws SQLException {
         contextManager = new 
ClusterContextManagerBuilder().build(createContextManagerBuilderParameter());
-        
assertTrue(contextManager.getMetaDataContexts().getPersistService().isPresent());
-        contextManager.renewMetaDataContexts(new 
MetaDataContexts(contextManager.getMetaDataContexts().getPersistService().get(),
+        contextManager.renewMetaDataContexts(new 
MetaDataContexts(contextManager.getMetaDataContexts().getPersistService(),
                 new ShardingSphereMetaData(createDatabases(), 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData(), new 
ConfigurationProperties(new Properties())),
                 createOptimizerContext()));
         coordinator = new ClusterContextManagerCoordinator(persistService, new 
RegistryCenter(mock(ClusterPersistRepository.class), new EventBusContext()), 
contextManager);
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilderTextTest.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilderTextTest.java
index 2911ac563bb..26b3b5cf9ed 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilderTextTest.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilderTextTest.java
@@ -39,7 +39,6 @@ import java.util.Properties;
 import java.util.UUID;
 
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 
 public final class StandaloneContextManagerBuilderTextTest {
@@ -48,8 +47,7 @@ public final class StandaloneContextManagerBuilderTextTest {
     public void assertBuild() throws SQLException {
         ContextManager actual = new 
StandaloneContextManagerBuilder().build(createContextManagerBuilderParameter());
         
assertNotNull(actual.getMetaDataContexts().getMetaData().getDatabases().get("foo_db"));
-        
assertTrue(actual.getMetaDataContexts().getPersistService().isPresent());
-        PersistRepository repository = 
actual.getMetaDataContexts().getPersistService().get().getRepository();
+        PersistRepository repository = 
actual.getMetaDataContexts().getPersistService().getRepository();
         assertNotNull(repository.get(GlobalNode.getGlobalRuleNode()));
         
assertNotNull(repository.get(DatabaseMetaDataNode.getMetaDataDataSourcePath("foo_db",
 "0")));
         
assertNotNull(repository.get(DatabaseMetaDataNode.getRulePath("foo_db", "0")));
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/queryable/ShowReadwriteSplittingReadResourcesHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/queryable/ShowReadwriteSplittingReadResourcesHandler.java
index 065191ee1ca..8380fc14164 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/queryable/ShowReadwriteSplittingReadResourcesHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/queryable/ShowReadwriteSplittingReadResourcesHandler.java
@@ -71,7 +71,7 @@ public final class ShowReadwriteSplittingReadResourcesHandler 
extends QueryableR
         MetaDataContexts metaDataContexts = 
contextManager.getMetaDataContexts();
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabases().get(databaseName);
         Collection<String> allReadResources = getAllReadResources(database);
-        Map<String, StorageNodeDataSource> persistentReadResources = 
getPersistentReadResources(databaseName, 
metaDataContexts.getPersistService().orElse(null));
+        Map<String, StorageNodeDataSource> persistentReadResources = 
getPersistentReadResources(databaseName, metaDataContexts.getPersistService());
         return buildRows(allReadResources, persistentReadResources);
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterSQLParserRuleHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterSQLParserRuleHandler.java
index 721be67f3ff..cf0bdb61e71 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterSQLParserRuleHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterSQLParserRuleHandler.java
@@ -68,6 +68,6 @@ public final class AlterSQLParserRuleHandler extends 
UpdatableRALBackendHandler<
     
     private void persistNewRuleConfigurations() {
         MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true));
+        
metaDataContexts.getPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterTrafficRuleHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterTrafficRuleHandler.java
index 405a6d1e5ae..75f5f06f569 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterTrafficRuleHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterTrafficRuleHandler.java
@@ -144,6 +144,6 @@ public final class AlterTrafficRuleHandler extends 
UpdatableRALBackendHandler<Al
     
     private void persistNewRuleConfigurations() {
         MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true));
+        
metaDataContexts.getPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterTransactionRuleHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterTransactionRuleHandler.java
index e4373aa1d56..91a0f2c1a78 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterTransactionRuleHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/AlterTransactionRuleHandler.java
@@ -58,6 +58,6 @@ public final class AlterTransactionRuleHandler extends 
UpdatableRALBackendHandle
     
     private void persistNewRuleConfigurations() {
         MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true));
+        
metaDataContexts.getPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/CreateTrafficRuleHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/CreateTrafficRuleHandler.java
index 3c2fa978dcb..b40caeb435b 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/CreateTrafficRuleHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/CreateTrafficRuleHandler.java
@@ -126,6 +126,6 @@ public final class CreateTrafficRuleHandler extends 
UpdatableRALBackendHandler<C
     
     private void persistNewRuleConfigurations() {
         MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true));
+        
metaDataContexts.getPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/DropTrafficRuleHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/DropTrafficRuleHandler.java
index 7bb828e5879..a0f6e74a0a9 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/DropTrafficRuleHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/DropTrafficRuleHandler.java
@@ -110,6 +110,6 @@ public final class DropTrafficRuleHandler extends 
UpdatableRALBackendHandler<Dro
     
     private void persistNewRuleConfigurations() {
         MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true));
+        
metaDataContexts.getPersistService().getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 true);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
index 2843a88af7f..1eaa9a484c7 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
@@ -171,6 +171,6 @@ public final class ImportDatabaseConfigurationHandler 
extends UpdatableRALBacken
         }
         database.getRuleMetaData().getConfigurations().addAll(ruleConfigs);
         
ProxyContext.getInstance().getContextManager().renewMetaDataContexts(metaDataContexts);
-        metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getDatabaseRulePersistService().persist(databaseName, ruleConfigs));
+        
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(databaseName,
 ruleConfigs);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/LabelInstanceHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/LabelInstanceHandler.java
index dae3cdc2042..91db18f1849 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/LabelInstanceHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/LabelInstanceHandler.java
@@ -38,7 +38,7 @@ public final class LabelInstanceHandler extends 
UpdatableRALBackendHandler<Label
     
     @Override
     public void update(final ContextManager contextManager) {
-        MetaDataPersistService persistService = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService().orElse(null);
+        MetaDataPersistService persistService = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
         if (null == persistService || null == persistService.getRepository() 
|| persistService.getRepository() instanceof StandalonePersistRepository) {
             throw new UnsupportedOperationException("Labels can only be added 
in cluster mode");
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetReadwriteSplittingStatusHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetReadwriteSplittingStatusHandler.java
index 2f9595e3b5e..60eb18ac3f4 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetReadwriteSplittingStatusHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetReadwriteSplittingStatusHandler.java
@@ -87,9 +87,6 @@ public final class SetReadwriteSplittingStatusHandler extends 
UpdatableRALBacken
         if (!contextManager.getInstanceContext().isCluster()) {
             throw new UnsupportedOperationException("Mode must be `Cluster`.");
         }
-        if 
(!contextManager.getMetaDataContexts().getPersistService().isPresent()) {
-            throw new UnsupportedOperationException("Persistence must be 
configured");
-        }
     }
     
     private void checkDatabaseName(final String databaseName) {
@@ -117,14 +114,9 @@ public final class SetReadwriteSplittingStatusHandler 
extends UpdatableRALBacken
     }
     
     private Map<String, String> getDisabledResources(final ContextManager 
contextManager, final String databaseName) {
-        Optional<MetaDataPersistService> persistService = 
contextManager.getMetaDataContexts().getPersistService();
-        Map<String, String> result = new HashMap<>();
-        persistService.ifPresent(optional -> {
-            Map<String, String> disableNodes = 
getDisabledStorageNodes(databaseName, optional).stream()
-                    
.collect(Collectors.toMap(QualifiedDatabase::getDataSourceName, 
QualifiedDatabase::getGroupName, (value1, value2) -> String.join(",", value1, 
value2)));
-            result.putAll(disableNodes);
-        });
-        return result;
+        MetaDataPersistService persistService = 
contextManager.getMetaDataContexts().getPersistService();
+        return getDisabledStorageNodes(databaseName, persistService).stream()
+                
.collect(Collectors.toMap(QualifiedDatabase::getDataSourceName, 
QualifiedDatabase::getGroupName, (value1, value2) -> String.join(",", value1, 
value2)));
     }
     
     private void checkEnable(final ContextManager contextManager, final String 
databaseName, final Map<String, String> disabledResources, final String 
toBeEnabledResource) throws DistSQLException {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetVariableHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetVariableHandler.java
index 9cc03b1883e..d9a0e82f544 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetVariableHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetVariableHandler.java
@@ -34,7 +34,6 @@ import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.common.exception
 import org.apache.shardingsphere.proxy.backend.util.SystemPropertyUtil;
 import org.apache.shardingsphere.transaction.core.TransactionType;
 
-import java.util.Optional;
 import java.util.Properties;
 
 /**
@@ -65,19 +64,18 @@ public final class SetVariableHandler extends 
UpdatableRALBackendHandler<SetVari
     private void handleConfigurationProperty(final ConfigurationPropertyKey 
propertyKey, final String value) {
         ContextManager contextManager = 
ProxyContext.getInstance().getContextManager();
         MetaDataContexts metaDataContexts = 
contextManager.getMetaDataContexts();
-        Optional<MetaDataPersistService> metaDataPersistService = 
metaDataContexts.getPersistService();
+        MetaDataPersistService persistService = 
metaDataContexts.getPersistService();
         Properties props = new 
Properties(metaDataContexts.getMetaData().getProps().getProps());
         props.put(propertyKey.getKey(), getValue(propertyKey, value));
         contextManager.alterProperties(props);
-        if (metaDataPersistService.isPresent() && null != 
metaDataPersistService.get().getPropsService()) {
-            metaDataPersistService.get().getPropsService().persist(props, 
true);
+        if (null != persistService.getPropsService()) {
+            persistService.getPropsService().persist(props, true);
         }
     }
     
     private Object getValue(final ConfigurationPropertyKey propertyKey, final 
String value) {
         try {
-            TypedPropertyValue propertyValue = new 
TypedPropertyValue(propertyKey, value);
-            return propertyValue.getValue();
+            return new TypedPropertyValue(propertyKey, value).getValue();
         } catch (TypedPropertyValueException ex) {
             throw new InvalidValueException(value);
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/UnlabelInstanceHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/UnlabelInstanceHandler.java
index 76fafd3fe18..a1c64c66e76 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/UnlabelInstanceHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/UnlabelInstanceHandler.java
@@ -40,8 +40,8 @@ public final class UnlabelInstanceHandler extends 
UpdatableRALBackendHandler<Unl
     
     @Override
     protected void update(final ContextManager contextManager) throws 
DistSQLException {
-        MetaDataPersistService persistService = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService().orElse(null);
-        if (null == persistService || null == persistService.getRepository() 
|| persistService.getRepository() instanceof StandalonePersistRepository) {
+        MetaDataPersistService persistService = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
+        if (null == persistService.getRepository() || 
persistService.getRepository() instanceof StandalonePersistRepository) {
             throw new UnsupportedOperationException("Labels can only be 
removed in cluster mode");
         }
         String instanceId = getSqlStatement().getInstanceId();
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index e1b40e160ff..798545b0db4 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -150,14 +150,12 @@ public final class RuleDefinitionBackendHandler<T extends 
RuleDefinitionStatemen
     
     private void prepareScaling(final ShardingSphereDatabase database, final T 
sqlStatement, final RuleDefinitionAlterUpdater<?, ?> updater, final 
RuleConfiguration currentRuleConfig,
                                 final RuleDefinitionAlterPreprocessor<?> 
preprocessor) {
-        Optional<MetaDataPersistService> metaDataPersistService = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
-        if (metaDataPersistService.isPresent()) {
-            Optional<String> newVersion = 
metaDataPersistService.get().getDatabaseVersionPersistService().createNewVersion(database.getName());
-            if (!newVersion.isPresent()) {
-                throw new RuntimeException(String.format("Unable to get a new 
version for database: %s", database.getName()));
-            }
-            persistRuleConfigurationChange(metaDataPersistService.get(), 
newVersion.get(), database, currentRuleConfig, 
getAlteredRuleConfig(sqlStatement, updater, currentRuleConfig, preprocessor));
+        MetaDataPersistService persistService = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
+        Optional<String> newVersion = 
persistService.getDatabaseVersionPersistService().createNewVersion(database.getName());
+        if (!newVersion.isPresent()) {
+            throw new RuntimeException(String.format("Unable to get a new 
version for database: %s", database.getName()));
         }
+        persistRuleConfigurationChange(persistService, newVersion.get(), 
database, currentRuleConfig, getAlteredRuleConfig(sqlStatement, updater, 
currentRuleConfig, preprocessor));
     }
     
     private void persistRuleConfigurationChange(final MetaDataPersistService 
persistService, final String version, final ShardingSphereDatabase database,
@@ -170,7 +168,7 @@ public final class RuleDefinitionBackendHandler<T extends 
RuleDefinitionStatemen
     }
     
     private void persistRuleConfigurationChange(final String databaseName, 
final Collection<RuleConfiguration> alteredConfigs) {
-        
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService().ifPresent(optional
 -> optional.getDatabaseRulePersistService().persist(databaseName, 
alteredConfigs));
+        
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persist(databaseName,
 alteredConfigs);
     }
     
     private RuleConfiguration getAlteredRuleConfig(final T sqlStatement, final 
RuleDefinitionAlterUpdater updater,
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetVariableExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetVariableExecutorTest.java
index 84d0d470613..52cbe936677 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetVariableExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/SetVariableExecutorTest.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerCon
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
@@ -70,7 +71,7 @@ public final class SetVariableExecutorTest extends 
ProxyContextRestorer {
     
     @Test
     public void assertExecuteWithConfigurationKey() throws SQLException {
-        ContextManager contextManager = new ContextManager(new 
MetaDataContexts(null, new ShardingSphereMetaData(), 
mock(OptimizerContext.class)), null);
+        ContextManager contextManager = new ContextManager(new 
MetaDataContexts(mock(MetaDataPersistService.class), new 
ShardingSphereMetaData(), mock(OptimizerContext.class)), null);
         ProxyContext.init(contextManager);
         SetVariableStatement statement = new 
SetVariableStatement("proxy_frontend_flush_threshold", "1024");
         SetVariableHandler handler = new SetVariableHandler();

Reply via email to