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

zhangliang 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 18e8bd7884c Refactor MetaDataContexts (#34353)
18e8bd7884c is described below

commit 18e8bd7884c927a051be075703e78bf6b8a912f4
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jan 14 20:38:19 2025 +0800

    Refactor MetaDataContexts (#34353)
    
    * Refactor MetaDataContexts
---
 .../mode/manager/ContextManager.java               | 35 ++++-----------
 .../mode/metadata/MetaDataContextManager.java      | 26 ++++++-----
 .../mode/metadata/MetaDataContexts.java            | 51 +++++++++++++++++++---
 .../manager/DatabaseRuleConfigurationManager.java  | 16 +++----
 .../manager/GlobalConfigurationManager.java        | 35 +++++++--------
 .../mode/metadata/manager/RuleItemManager.java     | 17 ++++----
 .../metadata/manager/SchemaMetaDataManager.java    | 39 ++++++++---------
 .../manager/ShardingSphereDatabaseDataManager.java | 45 ++++++++++---------
 .../mode/metadata/manager/StorageUnitManager.java  | 22 +++++-----
 .../mode/manager/ContextManagerTest.java           |  7 ---
 .../manager/SchemaMetaDataManagerTest.java         |  3 +-
 .../ClusterMetaDataManagerPersistService.java      | 18 ++++----
 .../ClusterMetaDataManagerPersistServiceTest.java  |  4 +-
 .../StandaloneMetaDataManagerPersistService.java   | 46 +++++++++----------
 ...tandaloneMetaDataManagerPersistServiceTest.java |  8 ++--
 15 files changed, 190 insertions(+), 182 deletions(-)

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 22cbe2a9500..e02a1e7a5ae 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
@@ -44,7 +44,6 @@ import 
org.apache.shardingsphere.mode.state.ClusterStateContext;
 import java.sql.SQLException;
 import java.util.Collections;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Context manager.
@@ -53,7 +52,7 @@ import java.util.concurrent.atomic.AtomicReference;
 @Slf4j
 public final class ContextManager implements AutoCloseable {
     
-    private final AtomicReference<MetaDataContexts> metaDataContexts;
+    private final MetaDataContexts metaDataContexts;
     
     private final ComputeNodeInstanceContext computeNodeInstanceContext;
     
@@ -68,9 +67,9 @@ public final class ContextManager implements AutoCloseable {
     private final PersistCoordinatorFacade persistCoordinatorFacade;
     
     public ContextManager(final MetaDataContexts metaDataContexts, final 
ComputeNodeInstanceContext computeNodeInstanceContext, final PersistRepository 
repository) {
-        this.metaDataContexts = new AtomicReference<>(metaDataContexts);
+        this.metaDataContexts = metaDataContexts;
         this.computeNodeInstanceContext = computeNodeInstanceContext;
-        metaDataContextManager = new 
MetaDataContextManager(this.metaDataContexts, computeNodeInstanceContext, 
repository);
+        metaDataContextManager = new MetaDataContextManager(metaDataContexts, 
computeNodeInstanceContext, repository);
         persistServiceFacade = new PersistServiceFacade(repository, 
computeNodeInstanceContext.getModeConfiguration(), metaDataContextManager);
         stateContext = new 
ClusterStateContext(persistServiceFacade.getStatePersistService().load());
         executorEngine = 
ExecutorEngine.createExecutorEngineWithSize(metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE));
@@ -80,24 +79,6 @@ public final class ContextManager implements AutoCloseable {
         persistCoordinatorFacade = new PersistCoordinatorFacade(repository, 
computeNodeInstanceContext.getModeConfiguration());
     }
     
-    /**
-     * Get meta data contexts.
-     *
-     * @return meta data contexts
-     */
-    public MetaDataContexts getMetaDataContexts() {
-        return metaDataContexts.get();
-    }
-    
-    /**
-     * Renew meta data contexts.
-     *
-     * @param metaDataContexts meta data contexts
-     */
-    public void renewMetaDataContexts(final MetaDataContexts metaDataContexts) 
{
-        this.metaDataContexts.set(metaDataContexts);
-    }
-    
     /**
      * Get database.
      *
@@ -146,7 +127,7 @@ public final class ContextManager implements AutoCloseable {
     private ShardingSphereSchema loadSchema(final ShardingSphereDatabase 
database, final String schemaName, final String dataSourceName) throws 
SQLException {
         database.reloadRules();
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(Collections.singletonMap(dataSourceName, 
database.getResourceMetaData().getStorageUnits().get(dataSourceName)),
-                database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
+                database.getRuleMetaData().getRules(), 
metaDataContexts.getMetaData().getProps(), schemaName);
         ShardingSphereSchema result = 
GenericSchemaBuilder.build(database.getProtocolType(), 
material).get(schemaName);
         
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load(database.getName(),
 schemaName).forEach(result::putView);
         return result;
@@ -161,7 +142,7 @@ public final class ContextManager implements AutoCloseable {
      */
     public void reloadTable(final ShardingSphereDatabase database, final 
String schemaName, final String tableName) {
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(
-                database.getResourceMetaData().getStorageUnits(), 
database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
+                database.getResourceMetaData().getStorageUnits(), 
database.getRuleMetaData().getRules(), 
metaDataContexts.getMetaData().getProps(), schemaName);
         try {
             persistTable(database, schemaName, tableName, material);
         } catch (final SQLException ex) {
@@ -180,7 +161,7 @@ public final class ContextManager implements AutoCloseable {
     public void reloadTable(final ShardingSphereDatabase database, final 
String schemaName, final String dataSourceName, final String tableName) {
         StorageUnit storageUnit = 
database.getResourceMetaData().getStorageUnits().get(dataSourceName);
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(
-                Collections.singletonMap(dataSourceName, storageUnit), 
database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
+                Collections.singletonMap(dataSourceName, storageUnit), 
database.getRuleMetaData().getRules(), 
metaDataContexts.getMetaData().getProps(), schemaName);
         try {
             persistTable(database, schemaName, tableName, material);
         } catch (final SQLException ex) {
@@ -199,7 +180,7 @@ public final class ContextManager implements AutoCloseable {
      * @return pre-selected database name
      */
     public String getPreSelectedDatabaseName() {
-        return InstanceType.JDBC == 
computeNodeInstanceContext.getInstance().getMetaData().getType() ? 
metaDataContexts.get().getMetaData().getAllDatabases().iterator().next().getName()
 : null;
+        return InstanceType.JDBC == 
computeNodeInstanceContext.getInstance().getMetaData().getType() ? 
metaDataContexts.getMetaData().getAllDatabases().iterator().next().getName() : 
null;
     }
     
     @Override
@@ -208,7 +189,7 @@ public final class ContextManager implements AutoCloseable {
             each.onDestroyed(this);
         }
         executorEngine.close();
-        metaDataContexts.get().getMetaData().close();
+        metaDataContexts.getMetaData().close();
         persistServiceFacade.close(computeNodeInstanceContext.getInstance());
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
index 1440b2044bd..5e486c9e2c7 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
@@ -42,7 +42,6 @@ import 
org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Meta data context manager..
@@ -51,7 +50,7 @@ import java.util.concurrent.atomic.AtomicReference;
 @Slf4j
 public class MetaDataContextManager {
     
-    private final AtomicReference<MetaDataContexts> metaDataContexts;
+    private final MetaDataContexts metaDataContexts;
     
     private final ComputeNodeInstanceContext computeNodeInstanceContext;
     
@@ -71,7 +70,7 @@ public class MetaDataContextManager {
     
     private final GlobalConfigurationManager globalConfigurationManager;
     
-    public MetaDataContextManager(final AtomicReference<MetaDataContexts> 
metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext, 
final PersistRepository repository) {
+    public MetaDataContextManager(final MetaDataContexts metaDataContexts, 
final ComputeNodeInstanceContext computeNodeInstanceContext, final 
PersistRepository repository) {
         this.metaDataContexts = metaDataContexts;
         this.computeNodeInstanceContext = computeNodeInstanceContext;
         resourceSwitchManager = new ResourceSwitchManager();
@@ -101,7 +100,8 @@ public class MetaDataContextManager {
      * @param metaDataContexts meta data contexts
      */
     public void renewMetaDataContexts(final MetaDataContexts metaDataContexts) 
{
-        this.metaDataContexts.set(metaDataContexts);
+        this.metaDataContexts.setMetaData(metaDataContexts.getMetaData());
+        this.metaDataContexts.setStatistics(metaDataContexts.getStatistics());
     }
     
     /**
@@ -112,8 +112,9 @@ public class MetaDataContextManager {
     public void forceRefreshDatabaseMetaData(final ShardingSphereDatabase 
database) {
         try {
             MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
-            metaDataContexts.set(reloadedMetaDataContexts);
-            
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getAllSchemas()
+            
metaDataContexts.setMetaData(reloadedMetaDataContexts.getMetaData());
+            
metaDataContexts.setStatistics(reloadedMetaDataContexts.getStatistics());
+            
metaDataContexts.getMetaData().getDatabase(database.getName()).getAllSchemas()
                     .forEach(each -> {
                         if (each.isEmpty()) {
                             
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(database.getName(),
 each.getName());
@@ -134,8 +135,9 @@ public class MetaDataContextManager {
         try {
             MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
             dropSchemas(database.getName(), 
reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), 
database);
-            metaDataContexts.set(reloadedMetaDataContexts);
-            
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getAllSchemas()
+            
metaDataContexts.setMetaData(reloadedMetaDataContexts.getMetaData());
+            
metaDataContexts.setStatistics(reloadedMetaDataContexts.getStatistics());
+            
metaDataContexts.getMetaData().getDatabase(database.getName()).getAllSchemas()
                     .forEach(each -> 
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().alterByRefresh(database.getName(),
 each));
         } catch (final SQLException ex) {
             log.error("Refresh table meta data: {} failed", 
database.getName(), ex);
@@ -147,13 +149,13 @@ public class MetaDataContextManager {
         SwitchingResource switchingResource = 
resourceSwitchManager.switchByAlterStorageUnit(database.getResourceMetaData(), 
dataSourcePoolPropsFromRegCenter);
         Collection<RuleConfiguration> ruleConfigs = 
metaDataPersistService.getDatabaseRulePersistService().load(database.getName());
         ShardingSphereDatabase changedDatabase = MetaDataContextsFactory
-                .createChangedDatabase(database.getName(), false, 
switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService, 
computeNodeInstanceContext);
-        metaDataContexts.get().getMetaData().putDatabase(changedDatabase);
+                .createChangedDatabase(database.getName(), false, 
switchingResource, ruleConfigs, metaDataContexts, metaDataPersistService, 
computeNodeInstanceContext);
+        metaDataContexts.getMetaData().putDatabase(changedDatabase);
         ConfigurationProperties props = new 
ConfigurationProperties(metaDataPersistService.getPropsService().load());
         Collection<RuleConfiguration> globalRuleConfigs = 
metaDataPersistService.getGlobalRuleService().load();
-        RuleMetaData changedGlobalMetaData = new 
RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, 
metaDataContexts.get().getMetaData().getAllDatabases(), props));
+        RuleMetaData changedGlobalMetaData = new 
RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, 
metaDataContexts.getMetaData().getAllDatabases(), props));
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                metaDataContexts.get().getMetaData().getAllDatabases(), 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props);
+                metaDataContexts.getMetaData().getAllDatabases(), 
metaDataContexts.getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props);
         MetaDataContexts result = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         switchingResource.closeStaleDataSources();
         return result;
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 569d038c170..a16e6b0b053 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
@@ -17,19 +17,58 @@
 
 package org.apache.shardingsphere.mode.metadata;
 
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 
+import java.util.concurrent.atomic.AtomicReference;
+
 /**
  * Meta data contexts.
  */
-@RequiredArgsConstructor
-@Getter
 public final class MetaDataContexts {
     
-    private final ShardingSphereMetaData metaData;
+    private final AtomicReference<ShardingSphereMetaData> metaData = new 
AtomicReference<>();
+    
+    private final AtomicReference<ShardingSphereStatistics> statistics = new 
AtomicReference<>();
+    
+    public MetaDataContexts(final ShardingSphereMetaData metaData, final 
ShardingSphereStatistics statistics) {
+        this.metaData.set(metaData);
+        this.statistics.set(statistics);
+    }
+    
+    /**
+     * Get ShardingSphere meta data.
+     *
+     * @return got meta data
+     */
+    public ShardingSphereMetaData getMetaData() {
+        return metaData.get();
+    }
+    
+    /**
+     * Set ShardingSphere meta data.
+     *
+     * @param metaData meta data
+     */
+    public void setMetaData(final ShardingSphereMetaData metaData) {
+        this.metaData.set(metaData);
+    }
+    
+    /**
+     * Get ShardingSphere statistics.
+     *
+     * @return got meta data statistics
+     */
+    public ShardingSphereStatistics getStatistics() {
+        return statistics.get();
+    }
     
-    private final ShardingSphereStatistics statistics;
+    /**
+     * Set ShardingSphere statistics.
+     *
+     * @param statistics statistics
+     */
+    public void setStatistics(final ShardingSphereStatistics statistics) {
+        this.statistics.set(statistics);
+    }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
index 9f32b360e12..20241cf0dd3 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
@@ -26,16 +26,15 @@ import 
org.apache.shardingsphere.infra.rule.PartialRuleUpdateSupported;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Optional;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 /**
@@ -43,13 +42,13 @@ import java.util.stream.Collectors;
  */
 public final class DatabaseRuleConfigurationManager {
     
-    private final AtomicReference<MetaDataContexts> metaDataContexts;
+    private final MetaDataContexts metaDataContexts;
     
     private final ComputeNodeInstanceContext computeNodeInstanceContext;
     
     private final MetaDataPersistService metaDataPersistService;
     
-    public DatabaseRuleConfigurationManager(final 
AtomicReference<MetaDataContexts> metaDataContexts, final 
ComputeNodeInstanceContext computeNodeInstanceContext,
+    public DatabaseRuleConfigurationManager(final MetaDataContexts 
metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
                                             final PersistRepository 
repository) {
         this.metaDataContexts = metaDataContexts;
         this.computeNodeInstanceContext = computeNodeInstanceContext;
@@ -65,7 +64,7 @@ public final class DatabaseRuleConfigurationManager {
      */
     @SuppressWarnings({"unchecked", "rawtypes"})
     public synchronized void alterRuleConfiguration(final String databaseName, 
final RuleConfiguration ruleConfig) throws SQLException {
-        ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
+        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
         Collection<ShardingSphereRule> rules = new 
LinkedList<>(database.getRuleMetaData().getRules());
         Optional<ShardingSphereRule> toBeChangedRule = 
rules.stream().filter(each -> 
each.getConfiguration().getClass().equals(ruleConfig.getClass())).findFirst();
         if (toBeChangedRule.isPresent() && toBeChangedRule.get() instanceof 
PartialRuleUpdateSupported && ((PartialRuleUpdateSupported) 
toBeChangedRule.get()).partialUpdate(ruleConfig)) {
@@ -87,7 +86,7 @@ public final class DatabaseRuleConfigurationManager {
      */
     @SuppressWarnings({"unchecked", "rawtypes"})
     public synchronized void dropRuleConfiguration(final String databaseName, 
final RuleConfiguration ruleConfig) throws SQLException {
-        ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
+        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
         Collection<ShardingSphereRule> rules = new 
LinkedList<>(database.getRuleMetaData().getRules());
         Optional<ShardingSphereRule> toBeChangedRule = 
rules.stream().filter(each -> 
each.getConfiguration().getClass().equals(ruleConfig.getClass())).findFirst();
         if (toBeChangedRule.isPresent() && toBeChangedRule.get() instanceof 
PartialRuleUpdateSupported && ((PartialRuleUpdateSupported) 
toBeChangedRule.get()).partialUpdate(ruleConfig)) {
@@ -104,8 +103,9 @@ public final class DatabaseRuleConfigurationManager {
     
     private void refreshMetadata(final String databaseName, final 
Collection<RuleConfiguration> ruleConfigurations) throws SQLException {
         MetaDataContexts reloadMetaDataContexts = 
MetaDataContextsFactory.createByAlterRule(databaseName, false,
-                ruleConfigurations, metaDataContexts.get(), 
metaDataPersistService, computeNodeInstanceContext);
-        metaDataContexts.set(reloadMetaDataContexts);
+                ruleConfigurations, metaDataContexts, metaDataPersistService, 
computeNodeInstanceContext);
+        metaDataContexts.setMetaData(reloadMetaDataContexts.getMetaData());
+        metaDataContexts.setStatistics(reloadMetaDataContexts.getStatistics());
     }
     
     private Collection<RuleConfiguration> getRuleConfigurations(final 
Collection<ShardingSphereRule> rules) {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
index 9d5a1ffd334..08e8de88236 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
@@ -29,15 +29,14 @@ import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigur
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 import 
org.apache.shardingsphere.mode.node.tuple.annotation.RepositoryTupleEntity;
+import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 import org.apache.shardingsphere.transaction.rule.TransactionRule;
 
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Objects;
 import java.util.Properties;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Global configuration manager.
@@ -45,11 +44,11 @@ import java.util.concurrent.atomic.AtomicReference;
 @Slf4j
 public final class GlobalConfigurationManager {
     
-    private final AtomicReference<MetaDataContexts> metaDataContexts;
+    private final MetaDataContexts metaDataContexts;
     
     private final MetaDataPersistService metaDataPersistService;
     
-    public GlobalConfigurationManager(final AtomicReference<MetaDataContexts> 
metaDataContexts, final PersistRepository repository) {
+    public GlobalConfigurationManager(final MetaDataContexts metaDataContexts, 
final PersistRepository repository) {
         this.metaDataContexts = metaDataContexts;
         metaDataPersistService = new MetaDataPersistService(repository);
     }
@@ -64,14 +63,15 @@ public final class GlobalConfigurationManager {
             return;
         }
         closeStaleTransactionRule(ruleConfig);
-        Collection<ShardingSphereRule> rules = new 
LinkedList<>(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules());
+        Collection<ShardingSphereRule> rules = new 
LinkedList<>(metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules());
         rules.removeIf(each -> 
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
-        rules.addAll(GlobalRulesBuilder.buildSingleRules(ruleConfig, 
metaDataContexts.get().getMetaData().getAllDatabases(), 
metaDataContexts.get().getMetaData().getProps()));
-        
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().clear();
-        
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
-        ShardingSphereMetaData toBeChangedMetaData = new 
ShardingSphereMetaData(metaDataContexts.get().getMetaData().getAllDatabases(),
-                
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
metaDataContexts.get().getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.get().getMetaData().getProps());
-        metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
+        rules.addAll(GlobalRulesBuilder.buildSingleRules(ruleConfig, 
metaDataContexts.getMetaData().getAllDatabases(), 
metaDataContexts.getMetaData().getProps()));
+        
metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules().clear();
+        
metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
+        ShardingSphereMetaData toBeChangedMetaData = new 
ShardingSphereMetaData(metaDataContexts.getMetaData().getAllDatabases(),
+                metaDataContexts.getMetaData().getGlobalResourceMetaData(), 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps());
+        metaDataContexts.setMetaData(toBeChangedMetaData);
+        
metaDataContexts.setStatistics(ShardingSphereStatisticsFactory.create(metaDataPersistService,
 toBeChangedMetaData));
     }
     
     // Optimize string comparison rule type.
@@ -81,7 +81,7 @@ public final class GlobalConfigurationManager {
         if 
(!"transaction".equals(Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RepositoryTupleEntity.class)).value()))
 {
             return;
         }
-        
metaDataContexts.get().getMetaData().getGlobalRuleMetaData().findSingleRule(TransactionRule.class).ifPresent(TransactionRule::close);
+        
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(TransactionRule.class).ifPresent(TransactionRule::close);
     }
     
     /**
@@ -90,12 +90,9 @@ public final class GlobalConfigurationManager {
      * @param props properties to be altered
      */
     public synchronized void alterProperties(final Properties props) {
-        ShardingSphereMetaData toBeChangedMetaData = new 
ShardingSphereMetaData(metaDataContexts.get().getMetaData().getAllDatabases(),
-                
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
metaDataContexts.get().getMetaData().getGlobalRuleMetaData(), new 
ConfigurationProperties(props));
-        metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
-    }
-    
-    private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData 
metaData) {
-        return new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
+        ShardingSphereMetaData toBeChangedMetaData = new 
ShardingSphereMetaData(metaDataContexts.getMetaData().getAllDatabases(),
+                metaDataContexts.getMetaData().getGlobalResourceMetaData(), 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), new 
ConfigurationProperties(props));
+        metaDataContexts.setMetaData(toBeChangedMetaData);
+        
metaDataContexts.setStatistics(ShardingSphereStatisticsFactory.create(metaDataPersistService,
 toBeChangedMetaData));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
index 4811f281365..7c6a5ec3d16 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
@@ -20,28 +20,27 @@ package org.apache.shardingsphere.mode.metadata.manager;
 import com.google.common.base.Preconditions;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
-import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
+import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
 
 import java.sql.SQLException;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Rule item manager.
  */
 public class RuleItemManager {
     
-    private final AtomicReference<MetaDataContexts> metaDataContexts;
+    private final MetaDataContexts metaDataContexts;
     
     private final DatabaseRuleConfigurationManager ruleConfigManager;
     
     private final MetaDataPersistService metaDataPersistService;
     
-    public RuleItemManager(final AtomicReference<MetaDataContexts> 
metaDataContexts, final PersistRepository repository, final 
DatabaseRuleConfigurationManager ruleConfigManager) {
+    public RuleItemManager(final MetaDataContexts metaDataContexts, final 
PersistRepository repository, final DatabaseRuleConfigurationManager 
ruleConfigManager) {
         this.metaDataContexts = metaDataContexts;
         this.ruleConfigManager = ruleConfigManager;
         metaDataPersistService = new MetaDataPersistService(repository);
@@ -61,7 +60,7 @@ public class RuleItemManager {
         String yamlContent = 
metaDataPersistService.getMetaDataVersionPersistService()
                 
.getVersionPathByActiveVersion(alterRuleItem.getActiveVersionKey(), 
alterRuleItem.getActiveVersion());
         String databaseName = alterRuleItem.getDatabaseName();
-        RuleConfiguration currentRuleConfig = 
processor.findRuleConfiguration(metaDataContexts.get().getMetaData().getDatabase(databaseName));
+        RuleConfiguration currentRuleConfig = 
processor.findRuleConfiguration(metaDataContexts.getMetaData().getDatabase(databaseName));
         synchronized (this) {
             processor.changeRuleItemConfiguration(alterRuleItem, 
currentRuleConfig, processor.swapRuleItemConfiguration(alterRuleItem, 
yamlContent));
             ruleConfigManager.alterRuleConfiguration(databaseName, 
currentRuleConfig);
@@ -77,9 +76,9 @@ public class RuleItemManager {
     @SuppressWarnings({"rawtypes", "unchecked"})
     public void dropRuleItem(final DropRuleItem dropRuleItem) throws 
SQLException {
         String databaseName = dropRuleItem.getDatabaseName();
-        
Preconditions.checkState(metaDataContexts.get().getMetaData().containsDatabase(databaseName),
 "No database '%s' exists.", databaseName);
+        
Preconditions.checkState(metaDataContexts.getMetaData().containsDatabase(databaseName),
 "No database '%s' exists.", databaseName);
         RuleItemConfigurationChangedProcessor processor = 
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class, 
dropRuleItem.getType());
-        RuleConfiguration currentRuleConfig = 
processor.findRuleConfiguration(metaDataContexts.get().getMetaData().getDatabase(databaseName));
+        RuleConfiguration currentRuleConfig = 
processor.findRuleConfiguration(metaDataContexts.getMetaData().getDatabase(databaseName));
         synchronized (this) {
             processor.dropRuleItemConfiguration(dropRuleItem, 
currentRuleConfig);
             ruleConfigManager.dropRuleConfiguration(databaseName, 
currentRuleConfig);
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
index 13f349d9df0..55259c61395 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
@@ -36,18 +36,17 @@ import 
org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 
 import java.util.Collections;
 import java.util.Optional;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Resource meta data manager.
  */
 public final class SchemaMetaDataManager {
     
-    private final AtomicReference<MetaDataContexts> metaDataContexts;
+    private final MetaDataContexts metaDataContexts;
     
     private final MetaDataPersistService metaDataPersistService;
     
-    public SchemaMetaDataManager(final AtomicReference<MetaDataContexts> 
metaDataContexts, final PersistRepository repository) {
+    public SchemaMetaDataManager(final MetaDataContexts metaDataContexts, 
final PersistRepository repository) {
         this.metaDataContexts = metaDataContexts;
         metaDataPersistService = new MetaDataPersistService(repository);
     }
@@ -58,13 +57,13 @@ public final class SchemaMetaDataManager {
      * @param databaseName to be added database name
      */
     public synchronized void addDatabase(final String databaseName) {
-        if 
(metaDataContexts.get().getMetaData().containsDatabase(databaseName)) {
+        if (metaDataContexts.getMetaData().containsDatabase(databaseName)) {
             return;
         }
-        DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), 
metaDataContexts.get().getMetaData().getProps());
-        metaDataContexts.get().getMetaData().addDatabase(databaseName, 
protocolType, metaDataContexts.get().getMetaData().getProps());
-        ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
-        metaDataContexts.set(new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData)));
+        DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), 
metaDataContexts.getMetaData().getProps());
+        metaDataContexts.getMetaData().addDatabase(databaseName, protocolType, 
metaDataContexts.getMetaData().getProps());
+        metaDataContexts.setMetaData(metaDataContexts.getMetaData());
+        
metaDataContexts.setStatistics(ShardingSphereStatisticsFactory.create(metaDataPersistService,
 metaDataContexts.getMetaData()));
     }
     
     /**
@@ -73,10 +72,10 @@ public final class SchemaMetaDataManager {
      * @param databaseName to be dropped database name
      */
     public synchronized void dropDatabase(final String databaseName) {
-        if 
(!metaDataContexts.get().getMetaData().containsDatabase(databaseName)) {
+        if (!metaDataContexts.getMetaData().containsDatabase(databaseName)) {
             return;
         }
-        
metaDataContexts.get().getMetaData().dropDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName).getName());
+        
metaDataContexts.getMetaData().dropDatabase(metaDataContexts.getMetaData().getDatabase(databaseName).getName());
     }
     
     /**
@@ -86,7 +85,7 @@ public final class SchemaMetaDataManager {
      * @param schemaName to be added schema name
      */
     public synchronized void addSchema(final String databaseName, final String 
schemaName) {
-        ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
+        ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         if (database.containsSchema(schemaName)) {
             return;
@@ -102,7 +101,7 @@ public final class SchemaMetaDataManager {
      * @param schemaName to be dropped schema name
      */
     public synchronized void dropSchema(final String databaseName, final 
String schemaName) {
-        ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
+        ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         if (!database.containsSchema(schemaName)) {
             return;
@@ -120,7 +119,7 @@ public final class SchemaMetaDataManager {
      * @param toBeChangedView to be changed view
      */
     public synchronized void alterSchema(final String databaseName, final 
String schemaName, final ShardingSphereTable toBeChangedTable, final 
ShardingSphereView toBeChangedView) {
-        ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
+        ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
         if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
             return;
         }
@@ -140,7 +139,7 @@ public final class SchemaMetaDataManager {
      * @param toBeDeletedViewName to be deleted view name
      */
     public synchronized void alterSchema(final String databaseName, final 
String schemaName, final String toBeDeletedTableName, final String 
toBeDeletedViewName) {
-        ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
+        ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
         if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
             return;
         }
@@ -152,7 +151,7 @@ public final class SchemaMetaDataManager {
     }
     
     private void alterTable(final String databaseName, final String 
schemaName, final ShardingSphereTable beBoChangedTable) {
-        ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
+        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
         if (TableRefreshUtils.isSingleTable(beBoChangedTable.getName(), 
database)) {
             database.reloadRules();
         }
@@ -160,7 +159,7 @@ public final class SchemaMetaDataManager {
     }
     
     private void alterView(final String databaseName, final String schemaName, 
final ShardingSphereView beBoChangedView) {
-        ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
+        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
         if (TableRefreshUtils.isSingleTable(beBoChangedView.getName(), 
database)) {
             database.reloadRules();
         }
@@ -168,14 +167,14 @@ public final class SchemaMetaDataManager {
     }
     
     private void dropTable(final String databaseName, final String schemaName, 
final String toBeDeletedTableName) {
-        
metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchema(schemaName).removeTable(toBeDeletedTableName);
-        metaDataContexts.get().getMetaData().getDatabase(databaseName)
+        
metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeTable(toBeDeletedTableName);
+        metaDataContexts.getMetaData().getDatabase(databaseName)
                 
.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each
 -> each.remove(schemaName, toBeDeletedTableName));
     }
     
     private void dropView(final String databaseName, final String schemaName, 
final String toBeDeletedViewName) {
-        
metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchema(schemaName).removeView(toBeDeletedViewName);
-        metaDataContexts.get().getMetaData().getDatabase(databaseName)
+        
metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeView(toBeDeletedViewName);
+        metaDataContexts.getMetaData().getDatabase(databaseName)
                 
.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each
 -> each.remove(schemaName, toBeDeletedViewName));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ShardingSphereDatabaseDataManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ShardingSphereDatabaseDataManager.java
index 773e72b0593..c0c2bb94d48 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ShardingSphereDatabaseDataManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ShardingSphereDatabaseDataManager.java
@@ -28,7 +28,6 @@ import 
org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * ShardingSphere database data manager.
@@ -36,7 +35,7 @@ import java.util.concurrent.atomic.AtomicReference;
 @RequiredArgsConstructor
 public final class ShardingSphereDatabaseDataManager {
     
-    private final AtomicReference<MetaDataContexts> metaDataContexts;
+    private final MetaDataContexts metaDataContexts;
     
     /**
      * Add ShardingSphere database data.
@@ -44,10 +43,10 @@ public final class ShardingSphereDatabaseDataManager {
      * @param databaseName database name
      */
     public synchronized void addShardingSphereDatabaseData(final String 
databaseName) {
-        if 
(metaDataContexts.get().getStatistics().containsDatabase(databaseName)) {
+        if (metaDataContexts.getStatistics().containsDatabase(databaseName)) {
             return;
         }
-        metaDataContexts.get().getStatistics().putDatabase(databaseName, new 
ShardingSphereDatabaseData());
+        metaDataContexts.getStatistics().putDatabase(databaseName, new 
ShardingSphereDatabaseData());
     }
     
     /**
@@ -56,10 +55,10 @@ public final class ShardingSphereDatabaseDataManager {
      * @param databaseName database name
      */
     public synchronized void dropShardingSphereDatabaseData(final String 
databaseName) {
-        if 
(!metaDataContexts.get().getStatistics().containsDatabase(databaseName)) {
+        if (!metaDataContexts.getStatistics().containsDatabase(databaseName)) {
             return;
         }
-        metaDataContexts.get().getStatistics().dropDatabase(databaseName);
+        metaDataContexts.getStatistics().dropDatabase(databaseName);
     }
     
     /**
@@ -69,10 +68,10 @@ public final class ShardingSphereDatabaseDataManager {
      * @param schemaName schema name
      */
     public synchronized void addShardingSphereSchemaData(final String 
databaseName, final String schemaName) {
-        if 
(metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName))
 {
+        if 
(metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName))
 {
             return;
         }
-        
metaDataContexts.get().getStatistics().getDatabase(databaseName).putSchema(schemaName,
 new ShardingSphereSchemaData());
+        
metaDataContexts.getStatistics().getDatabase(databaseName).putSchema(schemaName,
 new ShardingSphereSchemaData());
     }
     
     /**
@@ -82,7 +81,7 @@ public final class ShardingSphereDatabaseDataManager {
      * @param schemaName schema name
      */
     public synchronized void dropShardingSphereSchemaData(final String 
databaseName, final String schemaName) {
-        ShardingSphereDatabaseData databaseData = 
metaDataContexts.get().getStatistics().getDatabase(databaseName);
+        ShardingSphereDatabaseData databaseData = 
metaDataContexts.getStatistics().getDatabase(databaseName);
         if (null == databaseData || !databaseData.containsSchema(schemaName)) {
             return;
         }
@@ -97,13 +96,13 @@ public final class ShardingSphereDatabaseDataManager {
      * @param tableName table name
      */
     public synchronized void addShardingSphereTableData(final String 
databaseName, final String schemaName, final String tableName) {
-        if 
(!metaDataContexts.get().getStatistics().containsDatabase(databaseName) || 
!metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName))
 {
+        if (!metaDataContexts.getStatistics().containsDatabase(databaseName) 
|| 
!metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName))
 {
             return;
         }
-        if 
(metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName))
 {
+        if 
(metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName))
 {
             return;
         }
-        
metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).putTable(tableName,
 new ShardingSphereTableData(tableName));
+        
metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).putTable(tableName,
 new ShardingSphereTableData(tableName));
     }
     
     /**
@@ -114,10 +113,10 @@ public final class ShardingSphereDatabaseDataManager {
      * @param tableName table name
      */
     public synchronized void dropShardingSphereTableData(final String 
databaseName, final String schemaName, final String tableName) {
-        if 
(!metaDataContexts.get().getStatistics().containsDatabase(databaseName) || 
!metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName))
 {
+        if (!metaDataContexts.getStatistics().containsDatabase(databaseName) 
|| 
!metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName))
 {
             return;
         }
-        
metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).removeTable(tableName);
+        
metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).removeTable(tableName);
     }
     
     /**
@@ -129,16 +128,16 @@ public final class ShardingSphereDatabaseDataManager {
      * @param yamlRowData yaml row data
      */
     public synchronized void alterShardingSphereRowData(final String 
databaseName, final String schemaName, final String tableName, final 
YamlShardingSphereRowData yamlRowData) {
-        if 
(!metaDataContexts.get().getStatistics().containsDatabase(databaseName) || 
!metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName)
-                || 
!metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName))
 {
+        if (!metaDataContexts.getStatistics().containsDatabase(databaseName) 
|| 
!metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName)
+                || 
!metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName))
 {
             return;
         }
-        if 
(!metaDataContexts.get().getMetaData().containsDatabase(databaseName) || 
!metaDataContexts.get().getMetaData().getDatabase(databaseName).containsSchema(schemaName)
-                || 
!metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName))
 {
+        if (!metaDataContexts.getMetaData().containsDatabase(databaseName) || 
!metaDataContexts.getMetaData().getDatabase(databaseName).containsSchema(schemaName)
+                || 
!metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName))
 {
             return;
         }
-        ShardingSphereTableData tableData = 
metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).getTable(tableName);
-        List<ShardingSphereColumn> columns = new 
ArrayList<>(metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchema(schemaName).getTable(tableName).getAllColumns());
+        ShardingSphereTableData tableData = 
metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).getTable(tableName);
+        List<ShardingSphereColumn> columns = new 
ArrayList<>(metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).getTable(tableName).getAllColumns());
         tableData.getRows().add(new 
YamlShardingSphereRowDataSwapper(columns).swapToObject(yamlRowData));
     }
     
@@ -151,10 +150,10 @@ public final class ShardingSphereDatabaseDataManager {
      * @param uniqueKey row uniqueKey
      */
     public synchronized void deleteShardingSphereRowData(final String 
databaseName, final String schemaName, final String tableName, final String 
uniqueKey) {
-        if 
(!metaDataContexts.get().getStatistics().containsDatabase(databaseName) || 
!metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName)
-                || 
!metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName))
 {
+        if (!metaDataContexts.getStatistics().containsDatabase(databaseName) 
|| 
!metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName)
+                || 
!metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName))
 {
             return;
         }
-        
metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).getTable(tableName).getRows().removeIf(each
 -> uniqueKey.equals(each.getUniqueKey()));
+        
metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).getTable(tableName).getRows().removeIf(each
 -> uniqueKey.equals(each.getUniqueKey()));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
index 9791b5e0a93..0631aaab6e4 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
@@ -24,16 +24,15 @@ import 
org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 /**
@@ -42,7 +41,7 @@ import java.util.stream.Collectors;
 @Slf4j
 public final class StorageUnitManager {
     
-    private final AtomicReference<MetaDataContexts> metaDataContexts;
+    private final MetaDataContexts metaDataContexts;
     
     private final ComputeNodeInstanceContext computeNodeInstanceContext;
     
@@ -50,7 +49,7 @@ public final class StorageUnitManager {
     
     private final MetaDataPersistService metaDataPersistService;
     
-    public StorageUnitManager(final AtomicReference<MetaDataContexts> 
metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
+    public StorageUnitManager(final MetaDataContexts metaDataContexts, final 
ComputeNodeInstanceContext computeNodeInstanceContext,
                               final PersistRepository repository, final 
ResourceSwitchManager resourceSwitchManager) {
         this.metaDataContexts = metaDataContexts;
         this.computeNodeInstanceContext = computeNodeInstanceContext;
@@ -67,7 +66,7 @@ public final class StorageUnitManager {
     public synchronized void registerStorageUnit(final String databaseName, 
final Map<String, DataSourcePoolProperties> propsMap) {
         try {
             closeStaleRules(databaseName);
-            SwitchingResource switchingResource = 
resourceSwitchManager.switchByRegisterStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 propsMap);
+            SwitchingResource switchingResource = 
resourceSwitchManager.switchByRegisterStorageUnit(metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(),
 propsMap);
             buildNewMetaDataContext(databaseName, switchingResource);
         } catch (final SQLException ex) {
             log.error("Alter database: {} register storage unit failed", 
databaseName, ex);
@@ -83,7 +82,7 @@ public final class StorageUnitManager {
     public synchronized void alterStorageUnit(final String databaseName, final 
Map<String, DataSourcePoolProperties> propsMap) {
         try {
             closeStaleRules(databaseName);
-            SwitchingResource switchingResource = 
resourceSwitchManager.switchByAlterStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 propsMap);
+            SwitchingResource switchingResource = 
resourceSwitchManager.switchByAlterStorageUnit(metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(),
 propsMap);
             buildNewMetaDataContext(databaseName, switchingResource);
         } catch (final SQLException ex) {
             log.error("Alter database: {} register storage unit failed", 
databaseName, ex);
@@ -100,7 +99,7 @@ public final class StorageUnitManager {
         try {
             closeStaleRules(databaseName);
             SwitchingResource switchingResource = 
resourceSwitchManager.switchByUnregisterStorageUnit(
-                    
metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(),
 Collections.singletonList(storageUnitName));
+                    
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(), 
Collections.singletonList(storageUnitName));
             buildNewMetaDataContext(databaseName, switchingResource);
         } catch (final SQLException ex) {
             log.error("Alter database: {} register storage unit failed", 
databaseName, ex);
@@ -109,9 +108,10 @@ public final class StorageUnitManager {
     
     private void buildNewMetaDataContext(final String databaseName, final 
SwitchingResource switchingResource) throws SQLException {
         MetaDataContexts reloadMetaDataContexts = 
MetaDataContextsFactory.createBySwitchResource(
-                databaseName, true, switchingResource, metaDataContexts.get(), 
metaDataPersistService, computeNodeInstanceContext);
-        metaDataContexts.set(reloadMetaDataContexts);
-        
metaDataContexts.get().getMetaData().putDatabase(buildDatabase(reloadMetaDataContexts.getMetaData().getDatabase(databaseName)));
+                databaseName, true, switchingResource, metaDataContexts, 
metaDataPersistService, computeNodeInstanceContext);
+        metaDataContexts.setMetaData(reloadMetaDataContexts.getMetaData());
+        metaDataContexts.setStatistics(reloadMetaDataContexts.getStatistics());
+        
metaDataContexts.getMetaData().putDatabase(buildDatabase(reloadMetaDataContexts.getMetaData().getDatabase(databaseName)));
         switchingResource.closeStaleDataSources();
     }
     
@@ -127,7 +127,7 @@ public final class StorageUnitManager {
     
     @SneakyThrows(Exception.class)
     private void closeStaleRules(final String databaseName) {
-        for (ShardingSphereRule each : 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules())
 {
+        for (ShardingSphereRule each : 
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules())
 {
             if (each instanceof AutoCloseable) {
                 ((AutoCloseable) each).close();
             }
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 f812b2705f7..e5ebce27d12 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
@@ -117,13 +117,6 @@ class ContextManagerTest {
         return result;
     }
     
-    @Test
-    void assertRenewMetaDataContexts() {
-        MetaDataContexts contexts = mock(MetaDataContexts.class);
-        contextManager.renewMetaDataContexts(contexts);
-        assertThat(contextManager.getMetaDataContexts(), is(contexts));
-    }
-    
     @Test
     void assertGetDatabase() {
         assertNotNull(contextManager.getDatabase("foo_db"));
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
index 1a2fc546f6a..b5b1e318b82 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
@@ -38,7 +38,6 @@ import org.mockito.quality.Strictness;
 
 import java.sql.Types;
 import java.util.Collections;
-import java.util.concurrent.atomic.AtomicReference;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -68,7 +67,7 @@ class SchemaMetaDataManagerTest {
         
when(metaDataContexts.getMetaData().containsDatabase("foo_db")).thenReturn(true);
         
when(metaDataContexts.getMetaData().getDatabase("foo_db")).thenReturn(database);
         
when(metaDataContexts.getMetaData().getAllDatabases()).thenReturn(Collections.singleton(database));
-        schemaMetaDataManager = new SchemaMetaDataManager(new 
AtomicReference<>(metaDataContexts), mock(PersistRepository.class));
+        schemaMetaDataManager = new SchemaMetaDataManager(metaDataContexts, 
mock(PersistRepository.class));
     }
     
     private ShardingSphereDatabase mockDatabase() {
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
index c4bfe5da611..16fe58ff481 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
@@ -75,7 +75,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     
     @Override
     public void dropDatabase(final String databaseName) {
-        String droppedDatabaseName = 
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getName();
+        String droppedDatabaseName = 
metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName();
         
listenerAssistedPersistService.persistDatabaseNameListenerAssisted(droppedDatabaseName,
 ListenerAssistedType.DROP_DATABASE);
         
metaDataPersistService.getDatabaseMetaDataFacade().getDatabase().drop(droppedDatabaseName);
     }
@@ -89,7 +89,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     public void alterSchema(final AlterSchemaPOJO alterSchemaPOJO) {
         String databaseName = alterSchemaPOJO.getDatabaseName();
         String schemaName = alterSchemaPOJO.getSchemaName();
-        ShardingSphereSchema schema = 
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getSchema(schemaName);
+        ShardingSphereSchema schema = 
metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName);
         if (schema.isEmpty()) {
             
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName,
 alterSchemaPOJO.getRenameSchemaName());
         }
@@ -116,7 +116,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     
     @Override
     public void registerStorageUnits(final String databaseName, final 
Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException {
-        MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
+        MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts();
         Map<StorageNode, DataSource> newDataSources = new 
HashMap<>(toBeRegisteredProps.size());
         try {
             SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager()
@@ -134,7 +134,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     
     @Override
     public void alterStorageUnits(final String databaseName, final Map<String, 
DataSourcePoolProperties> toBeUpdatedProps) throws SQLException {
-        MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
+        MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts();
         Map<StorageNode, DataSource> newDataSources = new 
HashMap<>(toBeUpdatedProps.size());
         try {
             SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager()
@@ -155,7 +155,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     @Override
     public void unregisterStorageUnits(final String databaseName, final 
Collection<String> toBeDroppedStorageUnitNames) throws SQLException {
         for (String each : getToBeDroppedResourceNames(databaseName, 
toBeDroppedStorageUnitNames)) {
-            MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
+            MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts();
             SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager()
                     
.createByUnregisterStorageUnit(originalMetaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(),
 Collections.singletonList(each));
             MetaDataContexts reloadMetaDataContexts = 
MetaDataContextsFactory.createBySwitchResource(databaseName, false,
@@ -209,7 +209,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
         if (null == toBeAlteredRuleConfig) {
             return;
         }
-        MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
+        MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts();
         Collection<MetaDataVersion> metaDataVersions = 
metaDataPersistService.getDatabaseRulePersistService().persist(databaseName, 
Collections.singleton(toBeAlteredRuleConfig));
         
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
         afterRuleConfigurationAltered(databaseName, originalMetaDataContexts);
@@ -218,7 +218,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     @SneakyThrows(InterruptedException.class)
     private void afterRuleConfigurationAltered(final String databaseName, 
final MetaDataContexts originalMetaDataContexts) {
         Thread.sleep(3000L);
-        MetaDataContexts reloadMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
+        MetaDataContexts reloadMetaDataContexts = 
metaDataContextManager.getMetaDataContexts();
         metaDataPersistService.persistReloadDatabaseByAlter(
                 databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName), 
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
     }
@@ -232,7 +232,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     
     @Override
     public void removeRuleConfiguration(final String databaseName, final 
String ruleName) {
-        MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
+        MetaDataContexts originalMetaDataContexts = 
metaDataContextManager.getMetaDataContexts();
         
metaDataPersistService.getDatabaseRulePersistService().delete(databaseName, 
ruleName);
         afterRuleConfigurationDropped(databaseName, originalMetaDataContexts);
     }
@@ -240,7 +240,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     @SneakyThrows(InterruptedException.class)
     private void afterRuleConfigurationDropped(final String databaseName, 
final MetaDataContexts originalMetaDataContexts) {
         Thread.sleep(3000L);
-        MetaDataContexts reloadMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
+        MetaDataContexts reloadMetaDataContexts = 
metaDataContextManager.getMetaDataContexts();
         metaDataPersistService.persistReloadDatabaseByDrop(
                 databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName), 
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
     }
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
index 869eb509b05..e8e9aff1b92 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
@@ -84,7 +84,7 @@ class ClusterMetaDataManagerPersistServiceTest {
     
     @Test
     void assertDropDatabase() {
-        
when(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase("foo_db").getName()).thenReturn("foo_db");
+        
when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getName()).thenReturn("foo_db");
         metaDataManagerPersistService.dropDatabase("foo_db");
         
verify(listenerAssistedPersistService).persistDatabaseNameListenerAssisted("foo_db",
 ListenerAssistedType.DROP_DATABASE);
         
verify(metaDataPersistService.getDatabaseMetaDataFacade().getDatabase()).drop("foo_db");
@@ -112,7 +112,7 @@ class ClusterMetaDataManagerPersistServiceTest {
     }
     
     private void assertAlterSchema(final ShardingSphereSchema schema) {
-        
when(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema);
+        
when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema);
         metaDataManagerPersistService.alterSchema(new 
AlterSchemaPOJO("foo_db", "foo_schema", "bar_schema", 
Collections.singleton("foo_ds")));
         
verify(metaDataPersistService.getDatabaseMetaDataFacade().getTable()).persist(eq("foo_db"),
 eq("bar_schema"), anyCollection());
         
verify(metaDataPersistService.getDatabaseMetaDataFacade().getView()).persist(eq("foo_db"),
 eq("bar_schema"), anyCollection());
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index 56482b172c6..a5fbf412c1e 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -91,7 +91,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     
     @Override
     public void createSchema(final String databaseName, final String 
schemaName) {
-        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().get().getMetaData();
+        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         database.addSchema(new ShardingSphereSchema(schemaName));
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
@@ -100,7 +100,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     
     @Override
     public void alterSchema(final AlterSchemaPOJO alterSchemaPOJO) {
-        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().get().getMetaData();
+        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
         ShardingSphereDatabase database = 
metaData.getDatabase(alterSchemaPOJO.getDatabaseName());
         putSchemaMetaData(database, alterSchemaPOJO.getSchemaName(), 
alterSchemaPOJO.getRenameSchemaName(), 
alterSchemaPOJO.getLogicDataSourceName());
         removeSchemaMetaData(database, alterSchemaPOJO.getSchemaName());
@@ -193,7 +193,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     public void dropSchema(final String databaseName, final Collection<String> 
schemaNames) {
         Collection<String> tobeRemovedTables = new LinkedList<>();
         Collection<String> tobeRemovedSchemas = new LinkedList<>();
-        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().get().getMetaData();
+        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         for (String each : schemaNames) {
             ShardingSphereSchema schema = new ShardingSphereSchema(each, 
database.getSchema(each).getAllTables(), 
database.getSchema(each).getAllViews());
@@ -209,7 +209,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     public void alterSchemaMetaData(final AlterSchemaMetaDataPOJO 
alterSchemaMetaDataPOJO) {
         String databaseName = alterSchemaMetaDataPOJO.getDatabaseName();
         String schemaName = alterSchemaMetaDataPOJO.getSchemaName();
-        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().get().getMetaData();
+        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         addDataNode(database, 
alterSchemaMetaDataPOJO.getLogicDataSourceName(), schemaName, 
alterSchemaMetaDataPOJO.getAlteredTables(), 
alterSchemaMetaDataPOJO.getAlteredViews());
         removeDataNode(database, schemaName, 
alterSchemaMetaDataPOJO.getDroppedTables(), 
alterSchemaMetaDataPOJO.getDroppedViews());
@@ -222,14 +222,14 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
     
     @Override
     public void registerStorageUnits(final String databaseName, final 
Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException {
-        SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager().switchByRegisterStorageUnit(metaDataContextManager.getMetaDataContexts().get()
+        SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager().switchByRegisterStorageUnit(metaDataContextManager.getMetaDataContexts()
                 
.getMetaData().getDatabase(databaseName).getResourceMetaData(), 
toBeRegisteredProps);
         ShardingSphereDatabase changedDatabase = 
MetaDataContextsFactory.createChangedDatabase(databaseName, false, 
switchingResource, null,
-                metaDataContextManager.getMetaDataContexts().get(), 
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
-        
metaDataContextManager.getMetaDataContexts().get().getMetaData().putDatabase(changedDatabase);
-        
metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
-                .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getAllDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
-        
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getAllSchemas()
+                metaDataContextManager.getMetaDataContexts(), 
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
+        
metaDataContextManager.getMetaDataContexts().getMetaData().putDatabase(changedDatabase);
+        
metaDataContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()
+                .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContextManager.getMetaDataContexts().getMetaData().getAllDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
+        
metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getAllSchemas()
                 .forEach(each -> {
                     if (each.isEmpty()) {
                         
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName,
 each.getName());
@@ -244,13 +244,13 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
     
     @Override
     public void alterStorageUnits(final String databaseName, final Map<String, 
DataSourcePoolProperties> toBeUpdatedProps) throws SQLException {
-        SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager().switchByAlterStorageUnit(metaDataContextManager.getMetaDataContexts().get().getMetaData()
+        SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager().switchByAlterStorageUnit(metaDataContextManager.getMetaDataContexts().getMetaData()
                 .getDatabase(databaseName).getResourceMetaData(), 
toBeUpdatedProps);
         ShardingSphereDatabase changedDatabase = 
MetaDataContextsFactory.createChangedDatabase(databaseName, true, 
switchingResource, null,
-                metaDataContextManager.getMetaDataContexts().get(), 
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
-        
metaDataContextManager.getMetaDataContexts().get().getMetaData().putDatabase(changedDatabase);
-        
metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
-                .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getAllDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
+                metaDataContextManager.getMetaDataContexts(), 
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
+        
metaDataContextManager.getMetaDataContexts().getMetaData().putDatabase(changedDatabase);
+        
metaDataContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()
+                .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContextManager.getMetaDataContexts().getMetaData().getAllDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
         DataSourceUnitPersistService dataSourceService = 
metaDataPersistService.getDataSourceUnitService();
         metaDataPersistService.getMetaDataVersionPersistService()
                 .switchActiveVersion(dataSourceService.persist(databaseName, 
toBeUpdatedProps));
@@ -260,14 +260,14 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
     
     @Override
     public void unregisterStorageUnits(final String databaseName, final 
Collection<String> toBeDroppedStorageUnitNames) throws SQLException {
-        SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager().switchByUnregisterStorageUnit(metaDataContextManager.getMetaDataContexts().get().getMetaData()
+        SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager().switchByUnregisterStorageUnit(metaDataContextManager.getMetaDataContexts().getMetaData()
                 .getDatabase(databaseName).getResourceMetaData(), 
toBeDroppedStorageUnitNames);
         MetaDataContexts reloadMetaDataContexts = 
MetaDataContextsFactory.createBySwitchResource(databaseName, false, 
switchingResource,
-                metaDataContextManager.getMetaDataContexts().get(), 
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
+                metaDataContextManager.getMetaDataContexts(), 
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
         metaDataPersistService.persistReloadDatabaseByDrop(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
-                
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName));
+                
metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName));
         metaDataContextManager.dropSchemas(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
-                
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName));
+                
metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName));
         metaDataContextManager.renewMetaDataContexts(reloadMetaDataContexts);
         switchingResource.closeStaleDataSources();
         clearServiceCache();
@@ -277,7 +277,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     public void alterSingleRuleConfiguration(final String databaseName, final 
Collection<RuleConfiguration> ruleConfigs) throws SQLException {
         ruleConfigs.removeIf(each -> 
!each.getClass().isAssignableFrom(SingleRuleConfiguration.class));
         Collection<MetaDataVersion> metaDataVersions = 
metaDataPersistService.getDatabaseRulePersistService()
-                
.persist(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getName(),
 ruleConfigs);
+                
.persist(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
 ruleConfigs);
         
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
         
metaDataContextManager.getDatabaseRuleConfigurationManager().alterRuleConfiguration(databaseName,
 ruleConfigs.iterator().next());
         clearServiceCache();
@@ -289,7 +289,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
             return;
         }
         Collection<MetaDataVersion> metaDataVersions = 
metaDataPersistService.getDatabaseRulePersistService()
-                
.persist(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getName(),
 Collections.singleton(toBeAlteredRuleConfig));
+                
.persist(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
 Collections.singleton(toBeAlteredRuleConfig));
         
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
         for (MetaDataVersion each : metaDataVersions) {
             // TODO double check here, when ruleItemEvent not existed or not 
AlterRuleItemEvent @haoran
@@ -343,7 +343,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     
     @Override
     public void createTable(final String databaseName, final String 
schemaName, final ShardingSphereTable table, final String logicDataSourceName) {
-        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().get().getMetaData();
+        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         addTableToDataNode(database, schemaName, logicDataSourceName, table);
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
@@ -352,7 +352,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     
     @Override
     public void dropTables(final String databaseName, final String schemaName, 
final Collection<String> tableNames) {
-        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().get().getMetaData();
+        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         removeTablesToDataNode(database, schemaName, tableNames);
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
diff --git 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index 22c95c643e3..37b4ae703c3 100644
--- 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -104,7 +104,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getName()).thenReturn("foo_db");
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new 
ConfigurationProperties(new Properties()));
-        
when(metaDataContextManager.getMetaDataContexts().get().getMetaData()).thenReturn(metaData);
+        
when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
         DatabaseMetaDataPersistFacade databaseMetaDataFacade = 
mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS);
         
when(metaDataPersistService.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade);
         metaDataManagerPersistService.alterSchema(new 
AlterSchemaPOJO("foo_db", "foo_schema", "bar_schema", 
Collections.singleton("foo_ds")));
@@ -121,7 +121,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
         when(database.getSchema("foo_schema")).thenReturn(new 
ShardingSphereSchema("foo_schema"));
         when(database.getSchema("bar_schema")).thenReturn(new 
ShardingSphereSchema("bar_schema"));
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new 
ConfigurationProperties(new Properties()));
-        
when(metaDataContextManager.getMetaDataContexts().get().getMetaData()).thenReturn(metaData);
+        
when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
         DatabaseMetaDataPersistFacade databaseMetaDataFacade = 
mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS);
         
when(metaDataPersistService.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade);
         metaDataManagerPersistService.alterSchema(new 
AlterSchemaPOJO("foo_db", "foo_schema", "bar_schema", 
Collections.singleton("foo_ds")));
@@ -136,7 +136,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getName()).thenReturn("foo_db");
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new 
ConfigurationProperties(new Properties()));
-        
when(metaDataContextManager.getMetaDataContexts().get().getMetaData()).thenReturn(metaData);
+        
when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
         metaDataManagerPersistService.dropSchema("foo_db", 
Collections.singleton("foo_schema"));
         verify(database).dropSchema(any());
     }
@@ -168,7 +168,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
         when(database.getName()).thenReturn("foo_db");
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new 
ConfigurationProperties(new Properties()));
-        
when(metaDataContextManager.getMetaDataContexts().get().getMetaData()).thenReturn(metaData);
+        
when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
         RuleConfiguration ruleConfig = mock(RuleConfiguration.class, 
RETURNS_DEEP_STUBS);
         Collection<MetaDataVersion> metaDataVersion = 
Collections.singleton(mock(MetaDataVersion.class));
         
when(metaDataPersistService.getDatabaseRulePersistService().persist("foo_db", 
Collections.singleton(ruleConfig))).thenReturn(metaDataVersion);

Reply via email to