This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 42cefe008fe Fixed the wrong sorting method for metadata version
(#33579)
42cefe008fe is described below
commit 42cefe008fe26a066e528a5c072c3c3769a9ff31
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
---
.../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 +-
.../service/metadata/table/ViewMetaDataPersistService.java | 2 +-
.../version/MetaDataVersionBasedPersistService.java | 9 +++++++++
.../service/version/MetaDataVersionPersistService.java | 13 +++++++++++++
.../config/global/GlobalRulePersistServiceTest.java | 2 ++
.../config/global/PropertiesPersistServiceTest.java | 10 +++-------
.../metadata/table/TableMetaDataPersistServiceTest.java | 14 +++-----------
.../metadata/table/ViewMetaDataPersistServiceTest.java | 13 +++----------
.../service/version/MetaDataVersionPersistServiceTest.java | 6 ++++++
.../mysql/handler/admin/executor/ShowTablesExecutor.java | 3 +++
15 files changed, 69 insertions(+), 39 deletions(-)
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 86d2499d849..11ab3859480 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
@@ -24,6 +24,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;
@@ -44,9 +45,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);
}
/**
@@ -81,7 +85,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 8d22f9bc919..a9935d64260 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
@@ -87,7 +87,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 6140cefdf1e..9191f8e09a3 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
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.metadata.persist.service.version;
import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
import java.util.Collection;
+import java.util.List;
/**
* Meta data version based registry service.
@@ -49,4 +50,12 @@ public interface MetaDataVersionBasedPersistService {
* @return version path
*/
String getVersionPathByActiveVersion(String path, String activeVersion);
+
+ /**
+ * 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 b6d4c56921a..ff056e9467f 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,16 +18,19 @@
package org.apache.shardingsphere.metadata.persist.service.version;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
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
+@Slf4j
public final class MetaDataVersionPersistService implements
MetaDataVersionBasedPersistService {
private final PersistRepository repository;
@@ -52,4 +55,14 @@ public final class MetaDataVersionPersistService implements
MetaDataVersionBased
public String getVersionPathByActiveVersion(final String path, final
String activeVersion) {
return
repository.query(DatabaseMetaDataNode.getVersionNodeByActiveVersionPath(path,
activeVersion));
}
+
+ @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/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 ac28c0643b6..d0c3a332c7d 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
@@ -96,6 +96,9 @@ public final class ShowTablesExecutor implements
DatabaseAdminQueryExecutor {
}
private Collection<ShardingSphereTable> getTables(final String
databaseName) {
+ if (null ==
ProxyContext.getInstance().getContextManager().getDatabase(databaseName).getSchema(databaseName))
{
+ return Collections.emptyList();
+ }
Collection<ShardingSphereTable> tables =
ProxyContext.getInstance().getContextManager().getDatabase(databaseName).getSchema(databaseName).getTables().values();
Collection<ShardingSphereTable> filteredTables = filterByLike(tables);
return
filteredTables.stream().sorted(Comparator.comparing(ShardingSphereTable::getName)).collect(Collectors.toList());