You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2023/06/24 07:15:35 UTC

[shardingsphere] branch master updated: Refactor MetaDataVersionBasedPersistService (#26513)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 2f622fb6fd3 Refactor MetaDataVersionBasedPersistService (#26513)
2f622fb6fd3 is described below

commit 2f622fb6fd3d1186ce392cbb4c3cfa338127d230
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Sat Jun 24 15:15:29 2023 +0800

    Refactor MetaDataVersionBasedPersistService (#26513)
    
    * Refactor MetaDataVersionBasedPersistService
    
    * Fix checkstyle
    
    * Add NewDatabaseMetaDataPersistService
    
    * Fix ci
    
    * Fix unit test
---
 .../persist/NewMetaDataPersistService.java         |  13 +-
 .../NewDatabaseMetaDataPersistService.java         | 170 +++++++++++++++++++++
 .../MetaDataVersionBasedPersistService.java        |  45 +-----
 .../version/MetaDataVersionPersistService.java     |  73 +--------
 .../service/MetaDataVersionPersistServiceTest.java |  64 +-------
 .../cluster/NewClusterModeContextManager.java      |   6 +-
 .../subscriber/ConfigurationChangedSubscriber.java |  12 +-
 .../ConfigurationChangedSubscriberTest.java        |   2 -
 8 files changed, 200 insertions(+), 185 deletions(-)

diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
index f5fc3f3ee1d..0d1a412e5fd 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
@@ -30,7 +30,7 @@ import org.apache.shardingsphere.metadata.persist.service.config.database.NewDat
 import org.apache.shardingsphere.metadata.persist.service.config.database.NewDatabaseRulePersistService;
 import org.apache.shardingsphere.metadata.persist.service.config.global.NewGlobalRulePersistService;
 import org.apache.shardingsphere.metadata.persist.service.config.global.NewPropertiesPersistService;
-import org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
+import org.apache.shardingsphere.metadata.persist.service.database.NewDatabaseMetaDataPersistService;
 import org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
@@ -50,10 +50,11 @@ public final class NewMetaDataPersistService implements MetaDataBasedPersistServ
     
     private final PersistRepository repository;
     
-    // TODO replace all service to new persist service
+    private final MetaDataVersionPersistService metaDataVersionPersistService;
+    
     private final NewDataSourcePersistService dataSourceService;
     
-    private final DatabaseMetaDataPersistService databaseMetaDataService;
+    private final NewDatabaseMetaDataPersistService databaseMetaDataService;
     
     private final NewDatabaseRulePersistService databaseRulePersistService;
     
@@ -61,18 +62,16 @@ public final class NewMetaDataPersistService implements MetaDataBasedPersistServ
     
     private final NewPropertiesPersistService propsService;
     
-    private final MetaDataVersionPersistService metaDataVersionPersistService;
-    
     private final ShardingSphereDataPersistService shardingSphereDataPersistService;
     
     public NewMetaDataPersistService(final PersistRepository repository) {
         this.repository = repository;
+        metaDataVersionPersistService = new MetaDataVersionPersistService(repository);
         dataSourceService = new NewDataSourcePersistService(repository);
-        databaseMetaDataService = new DatabaseMetaDataPersistService(repository);
+        databaseMetaDataService = new NewDatabaseMetaDataPersistService(repository, metaDataVersionPersistService);
         databaseRulePersistService = new NewDatabaseRulePersistService(repository);
         globalRuleService = new NewGlobalRulePersistService(repository);
         propsService = new NewPropertiesPersistService(repository);
-        metaDataVersionPersistService = new MetaDataVersionPersistService(repository);
         shardingSphereDataPersistService = new ShardingSphereDataPersistService(repository);
     }
     
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/NewDatabaseMetaDataPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/NewDatabaseMetaDataPersistService.java
new file mode 100644
index 00000000000..f366e3d18a5
--- /dev/null
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/NewDatabaseMetaDataPersistService.java
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.metadata.persist.service.database;
+
+import lombok.Getter;
+import org.apache.shardingsphere.infra.metadata.database.schema.SchemaManager;
+import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
+import org.apache.shardingsphere.metadata.persist.service.schema.NewTableMetaDataPersistService;
+import org.apache.shardingsphere.metadata.persist.service.schema.NewViewMetaDataPersistService;
+import org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
+
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Database meta data registry service.
+ */
+@Getter
+public final class NewDatabaseMetaDataPersistService implements DatabaseMetaDataBasedPersistService {
+    
+    private final PersistRepository repository;
+    
+    private final NewTableMetaDataPersistService tableMetaDataPersistService;
+    
+    private final NewViewMetaDataPersistService viewMetaDataPersistService;
+    
+    private final MetaDataVersionPersistService metaDataVersionPersistService;
+    
+    public NewDatabaseMetaDataPersistService(final PersistRepository repository, final MetaDataVersionPersistService metaDataVersionPersistService) {
+        this.repository = repository;
+        this.tableMetaDataPersistService = new NewTableMetaDataPersistService(repository);
+        this.viewMetaDataPersistService = new NewViewMetaDataPersistService(repository);
+        this.metaDataVersionPersistService = metaDataVersionPersistService;
+    }
+    
+    /**
+     * Add database name.
+     * 
+     * @param databaseName database name
+     */
+    @Override
+    public void addDatabase(final String databaseName) {
+        repository.persist(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), "");
+    }
+    
+    /**
+     * Drop database.
+     *
+     * @param databaseName database name to be deleted
+     */
+    @Override
+    public void dropDatabase(final String databaseName) {
+        repository.delete(DatabaseMetaDataNode.getDatabaseNamePath(databaseName));
+    }
+    
+    /**
+     * Load all database names.
+     *
+     * @return all database names
+     */
+    @Override
+    public Collection<String> loadAllDatabaseNames() {
+        return repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataNodePath());
+    }
+    
+    /**
+     * Add schema.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     */
+    @Override
+    public void addSchema(final String databaseName, final String schemaName) {
+        repository.persist(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName, schemaName), "");
+    }
+    
+    /**
+     * Drop schema.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     */
+    @Override
+    public void dropSchema(final String databaseName, final String schemaName) {
+        repository.delete(DatabaseMetaDataNode.getMetaDataSchemaPath(databaseName, schemaName));
+    }
+    
+    /**
+     * Compare and persist schema meta data.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @param schema schema meta data
+     */
+    @Override
+    public void compareAndPersist(final String databaseName, final String schemaName, final ShardingSphereSchema schema) {
+        if (schema.getTables().isEmpty() && schema.getViews().isEmpty()) {
+            addSchema(databaseName, schemaName);
+        }
+        Map<String, ShardingSphereTable> currentTables = tableMetaDataPersistService.load(databaseName, schemaName);
+        metaDataVersionPersistService.switchActiveVersion(tableMetaDataPersistService
+                .persistSchemaMetaData(databaseName, schemaName, SchemaManager.getToBeAddedTables(schema.getTables(), currentTables)));
+        SchemaManager.getToBeDeletedTables(schema.getTables(), currentTables).forEach((key, value) -> tableMetaDataPersistService.delete(databaseName, schemaName, key));
+    }
+    
+    /**
+     * Persist schema meta data.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @param schema schema meta data
+     */
+    @Override
+    public void persist(final String databaseName, final String schemaName, final ShardingSphereSchema schema) {
+        if (schema.getTables().isEmpty() && schema.getViews().isEmpty()) {
+            addSchema(databaseName, schemaName);
+        }
+        metaDataVersionPersistService.switchActiveVersion(tableMetaDataPersistService.persistSchemaMetaData(databaseName, schemaName, schema.getTables()));
+    }
+    
+    /**
+     * Delete schema meta data.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @param schema schema meta data
+     */
+    @Override
+    public void delete(final String databaseName, final String schemaName, final ShardingSphereSchema schema) {
+        schema.getTables().forEach((key, value) -> tableMetaDataPersistService.delete(databaseName, schemaName, key));
+    }
+    
+    /**
+     * Load schema meta data.
+     *
+     * @param databaseName database name
+     * @return schema meta data
+     */
+    @Override
+    public Map<String, ShardingSphereSchema> loadSchemas(final String databaseName) {
+        Collection<String> schemaNames = loadAllSchemaNames(databaseName);
+        Map<String, ShardingSphereSchema> result = new LinkedHashMap<>(schemaNames.size(), 1F);
+        schemaNames.forEach(each -> result.put(each.toLowerCase(),
+                new ShardingSphereSchema(tableMetaDataPersistService.load(databaseName, each), viewMetaDataPersistService.load(databaseName, each))));
+        return result;
+    }
+    
+    private Collection<String> loadAllSchemaNames(final String databaseName) {
+        return repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataSchemasPath(databaseName));
+    }
+}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionBasedPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionBasedPersistService.java
index da0f3d8d87e..3abc83f2194 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionBasedPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionBasedPersistService.java
@@ -17,52 +17,19 @@
 
 package org.apache.shardingsphere.metadata.persist.service.version;
 
-import java.util.Optional;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
+
+import java.util.Collection;
 
 /**
- * TODO Remove this when metadata structure adjustment completed. #25485
  * Meta data version based registry service.
  */
 public interface MetaDataVersionBasedPersistService {
     
     /**
-     * Get active version.
-     *
-     * @param databaseName database name
-     * @return active database version
-     */
-    Optional<String> getActiveVersion(String databaseName);
-    
-    /**
-     * Judge whether active version.
-     *
-     * @param databaseName database name
-     * @param version version
-     * @return is active version or not
-     */
-    boolean isActiveVersion(String databaseName, String version);
-    
-    /**
-     * Create new schema version.
-     *
-     * @param databaseName database name
-     * @return new version
-     */
-    Optional<String> createNewVersion(String databaseName);
-    
-    /**
-     * Persist active database version.
-     *
-     * @param databaseName database name
-     * @param version version
-     */
-    void persistActiveVersion(String databaseName, String version);
-    
-    /**
-     * Delete database version.
+     * Switch active version.
      *
-     * @param databaseName database name
-     * @param version version
+     * @param metaDataVersions meta data versions
      */
-    void deleteVersion(String databaseName, String version);
+    void switchActiveVersion(Collection<MetaDataVersion> metaDataVersions);
 }
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
index e368cecd34d..2ba47070797 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
@@ -18,11 +18,10 @@
 package org.apache.shardingsphere.metadata.persist.service.version;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
-import java.util.Optional;
-import java.util.concurrent.atomic.AtomicLong;
+import java.util.Collection;
 
 /**
  * Meta data version persist service.
@@ -32,71 +31,11 @@ public final class MetaDataVersionPersistService implements MetaDataVersionBased
     
     private final PersistRepository repository;
     
-    /**
-     * Get active version.
-     * 
-     * @param databaseName database name
-     * @return active database version
-     */
+    // TODO Need to use transaction operation
     @Override
-    public Optional<String> getActiveVersion(final String databaseName) {
-        return Optional.ofNullable(repository.getDirectly(DatabaseMetaDataNode.getActiveVersionPath(databaseName)));
-    }
-    
-    /**
-     * Judge whether active version.
-     * 
-     * @param databaseName database name
-     * @param version version
-     * @return is active version or not
-     */
-    @Override
-    public boolean isActiveVersion(final String databaseName, final String version) {
-        Optional<String> actualVersion = getActiveVersion(databaseName);
-        return actualVersion.isPresent() && actualVersion.get().equals(version);
-    }
-    
-    /**
-     * Create new schema version.
-     * 
-     * @param databaseName database name
-     * @return new version
-     */
-    @Override
-    public Optional<String> createNewVersion(final String databaseName) {
-        Optional<String> activeVersion = getActiveVersion(databaseName);
-        if (!activeVersion.isPresent()) {
-            return Optional.empty();
+    public void switchActiveVersion(final Collection<MetaDataVersion> metaDataVersions) {
+        for (MetaDataVersion each : metaDataVersions) {
+            repository.persist(each.getPersistKey(), each.getNextActiveVersion());
         }
-        String newVersion = String.valueOf(new AtomicLong(Long.parseLong(activeVersion.get())).incrementAndGet());
-        repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, newVersion), repository.getDirectly(DatabaseMetaDataNode.getRulePath(databaseName, activeVersion.get())));
-        repository.persist(
-                DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, newVersion), repository.getDirectly(DatabaseMetaDataNode.getMetaDataDataSourcePath(databaseName, activeVersion.get())));
-        return Optional.of(newVersion);
-    }
-    
-    /**
-     * Persist active database version.
-     * 
-     * @param databaseName database name
-     * @param version version
-     */
-    @Override
-    public void persistActiveVersion(final String databaseName, final String version) {
-        Optional<String> activeVersion = getActiveVersion(databaseName);
-        if (activeVersion.isPresent() && !activeVersion.get().equals(version)) {
-            repository.persist(DatabaseMetaDataNode.getActiveVersionPath(databaseName), version);
-        }
-    }
-    
-    /**
-     * Delete database version.
-     * 
-     * @param databaseName database name
-     * @param version version
-     */
-    @Override
-    public void deleteVersion(final String databaseName, final String version) {
-        repository.delete(DatabaseMetaDataNode.getDatabaseVersionPath(databaseName, version));
     }
 }
diff --git a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistServiceTest.java b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistServiceTest.java
index ed70adf36cd..65dad3a503c 100644
--- a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistServiceTest.java
+++ b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/MetaDataVersionPersistServiceTest.java
@@ -17,23 +17,16 @@
 
 package org.apache.shardingsphere.metadata.persist.service;
 
-import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import java.util.Optional;
+import java.util.Collections;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.contains;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
 class MetaDataVersionPersistServiceTest {
     
@@ -44,61 +37,12 @@ class MetaDataVersionPersistServiceTest {
     @BeforeEach
     void setUp() {
         repository = mock(PersistRepository.class);
-        when(repository.getDirectly(contains("foo_db"))).thenReturn("1");
         metaDataVersionPersistService = new MetaDataVersionPersistService(repository);
     }
     
     @Test
     void assertGetActiveVersion() {
-        Optional<String> actual = metaDataVersionPersistService.getActiveVersion("foo_db");
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("1"));
-    }
-    
-    @Test
-    void assertIsActiveVersion() {
-        assertTrue(metaDataVersionPersistService.isActiveVersion("foo_db", "1"));
-    }
-    
-    @Test
-    void assertIsNotActiveVersionWithNotExistedDatabase() {
-        assertFalse(metaDataVersionPersistService.isActiveVersion("bar_db", "1"));
-    }
-    
-    @Test
-    void assertIsNotActiveVersionWithNotExistedVersion() {
-        assertFalse(metaDataVersionPersistService.isActiveVersion("foo_db", "2"));
-    }
-    
-    @Test
-    void assertCreateNewVersionWithoutExistedActiveVersion() {
-        assertFalse(metaDataVersionPersistService.createNewVersion("bar_db").isPresent());
-    }
-    
-    @Test
-    void assertCreateNewVersionWithExistedActiveVersion() {
-        Optional<String> actual = metaDataVersionPersistService.createNewVersion("foo_db");
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("2"));
-        verify(repository).persist("/metadata/foo_db/versions/2/rules", "1");
-        verify(repository).persist("/metadata/foo_db/versions/2/data_sources", "1");
-    }
-    
-    @Test
-    void assertPersistActiveVersionWhenExisted() {
-        metaDataVersionPersistService.persistActiveVersion("foo_db", "2");
-        verify(repository).persist(DatabaseMetaDataNode.getActiveVersionPath("foo_db"), "2");
-    }
-    
-    @Test
-    void assertPersistActiveVersionWithNotExistedDatabase() {
-        metaDataVersionPersistService.persistActiveVersion("bar_db", "2");
-        verify(repository, times(0)).persist(DatabaseMetaDataNode.getActiveVersionPath("bar_db"), "2");
-    }
-    
-    @Test
-    void assertDeleteVersion() {
-        metaDataVersionPersistService.deleteVersion("foo_db", "1");
-        verify(repository).delete(DatabaseMetaDataNode.getDatabaseVersionPath("foo_db", "1"));
+        metaDataVersionPersistService.switchActiveVersion(Collections.singletonList(new MetaDataVersion("foo_key", "0", "1")));
+        verify(repository).persist("foo_key", "1");
     }
 }
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
index 9bfe5b6f5f3..8f7755e4982 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchema
 import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.metadata.persist.node.NewDatabaseMetaDataNode;
 import org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
+import org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionBasedPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.manager.ContextManagerAware;
 
@@ -84,8 +85,9 @@ public final class NewClusterModeContextManager implements ModeContextManager, C
         Map<String, ShardingSphereTable> tables = alterSchemaMetaDataPOJO.getAlteredTables().stream().collect(Collectors.toMap(ShardingSphereTable::getName, table -> table));
         Map<String, ShardingSphereView> views = alterSchemaMetaDataPOJO.getAlteredViews().stream().collect(Collectors.toMap(ShardingSphereView::getName, view -> view));
         DatabaseMetaDataBasedPersistService databaseMetaDataService = contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
-        databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName, schemaName, tables);
-        databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName, schemaName, views);
+        MetaDataVersionBasedPersistService metaDataVersionBasedPersistService = contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService();
+        metaDataVersionBasedPersistService.switchActiveVersion(databaseMetaDataService.getTableMetaDataPersistService().persistSchemaMetaData(databaseName, schemaName, tables));
+        metaDataVersionBasedPersistService.switchActiveVersion(databaseMetaDataService.getViewMetaDataPersistService().persistSchemaMetaData(databaseName, schemaName, views));
         alterSchemaMetaDataPOJO.getDroppedTables().forEach(each -> databaseMetaDataService.getTableMetaDataPersistService().delete(databaseName, schemaName, each));
         alterSchemaMetaDataPOJO.getDroppedViews().forEach(each -> databaseMetaDataService.getViewMetaDataPersistService().delete(databaseName, schemaName, each));
     }
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java
index a4f4bf7d554..daaa9c41033 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java
@@ -64,10 +64,8 @@ public final class ConfigurationChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final DataSourceChangedEvent event) {
-        if (persistService.getMetaDataVersionPersistService().isActiveVersion(event.getDatabaseName(), event.getDatabaseVersion())) {
-            contextManager.alterDataSourceConfiguration(event.getDatabaseName(), event.getDataSourcePropertiesMap());
-            disableDataSources();
-        }
+        contextManager.alterDataSourceConfiguration(event.getDatabaseName(), event.getDataSourcePropertiesMap());
+        disableDataSources();
     }
     
     /**
@@ -77,10 +75,8 @@ public final class ConfigurationChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final RuleConfigurationsChangedEvent event) {
-        if (persistService.getMetaDataVersionPersistService().isActiveVersion(event.getDatabaseName(), event.getDatabaseVersion())) {
-            contextManager.alterRuleConfiguration(event.getDatabaseName(), event.getRuleConfigs());
-            disableDataSources();
-        }
+        contextManager.alterRuleConfiguration(event.getDatabaseName(), event.getRuleConfigs());
+        disableDataSources();
     }
     
     /**
diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriberTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriberTest.java
index 2d5c73f3473..28c5b9b85e9 100644
--- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriberTest.java
+++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriberTest.java
@@ -126,7 +126,6 @@ class ConfigurationChangedSubscriberTest {
     
     @Test
     void assertRenewForRuleConfigurationsChanged() {
-        when(persistService.getMetaDataVersionPersistService().isActiveVersion("db", "0")).thenReturn(true);
         assertThat(contextManager.getMetaDataContexts().getMetaData().getDatabase("db"), is(database));
         subscriber.renew(new RuleConfigurationsChangedEvent("db", "0", Collections.emptyList()));
         assertThat(contextManager.getMetaDataContexts().getMetaData().getDatabase("db"), not(database));
@@ -134,7 +133,6 @@ class ConfigurationChangedSubscriberTest {
     
     @Test
     void assertRenewForDataSourceChanged() {
-        when(persistService.getMetaDataVersionPersistService().isActiveVersion("db", "0")).thenReturn(true);
         subscriber.renew(new DataSourceChangedEvent("db", "0", createChangedDataSourcePropertiesMap()));
         assertTrue(contextManager.getMetaDataContexts().getMetaData().getDatabase("db").getResourceMetaData().getDataSources().containsKey("ds_2"));
     }