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

jiangmaolin pushed a commit to branch dev-5.5.1
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git

commit be22d7df977cb4a002baacd03fb2035ebb410f31
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Nov 7 11:46:10 2024 +0800

    Fixed the wrong sorting method for metadata version (#33579)
    
    * Fix npe for ShowTablesExecutor
    
    * Fixed the wrong sorting method for metadata version
    
    (cherry picked from commit 42cefe008fe26a066e528a5c072c3c3769a9ff31)
---
 .../rule/AuthorityRuleConfigurationPersistDecorator.java  |  2 +-
 .../config/database/DataSourceNodePersistService.java     | 12 +++++++++---
 .../config/database/DataSourceUnitPersistService.java     | 12 +++++++++---
 .../config/database/DatabaseRulePersistService.java       |  6 +++++-
 .../service/config/global/GlobalRulePersistService.java   |  2 +-
 .../service/config/global/PropertiesPersistService.java   |  2 +-
 .../metadata/table/TableMetaDataPersistService.java       |  2 +-
 .../metadata/table/ViewMetaDataPersistService.java        |  2 +-
 .../version/MetaDataVersionBasedPersistService.java       | 11 ++++++++++-
 .../service/version/MetaDataVersionPersistService.java    | 15 ++++++++++++---
 .../config/global/GlobalRulePersistServiceTest.java       |  2 ++
 .../config/global/PropertiesPersistServiceTest.java       | 10 +++-------
 .../metadata/table/TableMetaDataPersistServiceTest.java   | 14 +++-----------
 .../metadata/table/ViewMetaDataPersistServiceTest.java    | 13 +++----------
 .../version/MetaDataVersionPersistServiceTest.java        |  6 ++++++
 .../mode/metadata/MetaDataContextsFactory.java            |  2 --
 .../mysql/handler/admin/executor/ShowTablesExecutor.java  |  5 ++++-
 17 files changed, 71 insertions(+), 47 deletions(-)

diff --git 
a/kernel/authority/core/src/main/java/com/sphereex/dbplusengine/authority/rule/AuthorityRuleConfigurationPersistDecorator.java
 
b/kernel/authority/core/src/main/java/com/sphereex/dbplusengine/authority/rule/AuthorityRuleConfigurationPersistDecorator.java
index 173885c0b55..27c50f56d4e 100644
--- 
a/kernel/authority/core/src/main/java/com/sphereex/dbplusengine/authority/rule/AuthorityRuleConfigurationPersistDecorator.java
+++ 
b/kernel/authority/core/src/main/java/com/sphereex/dbplusengine/authority/rule/AuthorityRuleConfigurationPersistDecorator.java
@@ -44,7 +44,7 @@ public final class AuthorityRuleConfigurationPersistDecorator 
implements RuleCon
     private AESTextEncryptor textEncryptor;
     
     @Override
-    public void init(Properties props) {
+    public void init(final Properties props) {
         if (!props.containsKey(ENCRYPT_UNIQUE_VALUE_KEY)) {
             log.warn("The encrypt unique key not found, default value will be 
used");
         }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourceNodePersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourceNodePersistService.java
index 6bf39765cf4..1090edfc2b5 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourceNodePersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourceNodePersistService.java
@@ -18,12 +18,12 @@
 package org.apache.shardingsphere.metadata.persist.service.config.database;
 
 import com.google.common.base.Strings;
-import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.resource.YamlDataSourceConfigurationSwapper;
 import 
org.apache.shardingsphere.metadata.persist.node.metadata.DataSourceMetaDataNode;
+import 
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
 import java.util.Collection;
@@ -35,11 +35,17 @@ import java.util.Map.Entry;
 /**
  * Data source node persist service.
  */
-@RequiredArgsConstructor
 public final class DataSourceNodePersistService {
     
     private final PersistRepository repository;
     
+    private final MetaDataVersionPersistService metaDataVersionPersistService;
+    
+    public DataSourceNodePersistService(final PersistRepository repository) {
+        this.repository = repository;
+        metaDataVersionPersistService = new 
MetaDataVersionPersistService(repository);
+    }
+    
     /**
      * Load data source pool properties map.
      *
@@ -81,7 +87,7 @@ public final class DataSourceNodePersistService {
     public void persist(final String databaseName, final Map<String, 
DataSourcePoolProperties> dataSourceConfigs) {
         for (Entry<String, DataSourcePoolProperties> entry : 
dataSourceConfigs.entrySet()) {
             String activeVersion = getDataSourceActiveVersion(databaseName, 
entry.getKey());
-            List<String> versions = 
repository.getChildrenKeys(DataSourceMetaDataNode.getDataSourceNodeVersionsNode(databaseName,
 entry.getKey()));
+            List<String> versions = 
metaDataVersionPersistService.getVersions(DataSourceMetaDataNode.getDataSourceNodeVersionsNode(databaseName,
 entry.getKey()));
             
repository.persist(DataSourceMetaDataNode.getDataSourceNodeVersionNode(databaseName,
 entry.getKey(), versions.isEmpty()
                     ? MetaDataVersion.DEFAULT_VERSION
                     : String.valueOf(Integer.parseInt(versions.get(0)) + 1)), 
YamlEngine.marshal(new 
YamlDataSourceConfigurationSwapper().swapToMap(entry.getValue())));
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourceUnitPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourceUnitPersistService.java
index f2657d847a7..4e9a4cc2b98 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourceUnitPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourceUnitPersistService.java
@@ -18,12 +18,12 @@
 package org.apache.shardingsphere.metadata.persist.service.config.database;
 
 import com.google.common.base.Strings;
-import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.resource.YamlDataSourceConfigurationSwapper;
 import 
org.apache.shardingsphere.metadata.persist.node.metadata.DataSourceMetaDataNode;
+import 
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
 import java.util.Collection;
@@ -37,11 +37,17 @@ import java.util.stream.Collectors;
 /**
  * Data source unit persist service.
  */
-@RequiredArgsConstructor
 public final class DataSourceUnitPersistService {
     
     private final PersistRepository repository;
     
+    private final MetaDataVersionPersistService metaDataVersionPersistService;
+    
+    public DataSourceUnitPersistService(final PersistRepository repository) {
+        this.repository = repository;
+        metaDataVersionPersistService = new 
MetaDataVersionPersistService(repository);
+    }
+    
     /**
      * Load data source pool properties map.
      *
@@ -77,7 +83,7 @@ public final class DataSourceUnitPersistService {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (Entry<String, DataSourcePoolProperties> entry : 
dataSourcePropsMap.entrySet()) {
             String activeVersion = getDataSourceActiveVersion(databaseName, 
entry.getKey());
-            List<String> versions = 
repository.getChildrenKeys(DataSourceMetaDataNode.getDataSourceUnitVersionsNode(databaseName,
 entry.getKey()));
+            List<String> versions = 
metaDataVersionPersistService.getVersions(DataSourceMetaDataNode.getDataSourceUnitVersionsNode(databaseName,
 entry.getKey()));
             String nextActiveVersion = versions.isEmpty() ? 
MetaDataVersion.DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
             
repository.persist(DataSourceMetaDataNode.getDataSourceUnitVersionNode(databaseName,
 entry.getKey(), nextActiveVersion),
                     YamlEngine.marshal(new 
YamlDataSourceConfigurationSwapper().swapToMap(entry.getValue())));
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
index fe4b1bf7720..41fc68e35d5 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfigurati
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import 
org.apache.shardingsphere.metadata.persist.node.metadata.DatabaseRuleMetaDataNode;
 import 
org.apache.shardingsphere.metadata.persist.service.config.RepositoryTuplePersistService;
+import 
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.mode.tuple.RepositoryTuple;
 import org.apache.shardingsphere.mode.tuple.RepositoryTupleSwapperEngine;
@@ -46,9 +47,12 @@ public final class DatabaseRulePersistService {
     
     private final RepositoryTuplePersistService repositoryTuplePersistService;
     
+    private final MetaDataVersionPersistService metaDataVersionPersistService;
+    
     public DatabaseRulePersistService(final PersistRepository repository) {
         this.repository = repository;
         repositoryTuplePersistService = new 
RepositoryTuplePersistService(repository);
+        metaDataVersionPersistService = new 
MetaDataVersionPersistService(repository);
     }
     
     /**
@@ -83,7 +87,7 @@ public final class DatabaseRulePersistService {
     private Collection<MetaDataVersion> persistDataNodes(final String 
databaseName, final String ruleName, final Collection<RepositoryTuple> 
repositoryTuples) {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
-            List<String> versions = 
repository.getChildrenKeys(DatabaseRuleMetaDataNode.getDatabaseRuleVersionsNode(databaseName,
 ruleName, each.getKey()));
+            List<String> versions = 
metaDataVersionPersistService.getVersions(DatabaseRuleMetaDataNode.getDatabaseRuleVersionsNode(databaseName,
 ruleName, each.getKey()));
             String nextVersion = versions.isEmpty() ? 
MetaDataVersion.DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
             
repository.persist(DatabaseRuleMetaDataNode.getDatabaseRuleVersionNode(databaseName,
 ruleName, each.getKey(), nextVersion), each.getValue());
             if (Strings.isNullOrEmpty(getActiveVersion(databaseName, ruleName, 
each.getKey()))) {
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
index d9bea638983..7b59e74dbc6 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
@@ -88,7 +88,7 @@ public final class GlobalRulePersistService {
     private Collection<MetaDataVersion> persistTuples(final 
Collection<RepositoryTuple> repositoryTuples) {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
-            List<String> versions = 
repository.getChildrenKeys(GlobalNode.getGlobalRuleVersionsNode(each.getKey()));
+            List<String> versions = 
metaDataVersionPersistService.getVersions(GlobalNode.getGlobalRuleVersionsNode(each.getKey()));
             String nextActiveVersion = versions.isEmpty() ? 
MetaDataVersion.DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
             
repository.persist(GlobalNode.getGlobalRuleVersionNode(each.getKey(), 
nextActiveVersion), each.getValue());
             if 
(Strings.isNullOrEmpty(repository.query(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey()))))
 {
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
index d479f180873..c7e35fbbeab 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
@@ -55,7 +55,7 @@ public final class PropertiesPersistService {
      * @param props properties
      */
     public void persist(final Properties props) {
-        List<String> versions = 
repository.getChildrenKeys(GlobalNode.getPropsVersionsNode());
+        List<String> versions = 
metaDataVersionPersistService.getVersions(GlobalNode.getPropsVersionsNode());
         String nextActiveVersion = versions.isEmpty() ? 
MetaDataVersion.DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
         repository.persist(GlobalNode.getPropsVersionNode(nextActiveVersion), 
YamlEngine.marshal(props));
         if (Strings.isNullOrEmpty(getActiveVersion())) {
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/TableMetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/TableMetaDataPersistService.java
index 4e7dd91fb18..397d9a802d7 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/TableMetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/TableMetaDataPersistService.java
@@ -83,7 +83,7 @@ public final class TableMetaDataPersistService {
         Collection<MetaDataVersion> metaDataVersions = new LinkedList<>();
         for (Entry<String, ShardingSphereTable> entry : tables.entrySet()) {
             String tableName = entry.getKey().toLowerCase();
-            List<String> versions = 
repository.getChildrenKeys(TableMetaDataNode.getTableVersionsNode(databaseName, 
schemaName, tableName));
+            List<String> versions = 
metaDataVersionPersistService.getVersions(TableMetaDataNode.getTableVersionsNode(databaseName,
 schemaName, tableName));
             String nextActiveVersion = versions.isEmpty() ? 
MetaDataVersion.DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
             if (null != entry.getValue()) {
                 
repository.persist(TableMetaDataNode.getTableVersionNode(databaseName, 
schemaName, tableName, nextActiveVersion),
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/ViewMetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/ViewMetaDataPersistService.java
index 0071f499c0d..68092d1b16a 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/ViewMetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/ViewMetaDataPersistService.java
@@ -83,7 +83,7 @@ public final class ViewMetaDataPersistService {
         Collection<MetaDataVersion> metaDataVersions = new LinkedList<>();
         for (Entry<String, ShardingSphereView> entry : views.entrySet()) {
             String viewName = entry.getKey().toLowerCase();
-            List<String> versions = 
repository.getChildrenKeys(ViewMetaDataNode.getViewVersionsNode(databaseName, 
schemaName, viewName));
+            List<String> versions = 
metaDataVersionPersistService.getVersions(ViewMetaDataNode.getViewVersionsNode(databaseName,
 schemaName, viewName));
             String nextActiveVersion = versions.isEmpty() ? 
MetaDataVersion.DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
             
repository.persist(ViewMetaDataNode.getViewVersionNode(databaseName, 
schemaName, viewName, nextActiveVersion),
                     YamlEngine.marshal(new 
YamlViewSwapper().swapToYamlConfiguration(entry.getValue())));
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 df8bc1cd5a8..3abf8a17197 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
@@ -21,6 +21,7 @@ import com.sphereex.dbplusengine.SphereEx;
 import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 
 import java.util.Collection;
+import java.util.List;
 
 /**
  * Meta data version based registry service.
@@ -50,7 +51,7 @@ public interface MetaDataVersionBasedPersistService {
      * @return version path
      */
     String getVersionPathByActiveVersion(String path, String activeVersion);
-    
+
     /**
      * Switch active version without consistency.
      *
@@ -58,4 +59,12 @@ public interface MetaDataVersionBasedPersistService {
      */
     @SphereEx
     void switchActiveVersionWithoutConsistency(Collection<MetaDataVersion> 
versions);
+
+    /**
+     * Get versions.
+     *
+     * @param path path
+     * @return versions
+     */
+    List<String> getVersions(String path);
 }
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 fe4eba79bd4..74091e55e4e 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
@@ -26,14 +26,13 @@ import 
org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
 import java.util.Collection;
+import java.util.List;
 
 /**
  * Meta data version persist service.
  */
 @RequiredArgsConstructor
-// SPEX ADDED: BEGIN
 @Slf4j
-// SPEX ADDED: END
 public final class MetaDataVersionPersistService implements 
MetaDataVersionBasedPersistService {
     
     private final PersistRepository repository;
@@ -68,7 +67,7 @@ public final class MetaDataVersionPersistService implements 
MetaDataVersionBased
     public String getVersionPathByActiveVersion(final String path, final 
String activeVersion) {
         return 
repository.query(DatabaseMetaDataNode.getVersionNodeByActiveVersionPath(path, 
activeVersion));
     }
-    
+
     @SphereEx
     @Override
     public void switchActiveVersionWithoutConsistency(final 
Collection<MetaDataVersion> metaDataVersions) {
@@ -80,4 +79,14 @@ public final class MetaDataVersionPersistService implements 
MetaDataVersionBased
             repository.deleteWithoutConsistency(each.getVersionsNodePath());
         }
     }
+
+    @Override
+    public List<String> getVersions(final String path) {
+        List<String> result = repository.getChildrenKeys(path);
+        if (result.size() > 1) {
+            log.warn("There are multiple versions of :{}, please check the 
configuration.", path);
+            result.sort((v1, v2) -> Integer.compare(Integer.parseInt(v2), 
Integer.parseInt(v1)));
+        }
+        return result;
+    }
 }
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistServiceTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistServiceTest.java
index ac806ddf942..6cc8825387a 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistServiceTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistServiceTest.java
@@ -59,6 +59,7 @@ class GlobalRulePersistServiceTest {
     
     @BeforeEach
     void setUp() throws ReflectiveOperationException {
+        metaDataVersionPersistService = new 
MetaDataVersionPersistService(repository);
         globalRulePersistService = new GlobalRulePersistService(repository, 
metaDataVersionPersistService);
         
Plugins.getMemberAccessor().set(GlobalRulePersistService.class.getDeclaredField("repositoryTuplePersistService"),
 globalRulePersistService, repositoryTuplePersistService);
     }
@@ -100,6 +101,7 @@ class GlobalRulePersistServiceTest {
         YamlRuleConfiguration yamlRuleConfig = new 
MetaDataYamlRuleConfigurationFixture();
         
when(swapper.swapToYamlConfiguration(ruleConfig)).thenReturn(yamlRuleConfig);
         
when(repository.getChildrenKeys("/rules/fixture/versions")).thenReturn(Collections.emptyList());
+        when(repository.query("/rules/fixture/active_version")).thenReturn("", 
"0");
         globalRulePersistService.persist(Collections.singleton(ruleConfig));
         verify(repository).persist("/rules/fixture/versions/0", "{}" + 
System.lineSeparator());
         verify(repository).persist("/rules/fixture/active_version", "0");
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistServiceTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistServiceTest.java
index fb7c5a491b1..4fbd285ae82 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistServiceTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistServiceTest.java
@@ -33,7 +33,6 @@ import java.util.Properties;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -45,11 +44,9 @@ class PropertiesPersistServiceTest {
     @Mock
     private PersistRepository repository;
     
-    @Mock
-    private MetaDataVersionPersistService metaDataVersionPersistService;
-    
     @BeforeEach
     void setUp() {
+        MetaDataVersionPersistService metaDataVersionPersistService = new 
MetaDataVersionPersistService(repository);
         persistService = new PropertiesPersistService(repository, 
metaDataVersionPersistService);
         when(repository.query("/props/active_version")).thenReturn("0");
     }
@@ -69,11 +66,10 @@ class PropertiesPersistServiceTest {
     
     @Test
     void assertPersistWithEmptyActiveVersion() {
-        when(repository.query("/props/active_version")).thenReturn("");
+        when(repository.query("/props/active_version")).thenReturn("", "0");
         persistService.persist(PropertiesBuilder.build(new Property("k", 
"v")));
         verify(repository).persist("/props/versions/0", "k: v" + 
System.lineSeparator());
         verify(repository).persist("/props/active_version", "0");
-        verify(metaDataVersionPersistService).switchActiveVersion(any());
     }
     
     @Test
@@ -81,6 +77,6 @@ class PropertiesPersistServiceTest {
         
when(repository.getChildrenKeys("/props/versions")).thenReturn(Collections.singletonList("10"));
         persistService.persist(PropertiesBuilder.build(new Property("k", 
"v")));
         verify(repository).persist("/props/versions/11", "k: v" + 
System.lineSeparator());
-        verify(metaDataVersionPersistService).switchActiveVersion(any());
+        verify(repository).persist("/props/active_version", "11");
     }
 }
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/TableMetaDataPersistServiceTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/TableMetaDataPersistServiceTest.java
index 07e1884bed4..e1263c5a3b5 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/TableMetaDataPersistServiceTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/TableMetaDataPersistServiceTest.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.metadata.persist.service.metadata.table;
 
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
-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;
@@ -30,10 +29,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import java.util.Collections;
 import java.util.Map;
 
-import static 
org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
@@ -48,11 +45,9 @@ class TableMetaDataPersistServiceTest {
     @Mock
     private PersistRepository repository;
     
-    @Mock
-    private MetaDataVersionPersistService metaDataVersionPersistService;
-    
     @BeforeEach
     void setUp() {
+        MetaDataVersionPersistService metaDataVersionPersistService = new 
MetaDataVersionPersistService(repository);
         persistService = new TableMetaDataPersistService(repository, 
metaDataVersionPersistService);
     }
     
@@ -68,11 +63,10 @@ class TableMetaDataPersistServiceTest {
     
     @Test
     void assertPersistWithoutVersion() {
+        
when(repository.query("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version")).thenReturn("",
 "0");
         persistService.persist("foo_db", "foo_schema", 
Collections.singletonMap("foo_tbl", mock(ShardingSphereTable.class)));
         
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/0",
 "{}" + System.lineSeparator());
         
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version",
 "0");
-        verify(metaDataVersionPersistService).switchActiveVersion(
-                deepEq(Collections.singletonList(new 
MetaDataVersion("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", null, 
"0"))));
     }
     
     @Test
@@ -81,9 +75,7 @@ class TableMetaDataPersistServiceTest {
         
when(repository.query("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version")).thenReturn("10");
         persistService.persist("foo_db", "foo_schema", 
Collections.singletonMap("foo_tbl", mock(ShardingSphereTable.class)));
         
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/11",
 "{}" + System.lineSeparator());
-        verify(repository, 
times(0)).persist(eq("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"),
 any());
-        verify(metaDataVersionPersistService).switchActiveVersion(
-                deepEq(Collections.singletonList(new 
MetaDataVersion("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "10", 
"11"))));
+        verify(repository, 
times(1)).persist(eq("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"),
 eq("11"));
     }
     
     @Test
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/ViewMetaDataPersistServiceTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/ViewMetaDataPersistServiceTest.java
index 4d2502ecacd..140253fd72e 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/ViewMetaDataPersistServiceTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/table/ViewMetaDataPersistServiceTest.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.metadata.persist.service.metadata.table;
 
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
-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;
@@ -30,10 +29,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import java.util.Collections;
 import java.util.Map;
 
-import static 
org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
@@ -48,11 +45,9 @@ class ViewMetaDataPersistServiceTest {
     @Mock
     private PersistRepository repository;
     
-    @Mock
-    private MetaDataVersionPersistService metaDataVersionPersistService;
-    
     @BeforeEach
     void setUp() {
+        MetaDataVersionPersistService metaDataVersionPersistService = new 
MetaDataVersionPersistService(repository);
         persistService = new ViewMetaDataPersistService(repository, 
metaDataVersionPersistService);
     }
     
@@ -68,10 +63,10 @@ class ViewMetaDataPersistServiceTest {
     
     @Test
     void assertPersistWithoutVersion() {
+        
when(repository.query("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version")).thenReturn("",
 "0");
         persistService.persist("foo_db", "foo_schema", 
Collections.singletonMap("foo_view", mock(ShardingSphereView.class)));
         
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0",
 "{}" + System.lineSeparator());
         
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
 "0");
-        
verify(metaDataVersionPersistService).switchActiveVersion(deepEq(Collections.singletonList(new
 MetaDataVersion("/metadata/foo_db/schemas/foo_schema/views/foo_view", null, 
"0"))));
     }
     
     @Test
@@ -80,9 +75,7 @@ class ViewMetaDataPersistServiceTest {
         
when(repository.query("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version")).thenReturn("10");
         persistService.persist("foo_db", "foo_schema", 
Collections.singletonMap("foo_view", mock(ShardingSphereView.class)));
         
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/11",
 "{}" + System.lineSeparator());
-        verify(repository, 
times(0)).persist(eq("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version"),
 any());
-        verify(metaDataVersionPersistService).switchActiveVersion(
-                deepEq(Collections.singletonList(new 
MetaDataVersion("/metadata/foo_db/schemas/foo_schema/views/foo_view", "10", 
"11"))));
+        verify(repository, 
times(1)).persist(eq("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version"),
 eq("11"));
     }
     
     @Test
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistServiceTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistServiceTest.java
index 8d86e733e0a..d2c3e0b43c7 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistServiceTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistServiceTest.java
@@ -63,4 +63,10 @@ class MetaDataVersionPersistServiceTest {
         when(repository.query("foo_db/versions/1")).thenReturn("foo_path");
         
assertThat(persistService.getVersionPathByActiveVersion("foo_db/active_version",
 "1"), is("foo_path"));
     }
+    
+    @Test
+    void assertGetVersions() {
+        
when(repository.getChildrenKeys("foo_db/versions")).thenReturn(Arrays.asList("1",
 "0", "2", "10"));
+        assertThat(persistService.getVersions("foo_db/versions"), 
is(Arrays.asList("10", "2", "1", "0")));
+    }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index d57b4f87dbe..89be75ad02e 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -46,7 +46,6 @@ import 
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolD
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import org.apache.shardingsphere.infra.lock.GlobalLockNames;
-import org.apache.shardingsphere.infra.lock.GlobalLockNames;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
@@ -68,7 +67,6 @@ import 
org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.lock.GlobalLockDefinition;
-import org.apache.shardingsphere.mode.lock.GlobalLockDefinition;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
 import 
org.apache.shardingsphere.mode.metadata.decorator.RuleConfigurationPersistDecorateEngine;
 import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource;
diff --git 
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
 
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
index e14de5ec342..6ce3c0034a9 100644
--- 
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
+++ 
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
@@ -105,6 +105,9 @@ public final class ShowTablesExecutor implements 
DatabaseAdminQueryExecutor {
     }
     
     private Collection<ShardingSphereTable> getTables(final String 
databaseName, @SphereEx final Grantee grantee) {
+        if (null == 
ProxyContext.getInstance().getContextManager().getDatabase(databaseName).getSchema(databaseName))
 {
+            return Collections.emptyList();
+        }
         @SphereEx(Type.MODIFY)
         Collection<ShardingSphereTable> tables = 
ProxyContext.getInstance().getContextManager().getDatabase(databaseName).getSchema(databaseName).getTables().values();
         Collection<ShardingSphereTable> filteredTables = filterByLike(tables);
@@ -125,7 +128,7 @@ public final class ShowTablesExecutor implements 
DatabaseAdminQueryExecutor {
         AuthorityChecker authorityChecker = new 
AuthorityChecker(authorityRule, grantee);
         return tables.stream().filter(each -> 
authorityChecker.isAuthorized(databaseName, 
each.getName())).collect(Collectors.toList());
     }
-    
+
     private Optional<Pattern> getLikePattern() {
         if (!sqlStatement.getFilter().isPresent()) {
             return Optional.empty();


Reply via email to