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);

Reply via email to