This is an automated email from the ASF dual-hosted git repository. zhangliang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push: new b5f26183451 Refactor metadata version type from String to int (#34563) b5f26183451 is described below commit b5f26183451cffc9d3bb411dce9c072da4c3af32 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Wed Feb 5 23:32:20 2025 +0800 Refactor metadata version type from String to int (#34563) * Refactor activeVersion type from String to int * Refactor metadata version type from String to int * Refactor metadata version type from String to int * Refactor metadata version type from String to int * Refactor metadata version type from String to int --- .../infra/metadata/version/MetaDataVersion.java | 12 ++++++------ .../infra/metadata/version/MetaDataVersionTest.java | 6 +++--- .../manager/rule/DatabaseRuleItemManager.java | 2 +- .../config/database/DataSourceUnitPersistService.java | 19 +++++++++++-------- .../config/database/DatabaseRulePersistService.java | 13 +++++++------ .../config/global/GlobalRulePersistService.java | 18 ++++++++++++------ .../config/global/PropertiesPersistService.java | 16 +++++++++------- .../metadata/service/TableMetaDataPersistService.java | 17 ++++++++++------- .../metadata/service/ViewMetaDataPersistService.java | 16 +++++++++------- .../version/MetaDataVersionPersistService.java | 16 ++++++++-------- .../database/DataSourceUnitPersistServiceTest.java | 6 +++--- .../database/DatabaseRulePersistServiceTest.java | 10 +++++----- .../version/MetaDataVersionPersistServiceTest.java | 6 +++--- .../mode/node/path/GlobalPropertiesNodePath.java | 4 ++-- .../mode/node/path/GlobalRuleNodePath.java | 6 +++--- .../path/metadata/DataSourceMetaDataNodePath.java | 16 ++-------------- .../node/path/metadata/DatabaseMetaDataNodePath.java | 2 +- .../path/metadata/DatabaseRuleMetaDataNodePath.java | 4 ++-- .../node/path/metadata/TableMetaDataNodePath.java | 4 ++-- .../mode/node/path/metadata/ViewMetaDataNodePath.java | 4 ++-- .../mode/node/path/DatabaseMetaDataNodePathTest.java | 2 +- .../mode/node/path/GlobalPropertiesNodePathTest.java | 2 +- .../mode/node/path/GlobalRuleNodePathTest.java | 2 +- .../path/metadata/DataSourceMetaDataNodePathTest.java | 7 +------ .../metadata/DatabaseRuleMetaDataNodePathTest.java | 2 +- .../node/path/metadata/TableMetaDataNodePathTest.java | 2 +- .../node/path/metadata/ViewMetaDataNodePathTest.java | 2 +- .../mode/spi/rule/item/alter/AlterNamedRuleItem.java | 2 +- .../mode/spi/rule/item/alter/AlterRuleItem.java | 2 +- .../mode/spi/rule/item/alter/AlterUniqueRuleItem.java | 2 +- .../rule/type/NamedRuleItemChangedHandler.java | 2 +- .../rule/type/UniqueRuleItemChangedHandler.java | 2 +- .../rule/RuleConfigurationChangedHandlerTest.java | 8 ++++---- .../standalone/changed/RuleItemChangedBuilder.java | 15 +++++++-------- 34 files changed, 124 insertions(+), 125 deletions(-) diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java index a74ec55b3ee..7d6d2684cf6 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java @@ -27,7 +27,7 @@ import lombok.RequiredArgsConstructor; @Getter public final class MetaDataVersion { - public static final String DEFAULT_VERSION = "0"; + public static final int DEFAULT_VERSION = 0; private static final String ACTIVE_VERSION = "active_version"; @@ -35,12 +35,12 @@ public final class MetaDataVersion { private final String key; - private final String currentActiveVersion; + private final Integer currentActiveVersion; - private final String nextActiveVersion; + private final Integer nextActiveVersion; public MetaDataVersion(final String key) { - this(key, "", ""); + this(key, null, null); } /** @@ -58,8 +58,8 @@ public final class MetaDataVersion { * @param version version * @return path of versions node */ - public String getVersionsNodePath(final String version) { - return String.join("/", key, VERSIONS, version); + public String getVersionsNodePath(final int version) { + return String.join("/", key, VERSIONS, String.valueOf(version)); } /** diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java index 1bdd7410130..e4f6ebe853a 100644 --- a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java +++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java @@ -26,16 +26,16 @@ class MetaDataVersionTest { @Test void assertGetActiveVersionNodePath() { - assertThat(new MetaDataVersion("foo", "0", "1").getActiveVersionNodePath(), is("foo/active_version")); + assertThat(new MetaDataVersion("foo", 0, 1).getActiveVersionNodePath(), is("foo/active_version")); } @Test void assertGetVersionsNodePath() { - assertThat(new MetaDataVersion("foo", "0", "1").getVersionsNodePath("0"), is("foo/versions/0")); + assertThat(new MetaDataVersion("foo", 0, 1).getVersionsNodePath(0), is("foo/versions/0")); } @Test void assertGetVersionsPath() { - assertThat(new MetaDataVersion("foo", "0", "1").getVersionsPath(), is("foo/versions")); + assertThat(new MetaDataVersion("foo", 0, 1).getVersionsPath(), is("foo/versions")); } } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java index 10784e66674..b7a5daabff5 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java @@ -49,7 +49,7 @@ public final class DatabaseRuleItemManager { */ @SuppressWarnings({"rawtypes", "unchecked"}) public void alter(final AlterRuleItem alterRuleItem) throws SQLException { - Preconditions.checkArgument(alterRuleItem.getActiveVersion().equals(metaDataPersistFacade.getRepository().query(alterRuleItem.getActiveVersionKey())), + Preconditions.checkArgument(String.valueOf(alterRuleItem.getActiveVersion()).equals(metaDataPersistFacade.getRepository().query(alterRuleItem.getActiveVersionKey())), "Invalid active version: %s of key: %s", alterRuleItem.getActiveVersion(), alterRuleItem.getActiveVersionKey()); RuleItemConfigurationChangedProcessor processor = TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class, alterRuleItem.getType()); String yamlContent = metaDataPersistFacade.getMetaDataVersionService().getVersionPathByActiveVersion(alterRuleItem.getActiveVersionKey(), alterRuleItem.getActiveVersion()); diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java index 7da1f0bc61b..93b43dd7df8 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java @@ -71,7 +71,9 @@ public final class DataSourceUnitPersistService { */ @SuppressWarnings("unchecked") public DataSourcePoolProperties load(final String databaseName, final String dataSourceName) { - String dataSourceValue = repository.query(DataSourceMetaDataNodePath.getStorageUnitVersionPath(databaseName, dataSourceName, getDataSourceActiveVersion(databaseName, dataSourceName))); + Integer dataSourceActiveVersion = getDataSourceActiveVersion(databaseName, dataSourceName); + String dataSourceValue = repository.query( + DataSourceMetaDataNodePath.getStorageUnitVersionPath(databaseName, dataSourceName, null == dataSourceActiveVersion ? MetaDataVersion.DEFAULT_VERSION : dataSourceActiveVersion)); return yamlDataSourceConfigurationSwapper.swapToDataSourcePoolProperties(YamlEngine.unmarshal(dataSourceValue, Map.class)); } @@ -85,21 +87,22 @@ public final class DataSourceUnitPersistService { public Collection<MetaDataVersion> persist(final String databaseName, final Map<String, DataSourcePoolProperties> dataSourcePropsMap) { Collection<MetaDataVersion> result = new LinkedList<>(); for (Entry<String, DataSourcePoolProperties> entry : dataSourcePropsMap.entrySet()) { - String activeVersion = getDataSourceActiveVersion(databaseName, entry.getKey()); - List<String> versions = metaDataVersionPersistService.getVersions(DataSourceMetaDataNodePath.getStorageUnitVersionsPath(databaseName, entry.getKey())); - String nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : String.valueOf(Integer.parseInt(versions.get(0)) + 1); + Integer activeVersion = getDataSourceActiveVersion(databaseName, entry.getKey()); + List<Integer> versions = metaDataVersionPersistService.getVersions(DataSourceMetaDataNodePath.getStorageUnitVersionsPath(databaseName, entry.getKey())); + int nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : versions.get(0) + 1; repository.persist(DataSourceMetaDataNodePath.getStorageUnitVersionPath(databaseName, entry.getKey(), nextActiveVersion), YamlEngine.marshal(yamlDataSourceConfigurationSwapper.swapToMap(entry.getValue()))); - if (Strings.isNullOrEmpty(activeVersion)) { - repository.persist(DataSourceMetaDataNodePath.getStorageUnitActiveVersionPath(databaseName, entry.getKey()), MetaDataVersion.DEFAULT_VERSION); + if (null == activeVersion) { + repository.persist(DataSourceMetaDataNodePath.getStorageUnitActiveVersionPath(databaseName, entry.getKey()), String.valueOf(MetaDataVersion.DEFAULT_VERSION)); } result.add(new MetaDataVersion(DataSourceMetaDataNodePath.getStorageUnitPath(databaseName, entry.getKey()), activeVersion, nextActiveVersion)); } return result; } - private String getDataSourceActiveVersion(final String databaseName, final String dataSourceName) { - return repository.query(DataSourceMetaDataNodePath.getStorageUnitActiveVersionPath(databaseName, dataSourceName)); + private Integer getDataSourceActiveVersion(final String databaseName, final String dataSourceName) { + String value = repository.query(DataSourceMetaDataNodePath.getStorageUnitActiveVersionPath(databaseName, dataSourceName)); + return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value); } /** diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java index 5a4cb4db0bb..0fe30357fd5 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java @@ -90,19 +90,20 @@ 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 = metaDataVersionPersistService.getVersions(DatabaseRuleMetaDataNodePath.getVersionsPath(databaseName, ruleName, each.getKey())); - String nextVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : String.valueOf(Integer.parseInt(versions.get(0)) + 1); + List<Integer> versions = metaDataVersionPersistService.getVersions(DatabaseRuleMetaDataNodePath.getVersionsPath(databaseName, ruleName, each.getKey())); + int nextVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : versions.get(0) + 1; repository.persist(DatabaseRuleMetaDataNodePath.getVersionPath(databaseName, ruleName, each.getKey(), nextVersion), each.getValue()); - if (Strings.isNullOrEmpty(getActiveVersion(databaseName, ruleName, each.getKey()))) { - repository.persist(DatabaseRuleMetaDataNodePath.getActiveVersionPath(databaseName, ruleName, each.getKey()), MetaDataVersion.DEFAULT_VERSION); + if (null == getActiveVersion(databaseName, ruleName, each.getKey())) { + repository.persist(DatabaseRuleMetaDataNodePath.getActiveVersionPath(databaseName, ruleName, each.getKey()), String.valueOf(MetaDataVersion.DEFAULT_VERSION)); } result.add(new MetaDataVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName, ruleName, each.getKey()), getActiveVersion(databaseName, ruleName, each.getKey()), nextVersion)); } return result; } - private String getActiveVersion(final String databaseName, final String ruleName, final String key) { - return repository.query(DatabaseRuleMetaDataNodePath.getActiveVersionPath(databaseName, ruleName, key)); + private Integer getActiveVersion(final String databaseName, final String ruleName, final String key) { + String value = repository.query(DatabaseRuleMetaDataNodePath.getActiveVersionPath(databaseName, ruleName, key)); + return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value); } /** diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java index 58f28640e21..f281252e801 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java @@ -25,9 +25,9 @@ import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigur import org.apache.shardingsphere.mode.metadata.persist.config.RepositoryTuplePersistService; import org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService; import org.apache.shardingsphere.mode.node.path.GlobalRuleNodePath; -import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import org.apache.shardingsphere.mode.node.tuple.RepositoryTuple; import org.apache.shardingsphere.mode.node.tuple.YamlRepositoryTupleSwapperEngine; +import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import java.util.Collection; import java.util.LinkedList; @@ -92,15 +92,21 @@ public final class GlobalRulePersistService { private Collection<MetaDataVersion> persistTuples(final Collection<RepositoryTuple> repositoryTuples) { Collection<MetaDataVersion> result = new LinkedList<>(); for (RepositoryTuple each : repositoryTuples) { - List<String> versions = metaDataVersionPersistService.getVersions(GlobalRuleNodePath.getVersionRootPath(each.getKey())); - String nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : String.valueOf(Integer.parseInt(versions.get(0)) + 1); + List<Integer> versions = metaDataVersionPersistService.getVersions(GlobalRuleNodePath.getVersionRootPath(each.getKey())); + int nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : versions.get(0) + 1; repository.persist(GlobalRuleNodePath.getVersionPath(each.getKey(), nextActiveVersion), each.getValue()); String ruleActiveVersionPath = GlobalRuleNodePath.getActiveVersionPath(each.getKey()); - if (Strings.isNullOrEmpty(repository.query(ruleActiveVersionPath))) { - repository.persist(ruleActiveVersionPath, MetaDataVersion.DEFAULT_VERSION); + if (null == getRuleActiveVersion(ruleActiveVersionPath)) { + repository.persist(ruleActiveVersionPath, String.valueOf(MetaDataVersion.DEFAULT_VERSION)); } - result.add(new MetaDataVersion(GlobalRuleNodePath.getRulePath(each.getKey()), repository.query(ruleActiveVersionPath), nextActiveVersion)); + Integer ruleActiveVersion = getRuleActiveVersion(ruleActiveVersionPath); + result.add(new MetaDataVersion(GlobalRuleNodePath.getRulePath(each.getKey()), null == ruleActiveVersion ? MetaDataVersion.DEFAULT_VERSION : ruleActiveVersion, nextActiveVersion)); } return result; } + + private Integer getRuleActiveVersion(final String ruleActiveVersionPath) { + String value = repository.query(ruleActiveVersionPath); + return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value); + } } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java index b7e9a2959dd..952c9be5a2c 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java @@ -45,7 +45,8 @@ public final class PropertiesPersistService { * @return properties */ public Properties load() { - String yamlContent = repository.query(GlobalPropertiesNodePath.getVersionPath(getActiveVersion())); + Integer activeVersion = getActiveVersion(); + String yamlContent = repository.query(GlobalPropertiesNodePath.getVersionPath(null == activeVersion ? 0 : activeVersion)); return Strings.isNullOrEmpty(yamlContent) ? new Properties() : YamlEngine.unmarshal(yamlContent, Properties.class); } @@ -55,16 +56,17 @@ public final class PropertiesPersistService { * @param props properties */ public void persist(final Properties props) { - List<String> versions = metaDataVersionPersistService.getVersions(GlobalPropertiesNodePath.getVersionRootPath()); - String nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : String.valueOf(Integer.parseInt(versions.get(0)) + 1); + List<Integer> versions = metaDataVersionPersistService.getVersions(GlobalPropertiesNodePath.getVersionRootPath()); + int nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : versions.get(0) + 1; repository.persist(GlobalPropertiesNodePath.getVersionPath(nextActiveVersion), YamlEngine.marshal(props)); - if (Strings.isNullOrEmpty(getActiveVersion())) { - repository.persist(GlobalPropertiesNodePath.getActiveVersionPath(), MetaDataVersion.DEFAULT_VERSION); + if (null == getActiveVersion()) { + repository.persist(GlobalPropertiesNodePath.getActiveVersionPath(), String.valueOf(MetaDataVersion.DEFAULT_VERSION)); } metaDataVersionPersistService.switchActiveVersion(Collections.singleton(new MetaDataVersion(GlobalPropertiesNodePath.getRootPath(), getActiveVersion(), nextActiveVersion))); } - private String getActiveVersion() { - return repository.query(GlobalPropertiesNodePath.getActiveVersionPath()); + private Integer getActiveVersion() { + String value = repository.query(GlobalPropertiesNodePath.getActiveVersionPath()); + return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value); } } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java index e6598e8b56f..2bbcb12cf58 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java @@ -66,7 +66,9 @@ public final class TableMetaDataPersistService { * @return loaded table */ public ShardingSphereTable load(final String databaseName, final String schemaName, final String tableName) { - String tableContent = repository.query(TableMetaDataNodePath.getTableVersionPath(databaseName, schemaName, tableName, getActiveVersion(databaseName, schemaName, tableName))); + Integer activeVersion = getActiveVersion(databaseName, schemaName, tableName); + String tableContent = repository.query( + TableMetaDataNodePath.getTableVersionPath(databaseName, schemaName, tableName, null == activeVersion ? MetaDataVersion.DEFAULT_VERSION : activeVersion)); return swapper.swapToObject(YamlEngine.unmarshal(tableContent, YamlShardingSphereTable.class)); } @@ -81,11 +83,11 @@ public final class TableMetaDataPersistService { Collection<MetaDataVersion> metaDataVersions = new LinkedList<>(); for (ShardingSphereTable each : tables) { String tableName = each.getName().toLowerCase(); - List<String> versions = metaDataVersionPersistService.getVersions(TableMetaDataNodePath.getTableVersionsPath(databaseName, schemaName, tableName)); - String nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : String.valueOf(Integer.parseInt(versions.get(0)) + 1); + List<Integer> versions = metaDataVersionPersistService.getVersions(TableMetaDataNodePath.getTableVersionsPath(databaseName, schemaName, tableName)); + int nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : versions.get(0) + 1; repository.persist(TableMetaDataNodePath.getTableVersionPath(databaseName, schemaName, tableName, nextActiveVersion), YamlEngine.marshal(swapper.swapToYamlConfiguration(each))); - if (Strings.isNullOrEmpty(getActiveVersion(databaseName, schemaName, tableName))) { - repository.persist(TableMetaDataNodePath.getTableActiveVersionPath(databaseName, schemaName, tableName), MetaDataVersion.DEFAULT_VERSION); + if (null == getActiveVersion(databaseName, schemaName, tableName)) { + repository.persist(TableMetaDataNodePath.getTableActiveVersionPath(databaseName, schemaName, tableName), String.valueOf(MetaDataVersion.DEFAULT_VERSION)); } metaDataVersions.add( new MetaDataVersion(TableMetaDataNodePath.getTablePath(databaseName, schemaName, tableName), getActiveVersion(databaseName, schemaName, tableName), nextActiveVersion)); @@ -93,8 +95,9 @@ public final class TableMetaDataPersistService { metaDataVersionPersistService.switchActiveVersion(metaDataVersions); } - private String getActiveVersion(final String databaseName, final String schemaName, final String tableName) { - return repository.query(TableMetaDataNodePath.getTableActiveVersionPath(databaseName, schemaName, tableName)); + private Integer getActiveVersion(final String databaseName, final String schemaName, final String tableName) { + String value = repository.query(TableMetaDataNodePath.getTableActiveVersionPath(databaseName, schemaName, tableName)); + return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value); } /** diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java index 309ba679724..b86d3a88c8e 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java @@ -65,7 +65,8 @@ public final class ViewMetaDataPersistService { * @return loaded view */ public ShardingSphereView load(final String databaseName, final String schemaName, final String viewName) { - String view = repository.query(ViewMetaDataNodePath.getViewVersionPath(databaseName, schemaName, viewName, getActiveVersion(databaseName, schemaName, viewName))); + Integer activeVersion = getActiveVersion(databaseName, schemaName, viewName); + String view = repository.query(ViewMetaDataNodePath.getViewVersionPath(databaseName, schemaName, viewName, null == activeVersion ? MetaDataVersion.DEFAULT_VERSION : activeVersion)); return swapper.swapToObject(YamlEngine.unmarshal(view, YamlShardingSphereView.class)); } @@ -80,19 +81,20 @@ public final class ViewMetaDataPersistService { Collection<MetaDataVersion> metaDataVersions = new LinkedList<>(); for (ShardingSphereView each : views) { String viewName = each.getName().toLowerCase(); - List<String> versions = metaDataVersionPersistService.getVersions(ViewMetaDataNodePath.getViewVersionsPath(databaseName, schemaName, viewName)); - String nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : String.valueOf(Integer.parseInt(versions.get(0)) + 1); + List<Integer> versions = metaDataVersionPersistService.getVersions(ViewMetaDataNodePath.getViewVersionsPath(databaseName, schemaName, viewName)); + int nextActiveVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : versions.get(0) + 1; repository.persist(ViewMetaDataNodePath.getViewVersionPath(databaseName, schemaName, viewName, nextActiveVersion), YamlEngine.marshal(swapper.swapToYamlConfiguration(each))); - if (Strings.isNullOrEmpty(getActiveVersion(databaseName, schemaName, viewName))) { - repository.persist(ViewMetaDataNodePath.getViewActiveVersionPath(databaseName, schemaName, viewName), MetaDataVersion.DEFAULT_VERSION); + if (null == getActiveVersion(databaseName, schemaName, viewName)) { + repository.persist(ViewMetaDataNodePath.getViewActiveVersionPath(databaseName, schemaName, viewName), String.valueOf(MetaDataVersion.DEFAULT_VERSION)); } metaDataVersions.add(new MetaDataVersion(ViewMetaDataNodePath.getViewPath(databaseName, schemaName, viewName), getActiveVersion(databaseName, schemaName, viewName), nextActiveVersion)); } metaDataVersionPersistService.switchActiveVersion(metaDataVersions); } - private String getActiveVersion(final String databaseName, final String schemaName, final String viewName) { - return repository.query(ViewMetaDataNodePath.getViewActiveVersionPath(databaseName, schemaName, viewName)); + private Integer getActiveVersion(final String databaseName, final String schemaName, final String viewName) { + String value = repository.query(ViewMetaDataNodePath.getViewActiveVersionPath(databaseName, schemaName, viewName)); + return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value); } /** diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistService.java index f9c7ae8962e..a5bbfe9e4f8 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistService.java @@ -24,7 +24,9 @@ import org.apache.shardingsphere.mode.node.path.metadata.DatabaseMetaDataNodePat import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import java.util.Collection; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; /** * Meta data version persist service. @@ -45,10 +47,8 @@ public final class MetaDataVersionPersistService { if (each.getNextActiveVersion().equals(each.getCurrentActiveVersion())) { continue; } - repository.persist(each.getActiveVersionNodePath(), each.getNextActiveVersion()); - getVersions(each.getVersionsPath()).stream() - .filter(version -> Integer.parseInt(version) < Integer.parseInt(each.getNextActiveVersion())) - .forEach(version -> repository.delete(each.getVersionsNodePath(version))); + repository.persist(each.getActiveVersionNodePath(), String.valueOf(each.getNextActiveVersion())); + getVersions(each.getVersionsPath()).stream().filter(version -> version < each.getNextActiveVersion()).forEach(version -> repository.delete(each.getVersionsNodePath(version))); } } @@ -59,7 +59,7 @@ public final class MetaDataVersionPersistService { * @param activeVersion active version * @return version path */ - public String getVersionPathByActiveVersion(final String path, final String activeVersion) { + public String getVersionPathByActiveVersion(final String path, final int activeVersion) { return repository.query(DatabaseMetaDataNodePath.getVersionPath(path, activeVersion)); } @@ -69,11 +69,11 @@ public final class MetaDataVersionPersistService { * @param path path * @return versions */ - public List<String> getVersions(final String path) { - List<String> result = repository.getChildrenKeys(path); + public List<Integer> getVersions(final String path) { + List<Integer> result = repository.getChildrenKeys(path).stream().map(Integer::parseInt).collect(Collectors.toList()); if (result.size() > 2) { log.warn("There are multiple versions of: {}, please check the configuration.", path); - result.sort((v1, v2) -> Integer.compare(Integer.parseInt(v2), Integer.parseInt(v1))); + result.sort(Collections.reverseOrder()); } return result; } diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java index eafe5190b3b..1388cb715b7 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java @@ -72,11 +72,11 @@ class DataSourceUnitPersistServiceTest { List<MetaDataVersion> actual = new ArrayList<>(persistService.persist("foo_db", dataSourcePropsMap)); assertThat(actual.size(), is(2)); assertThat(actual.get(0).getActiveVersionNodePath(), is("/metadata/foo_db/data_sources/units/foo_ds/active_version")); - assertThat(actual.get(0).getCurrentActiveVersion(), is("10")); - assertThat(actual.get(0).getNextActiveVersion(), is("11")); + assertThat(actual.get(0).getCurrentActiveVersion(), is(10)); + assertThat(actual.get(0).getNextActiveVersion(), is(11)); assertThat(actual.get(1).getActiveVersionNodePath(), is("/metadata/foo_db/data_sources/units/bar_ds/active_version")); assertNull(actual.get(1).getCurrentActiveVersion()); - assertThat(actual.get(1).getNextActiveVersion(), is("0")); + assertThat(actual.get(1).getNextActiveVersion(), is(0)); } @Test diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java index de106745ddc..804edbd88ce 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java @@ -68,7 +68,7 @@ class DatabaseRulePersistServiceTest { assertThat(actual.size(), is(1)); assertThat(actual.iterator().next().getKey(), is("/metadata/foo_db/rules/fixture/fixture")); assertNull(actual.iterator().next().getCurrentActiveVersion()); - assertThat(actual.iterator().next().getNextActiveVersion(), is("0")); + assertThat(actual.iterator().next().getNextActiveVersion(), is(0)); } @Test @@ -78,8 +78,8 @@ class DatabaseRulePersistServiceTest { Collection<MetaDataVersion> actual = persistService.persist("foo_db", Collections.singleton(new MetaDataRuleConfigurationFixture("test"))); assertThat(actual.size(), is(1)); assertThat(actual.iterator().next().getKey(), is("/metadata/foo_db/rules/fixture/fixture")); - assertThat(actual.iterator().next().getCurrentActiveVersion(), is("10")); - assertThat(actual.iterator().next().getNextActiveVersion(), is("11")); + assertThat(actual.iterator().next().getCurrentActiveVersion(), is(10)); + assertThat(actual.iterator().next().getNextActiveVersion(), is(11)); } @Test @@ -93,7 +93,7 @@ class DatabaseRulePersistServiceTest { Collection<MetaDataVersion> actual = persistService.delete("foo_db", Arrays.asList(new MetaDataRuleConfigurationFixture("test"), new NoTupleRuleConfigurationFixture("test"))); assertThat(actual.size(), is(1)); assertThat(actual.iterator().next().getKey(), is("/metadata/foo_db/rules/fixture/fixture")); - assertThat(actual.iterator().next().getCurrentActiveVersion(), is("")); - assertThat(actual.iterator().next().getNextActiveVersion(), is("")); + assertNull(actual.iterator().next().getCurrentActiveVersion()); + assertNull(actual.iterator().next().getNextActiveVersion()); } } diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java index e959832d541..115b2e52c25 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java @@ -48,7 +48,7 @@ class MetaDataVersionPersistServiceTest { @Test void assertSwitchActiveVersion() { when(repository.getChildrenKeys("foo_db/versions")).thenReturn(Arrays.asList("1", "0")); - persistService.switchActiveVersion(Arrays.asList(new MetaDataVersion("foo_db", "0", "1"), new MetaDataVersion("bar_db", "2", "2"))); + persistService.switchActiveVersion(Arrays.asList(new MetaDataVersion("foo_db", 0, 1), new MetaDataVersion("bar_db", 2, 2))); verify(repository).persist("foo_db/active_version", "1"); verify(repository).delete("foo_db/versions/0"); } @@ -56,12 +56,12 @@ class MetaDataVersionPersistServiceTest { @Test void assertGetVersionPathByActiveVersion() { when(repository.query("foo_db/versions/1")).thenReturn("foo_path"); - assertThat(persistService.getVersionPathByActiveVersion("foo_db/active_version", "1"), is("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"))); + assertThat(persistService.getVersions("foo_db/versions"), is(Arrays.asList(10, 2, 1, 0))); } } diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/GlobalPropertiesNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/GlobalPropertiesNodePath.java index 23a4ff0935c..cb9276f3a71 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/GlobalPropertiesNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/GlobalPropertiesNodePath.java @@ -59,8 +59,8 @@ public final class GlobalPropertiesNodePath { * @param version version * @return properties version path */ - public static String getVersionPath(final String version) { - return String.join("/", getVersionRootPath(), version); + public static String getVersionPath(final int version) { + return String.join("/", getVersionRootPath(), String.valueOf(version)); } /** diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/GlobalRuleNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/GlobalRuleNodePath.java index c90b8747ad9..838d7067c2c 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/GlobalRuleNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/GlobalRuleNodePath.java @@ -76,8 +76,8 @@ public final class GlobalRuleNodePath { * @param version version * @return global rule version path */ - public static String getVersionPath(final String ruleTypeName, final String version) { - return String.join("/", getVersionRootPath(ruleTypeName), version); + public static String getVersionPath(final String ruleTypeName, final int version) { + return String.join("/", getVersionRootPath(ruleTypeName), String.valueOf(version)); } /** @@ -110,7 +110,7 @@ public final class GlobalRuleNodePath { * @return found version */ public static Optional<String> findVersion(final String ruleTypeName, final String path) { - Pattern pattern = Pattern.compile(getVersionPath(ruleTypeName, VERSION_PATTERN) + "$", Pattern.CASE_INSENSITIVE); + Pattern pattern = Pattern.compile(String.join("/", getVersionRootPath(ruleTypeName), VERSION_PATTERN) + "$", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(path); return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty(); } diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePath.java index da7a6f575d8..3f603240b06 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePath.java @@ -104,8 +104,8 @@ public final class DataSourceMetaDataNodePath { * @param version version * @return storage unit version path */ - public static String getStorageUnitVersionPath(final String databaseName, final String storageUnitName, final String version) { - return String.join("/", getStorageUnitVersionsPath(databaseName, storageUnitName), version); + public static String getStorageUnitVersionPath(final String databaseName, final String storageUnitName, final int version) { + return String.join("/", getStorageUnitVersionsPath(databaseName, storageUnitName), String.valueOf(version)); } /** @@ -141,18 +141,6 @@ public final class DataSourceMetaDataNodePath { return String.join("/", getStorageNodesPath(databaseName), storageNodeName, VERSIONS_NODE); } - /** - * Get storage node version path. - * - * @param databaseName database name - * @param storageNodeName storage node name - * @param version version - * @return storage node version path - */ - public static String getStorageNodeVersionPath(final String databaseName, final String storageNodeName, final String version) { - return String.join("/", getStorageNodeVersionsPath(databaseName, storageNodeName), version); - } - /** * Get storage node active version path. * diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseMetaDataNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseMetaDataNodePath.java index d2700824540..bc9be176c4f 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseMetaDataNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseMetaDataNodePath.java @@ -87,7 +87,7 @@ public final class DatabaseMetaDataNodePath { * @param activeVersion active version * @return version path */ - public static String getVersionPath(final String rulePath, final String activeVersion) { + public static String getVersionPath(final String rulePath, final int activeVersion) { return rulePath.replace(ACTIVE_VERSION_NODE, VERSIONS_NODE) + "/" + activeVersion; } diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java index 292c83fae93..984e171665e 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java @@ -88,8 +88,8 @@ public final class DatabaseRuleMetaDataNodePath { * @param version version * @return database rule next version */ - public static String getVersionPath(final String databaseName, final String ruleTypeName, final String key, final String version) { - return String.join("/", getVersionsPath(databaseName, ruleTypeName, key), version); + public static String getVersionPath(final String databaseName, final String ruleTypeName, final String key, final int version) { + return String.join("/", getVersionsPath(databaseName, ruleTypeName, key), String.valueOf(version)); } /** diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePath.java index 3e7af84340b..86d5ca54858 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePath.java @@ -100,8 +100,8 @@ public final class TableMetaDataNodePath { * @param version version * @return table version path */ - public static String getTableVersionPath(final String databaseName, final String schemaName, final String tableName, final String version) { - return String.join("/", getTableVersionsPath(databaseName, schemaName, tableName), version); + public static String getTableVersionPath(final String databaseName, final String schemaName, final String tableName, final int version) { + return String.join("/", getTableVersionsPath(databaseName, schemaName, tableName), String.valueOf(version)); } /** diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePath.java index 447bab68ea8..8ff188d8f24 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePath.java @@ -100,8 +100,8 @@ public final class ViewMetaDataNodePath { * @param version version * @return view version path */ - public static String getViewVersionPath(final String databaseName, final String schemaName, final String viewName, final String version) { - return String.join("/", getViewVersionsPath(databaseName, schemaName, viewName), version); + public static String getViewVersionPath(final String databaseName, final String schemaName, final String viewName, final int version) { + return String.join("/", getViewVersionsPath(databaseName, schemaName, viewName), String.valueOf(version)); } /** diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/DatabaseMetaDataNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/DatabaseMetaDataNodePathTest.java index 1426b5779b1..69da23d0cc7 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/DatabaseMetaDataNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/DatabaseMetaDataNodePathTest.java @@ -52,7 +52,7 @@ class DatabaseMetaDataNodePathTest { @Test void assertGetVersionPath() { - assertThat(DatabaseMetaDataNodePath.getVersionPath("foo_rule", "1"), is("foo_rule/1")); + assertThat(DatabaseMetaDataNodePath.getVersionPath("foo_rule", 1), is("foo_rule/1")); } @Test diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/GlobalPropertiesNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/GlobalPropertiesNodePathTest.java index d7b3c1d0d36..69b82a41b77 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/GlobalPropertiesNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/GlobalPropertiesNodePathTest.java @@ -37,7 +37,7 @@ class GlobalPropertiesNodePathTest { @Test void assertGetVersionPath() { - assertThat(GlobalPropertiesNodePath.getVersionPath("0"), is("/props/versions/0")); + assertThat(GlobalPropertiesNodePath.getVersionPath(0), is("/props/versions/0")); } @Test diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/GlobalRuleNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/GlobalRuleNodePathTest.java index c340dc870ec..7ed8a506f68 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/GlobalRuleNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/GlobalRuleNodePathTest.java @@ -44,7 +44,7 @@ class GlobalRuleNodePathTest { @Test void assertGetVersionPath() { - assertThat(GlobalRuleNodePath.getVersionPath("foo_rule", "0"), is("/rules/foo_rule/versions/0")); + assertThat(GlobalRuleNodePath.getVersionPath("foo_rule", 0), is("/rules/foo_rule/versions/0")); } @Test diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePathTest.java index 9237f0b039e..d6c9e664e2b 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePathTest.java @@ -55,7 +55,7 @@ class DataSourceMetaDataNodePathTest { @Test void assertGetStorageUnitVersionPath() { - assertThat(DataSourceMetaDataNodePath.getStorageUnitVersionPath("foo_db", "foo_ds", "0"), is("/metadata/foo_db/data_sources/units/foo_ds/versions/0")); + assertThat(DataSourceMetaDataNodePath.getStorageUnitVersionPath("foo_db", "foo_ds", 0), is("/metadata/foo_db/data_sources/units/foo_ds/versions/0")); } @Test @@ -73,11 +73,6 @@ class DataSourceMetaDataNodePathTest { assertThat(DataSourceMetaDataNodePath.getStorageNodeVersionsPath("foo_db", "foo_ds"), is("/metadata/foo_db/data_sources/nodes/foo_ds/versions")); } - @Test - void assertGetStorageNodeVersionPath() { - assertThat(DataSourceMetaDataNodePath.getStorageNodeVersionPath("foo_db", "foo_ds", "1"), is("/metadata/foo_db/data_sources/nodes/foo_ds/versions/1")); - } - @Test void assertGetStorageNodeActiveVersionPath() { assertThat(DataSourceMetaDataNodePath.getStorageNodeActiveVersionPath("foo_db", "foo_ds"), is("/metadata/foo_db/data_sources/nodes/foo_ds/active_version")); diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java index b118a6f0ae0..e5ae9215866 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java @@ -46,7 +46,7 @@ class DatabaseRuleMetaDataNodePathTest { @Test void assertGetVersionPath() { - assertThat(DatabaseRuleMetaDataNodePath.getVersionPath("foo_db", "foo_rule", "foo_tbl", "1"), is("/metadata/foo_db/rules/foo_rule/foo_tbl/versions/1")); + assertThat(DatabaseRuleMetaDataNodePath.getVersionPath("foo_db", "foo_rule", "foo_tbl", 1), is("/metadata/foo_db/rules/foo_rule/foo_tbl/versions/1")); } @Test diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePathTest.java index f588f8108e2..275e1873929 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePathTest.java @@ -45,7 +45,7 @@ class TableMetaDataNodePathTest { @Test void assertGetTableVersionPath() { - assertThat(TableMetaDataNodePath.getTableVersionPath("foo_db", "foo_schema", "foo_tbl", "0"), is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/0")); + assertThat(TableMetaDataNodePath.getTableVersionPath("foo_db", "foo_schema", "foo_tbl", 0), is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/0")); } @Test diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePathTest.java index 4cc6c839933..0d645bdd97b 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePathTest.java @@ -45,7 +45,7 @@ class ViewMetaDataNodePathTest { @Test void assertGetViewVersionPath() { - assertThat(ViewMetaDataNodePath.getViewVersionPath("foo_db", "foo_schema", "foo_view", "0"), is("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0")); + assertThat(ViewMetaDataNodePath.getViewVersionPath("foo_db", "foo_schema", "foo_view", 0), is("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0")); } @Test diff --git a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterNamedRuleItem.java b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterNamedRuleItem.java index 0b796fbb7dd..0e9c6095424 100644 --- a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterNamedRuleItem.java +++ b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterNamedRuleItem.java @@ -33,7 +33,7 @@ public final class AlterNamedRuleItem implements AlterRuleItem { private final String activeVersionKey; - private final String activeVersion; + private final int activeVersion; private final String type; } diff --git a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterRuleItem.java b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterRuleItem.java index a8667df83c6..e3caa307f49 100644 --- a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterRuleItem.java +++ b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterRuleItem.java @@ -43,5 +43,5 @@ public interface AlterRuleItem extends RuleChangedItem { * * @return active version */ - String getActiveVersion(); + int getActiveVersion(); } diff --git a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterUniqueRuleItem.java b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterUniqueRuleItem.java index db076981cef..d9a70b4c448 100644 --- a/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterUniqueRuleItem.java +++ b/mode/spi/src/main/java/org/apache/shardingsphere/mode/spi/rule/item/alter/AlterUniqueRuleItem.java @@ -31,7 +31,7 @@ public final class AlterUniqueRuleItem implements AlterRuleItem { private final String activeVersionKey; - private final String activeVersion; + private final int activeVersion; private final String type; } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemChangedHandler.java index 053c1612e26..572d22272c3 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemChangedHandler.java @@ -48,7 +48,7 @@ public final class NamedRuleItemChangedHandler { public void handle(final RuleNodePath ruleNodePath, final String databaseName, final String itemName, final String path, final DataChangedEvent event) throws SQLException { String type = ruleNodePath.getRoot().getRuleType() + "." + path; if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) { - contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().alter(new AlterNamedRuleItem(databaseName, itemName, event.getKey(), event.getValue(), type)); + contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().alter(new AlterNamedRuleItem(databaseName, itemName, event.getKey(), Integer.parseInt(event.getValue()), type)); } else if (Type.DELETED == event.getType()) { contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().drop(new DropNamedRuleItem(databaseName, itemName, type)); } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemChangedHandler.java index a1ae4b4645a..8a40f7290b6 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemChangedHandler.java @@ -47,7 +47,7 @@ public final class UniqueRuleItemChangedHandler { public void handle(final RuleNodePath ruleNodePath, final String databaseName, final String path, final DataChangedEvent event) throws SQLException { String type = ruleNodePath.getRoot().getRuleType() + "." + path; if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) { - contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().alter(new AlterUniqueRuleItem(databaseName, event.getKey(), event.getValue(), type)); + contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().alter(new AlterUniqueRuleItem(databaseName, event.getKey(), Integer.parseInt(event.getValue()), type)); } else if (Type.DELETED == event.getType()) { contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().drop(new DropUniqueRuleItem(databaseName, type)); } diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java index c89e54050d7..09546d8be57 100644 --- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java +++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java @@ -92,13 +92,13 @@ class RuleConfigurationChangedHandlerTest { @Test void assertHandleWithNamedRuleItemAdded() throws SQLException { - handler.handle("foo_db", new DataChangedEvent("/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", Type.ADDED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/fixture/rules/fixture/named/xxx/active_version", "0", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(any(AlterNamedRuleItem.class)); } @Test void assertHandleWithNamedRuleItemAltered() throws SQLException { - handler.handle("foo_db", new DataChangedEvent("/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", Type.UPDATED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/fixture/rules/fixture/named/xxx/active_version", "0", Type.UPDATED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(any(AlterNamedRuleItem.class)); } @@ -110,13 +110,13 @@ class RuleConfigurationChangedHandlerTest { @Test void assertHandleWithUniqueRuleItemAdded() throws SQLException { - handler.handle("foo_db", new DataChangedEvent("/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.ADDED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/fixture/rules/fixture/unique/active_version", "0", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(any(AlterUniqueRuleItem.class)); } @Test void assertHandleWithUniqueRuleItemAltered() throws SQLException { - handler.handle("foo_db", new DataChangedEvent("/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.UPDATED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/fixture/rules/fixture/unique/active_version", "0", Type.UPDATED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(any(AlterUniqueRuleItem.class)); } diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java index 8affa2e3a8f..f6138390ad9 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java @@ -17,18 +17,17 @@ package org.apache.shardingsphere.mode.manager.standalone.changed; -import com.google.common.base.Strings; import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader; import org.apache.shardingsphere.mode.event.DataChangedEvent.Type; import org.apache.shardingsphere.mode.node.path.rule.RuleNodePath; import org.apache.shardingsphere.mode.node.path.rule.item.NamedRuleItemNodePath; import org.apache.shardingsphere.mode.node.path.rule.item.UniqueRuleItemNodePath; +import org.apache.shardingsphere.mode.node.spi.RuleNodePathProvider; +import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItem; import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterUniqueRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.drop.DropUniqueRuleItem; -import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItem; -import org.apache.shardingsphere.mode.node.spi.RuleNodePathProvider; import java.util.Map.Entry; import java.util.Optional; @@ -47,7 +46,7 @@ public final class RuleItemChangedBuilder { * @param changedType data changed type * @return built rule item */ - public Optional<RuleChangedItem> build(final String databaseName, final String activeVersionKey, final String activeVersion, final Type changedType) { + public Optional<RuleChangedItem> build(final String databaseName, final String activeVersionKey, final Integer activeVersion, final Type changedType) { for (RuleNodePathProvider each : ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)) { Optional<RuleChangedItem> result = build(each.getRuleNodePath(), databaseName, activeVersionKey, activeVersion, changedType); if (result.isPresent()) { @@ -57,8 +56,8 @@ public final class RuleItemChangedBuilder { return Optional.empty(); } - private Optional<RuleChangedItem> build(final RuleNodePath ruleNodePath, final String databaseName, final String activeVersionKey, final String activeVersion, final Type changedType) { - if (!ruleNodePath.getRoot().isValidatedPath(activeVersionKey) || Type.DELETED != changedType && Strings.isNullOrEmpty(activeVersion)) { + private Optional<RuleChangedItem> build(final RuleNodePath ruleNodePath, final String databaseName, final String activeVersionKey, final Integer activeVersion, final Type changedType) { + if (!ruleNodePath.getRoot().isValidatedPath(activeVersionKey) || Type.DELETED != changedType && null == activeVersion) { return Optional.empty(); } for (Entry<String, NamedRuleItemNodePath> entry : ruleNodePath.getNamedItems().entrySet()) { @@ -80,13 +79,13 @@ public final class RuleItemChangedBuilder { return Optional.empty(); } - private RuleChangedItem create(final String databaseName, final String itemName, final String activeVersionKey, final String activeVersion, final Type changedType, final String type) { + private RuleChangedItem create(final String databaseName, final String itemName, final String activeVersionKey, final Integer activeVersion, final Type changedType, final String type) { return Type.ADDED == changedType || Type.UPDATED == changedType ? new AlterNamedRuleItem(databaseName, itemName, activeVersionKey, activeVersion, type) : new DropNamedRuleItem(databaseName, itemName, type); } - private RuleChangedItem create(final String databaseName, final String activeVersionKey, final String activeVersion, final Type changedType, final String type) { + private RuleChangedItem create(final String databaseName, final String activeVersionKey, final Integer activeVersion, final Type changedType, final String type) { return Type.ADDED == changedType || Type.UPDATED == changedType ? new AlterUniqueRuleItem(databaseName, activeVersionKey, activeVersion, type) : new DropUniqueRuleItem(databaseName, type);