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 c73abead0e6 Add VersionNodePath.findIdentifierByActiveVersionPath() 
(#34592)
c73abead0e6 is described below

commit c73abead0e645fbec6d1c20f25221ede05192468
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Fri Feb 7 20:10:06 2025 +0800

    Add VersionNodePath.findIdentifierByActiveVersionPath() (#34592)
    
    * Add VersionNodePath.findIdentifierByActiveVersionPath()
    
    * Add VersionNodePath.findIdentifierByActiveVersionPath()
    
    * Add VersionNodePath.findIdentifierByActiveVersionPath()
    
    * Add VersionNodePath.findIdentifierByActiveVersionPath()
    
    * Add VersionNodePath.findIdentifierByActiveVersionPath()
    
    * Add VersionNodePath.findIdentifierByActiveVersionPath()
    
    * Add VersionNodePath.findIdentifierByActiveVersionPath()
    
    * Add VersionNodePath.findIdentifierByActiveVersionPath()
---
 .../node/path/config/GlobalPropertiesNodePath.java | 13 ----------
 .../mode/node/path/config/GlobalRuleNodePath.java  | 15 +++--------
 .../path/metadata/DataSourceMetaDataNodePath.java  | 30 +++++++++-------------
 .../node/path/metadata/TableMetaDataNodePath.java  | 22 +++-------------
 .../node/path/metadata/ViewMetaDataNodePath.java   | 22 +++-------------
 .../mode/node/path/version/VersionNodePath.java    | 26 +++++++++++++++++++
 .../path/config/GlobalPropertiesNodePathTest.java  |  6 -----
 .../node/path/config/GlobalRuleNodePathTest.java   | 17 ------------
 .../metadata/DataSourceMetaDataNodePathTest.java   | 24 -----------------
 .../path/metadata/TableMetaDataNodePathTest.java   | 17 ------------
 .../path/metadata/ViewMetaDataNodePathTest.java    | 17 ------------
 .../node/path/version/VersionNodePathTest.java     | 30 +++++++++++++++++++---
 .../database/metadata/MetaDataChangedHandler.java  | 12 ++++-----
 .../metadata/type/TableChangedHandler.java         |  3 ++-
 .../database/metadata/type/ViewChangedHandler.java |  2 +-
 .../global/type/GlobalRuleChangedHandler.java      |  2 +-
 .../global/type/PropertiesChangedHandler.java      |  2 +-
 .../metadata/MetaDataChangedHandlerTest.java       | 12 ++++-----
 18 files changed, 93 insertions(+), 179 deletions(-)

diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePath.java
index 5eba611e8ef..5b30e622b4a 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePath.java
@@ -21,8 +21,6 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.mode.node.path.version.VersionNodePath;
 
-import java.util.regex.Pattern;
-
 /**
  * Global properties node path.
  */
@@ -48,15 +46,4 @@ public final class GlobalPropertiesNodePath {
     public static VersionNodePath getVersionNodePath() {
         return new VersionNodePath(getRootPath());
     }
-    
-    /**
-     * Is properties active version path.
-     *
-     * @param path path
-     * @return true or false
-     */
-    public static boolean isActiveVersionPath(final String path) {
-        Pattern pattern = 
Pattern.compile(getVersionNodePath().getActiveVersionPath() + "$", 
Pattern.CASE_INSENSITIVE);
-        return pattern.matcher(path).find();
-    }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePath.java
index 7cd2105580a..5e12a06969c 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePath.java
@@ -22,10 +22,6 @@ import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.mode.node.path.NodePathPattern;
 import org.apache.shardingsphere.mode.node.path.version.VersionNodePath;
 
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 /**
  * Global props node path.
  */
@@ -64,14 +60,11 @@ public final class GlobalRuleNodePath {
     }
     
     /**
-     * Find rule type name from active version.
+     * Get global rule version pattern node path.
      *
-     * @param path path to be found
-     * @return found rule type name
+     * @return global rule version pattern node path
      */
-    public static Optional<String> findRuleTypeNameFromActiveVersion(final 
String path) {
-        Pattern pattern = 
Pattern.compile(getVersionNodePath(NodePathPattern.IDENTIFIER).getActiveVersionPath()
 + "$", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(1)) : 
Optional.empty();
+    public static VersionNodePath getVersionPatternNodePath() {
+        return new VersionNodePath(NodePathPattern.IDENTIFIER);
     }
 }
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 07fe36ec461..a511e3f5917 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
@@ -115,37 +115,31 @@ public final class DataSourceMetaDataNodePath {
     }
     
     /**
-     * Find storage unit name by active version path.
+     * Get storage unit version pattern unit path.
      *
-     * @param path path
-     * @return found storage unit name
+     * @return storage unit version pattern node path
      */
-    public static Optional<String> 
findStorageUnitNameByActiveVersionPath(final String path) {
-        Pattern pattern = 
Pattern.compile(getStorageUnitVersionNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getActiveVersionPath(), Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
+    public static VersionNodePath getStorageUnitVersionPatternNodePath() {
+        return new VersionNodePath(String.join("/", 
getStorageUnitsPath(NodePathPattern.IDENTIFIER), NodePathPattern.IDENTIFIER));
     }
     
     /**
-     * Find storage unit name by storage unit path.
+     * Get storage node version pattern node path.
      *
-     * @param path path
-     * @return found storage unit name
+     * @return storage node version pattern node path
      */
-    public static Optional<String> findStorageUnitNameByStorageUnitPath(final 
String path) {
-        Pattern pattern = 
Pattern.compile(getStorageUnitPath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER) + "$", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
+    public static VersionNodePath getStorageNodeVersionPatternNodePath() {
+        return new VersionNodePath(String.join("/", 
getStorageNodesPath(NodePathPattern.IDENTIFIER), NodePathPattern.IDENTIFIER));
     }
     
     /**
-     * Find storage node name by active version path.
+     * Find storage unit name by storage unit path.
      *
      * @param path path
      * @return found storage unit name
      */
-    public static Optional<String> 
findStorageNodeNameByActiveVersionPath(final String path) {
-        Pattern pattern = 
Pattern.compile(getStorageNodeVersionNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getActiveVersionPath(), Pattern.CASE_INSENSITIVE);
+    public static Optional<String> findStorageUnitNameByStorageUnitPath(final 
String path) {
+        Pattern pattern = 
Pattern.compile(getStorageUnitPath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER) + "$", Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
     }
@@ -166,7 +160,7 @@ public final class DataSourceMetaDataNodePath {
      * Is data source root path.
      *
      * @param path path
-     * @return true or false
+     * @return is data source root path or not
      */
     public static boolean isDataSourceRootPath(final String path) {
         return 
Pattern.compile(getDataSourceRootPath(NodePathPattern.IDENTIFIER) + "?", 
Pattern.CASE_INSENSITIVE).matcher(path).find();
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 330709a36e1..96d649836e4 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
@@ -92,25 +92,11 @@ public final class TableMetaDataNodePath {
     }
     
     /**
-     * Get table name by active version path.
+     * Get table version pattern node path.
      *
-     * @param path path
-     * @return table name
-     */
-    public static Optional<String> findTableNameByActiveVersionPath(final 
String path) {
-        Pattern pattern = Pattern.compile(
-                getVersionNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER).getActiveVersionPath(), 
Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(3)) : 
Optional.empty();
-    }
-    
-    /**
-     * Is table active version path.
-     *
-     * @param path path
-     * @return is table active version path or not
+     * @return table version node path
      */
-    public static boolean isTableActiveVersionPath(final String path) {
-        return findTableNameByActiveVersionPath(path).isPresent();
+    public static VersionNodePath getVersionPatternNodePath() {
+        return new VersionNodePath(getTablePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER));
     }
 }
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 e0892d236bc..913e1628bdd 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
@@ -92,25 +92,11 @@ public final class ViewMetaDataNodePath {
     }
     
     /**
-     * Find view name by active version path.
+     * Get view version pattern node path.
      *
-     * @param path path
-     * @return view name
-     */
-    public static Optional<String> findViewNameByActiveVersionPath(final 
String path) {
-        Pattern pattern = Pattern.compile(
-                getVersionNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER).getActiveVersionPath(), 
Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(3)) : 
Optional.empty();
-    }
-    
-    /**
-     * Is view active version path.
-     *
-     * @param path path
-     * @return true or false
+     * @return view version node path
      */
-    public static boolean isViewActiveVersionPath(final String path) {
-        return findViewNameByActiveVersionPath(path).isPresent();
+    public static VersionNodePath getVersionPatternNodePath() {
+        return new VersionNodePath(getViewPath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePath.java
index 24ac29b3498..18534fb1f8a 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePath.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.mode.node.path.version;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
+import java.util.Optional;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
@@ -75,4 +77,28 @@ public final class VersionNodePath {
         Pattern pattern = Pattern.compile(String.join("/", getVersionsPath(), 
VERSION_PATTERN) + "$", Pattern.CASE_INSENSITIVE);
         return pattern.matcher(path).find();
     }
+    
+    /**
+     * Judge whether to active version path.
+     *
+     * @param path to be judged path
+     * @return is active version path or not
+     */
+    public boolean isActiveVersionPath(final String path) {
+        Pattern pattern = Pattern.compile(getActiveVersionPath() + "$", 
Pattern.CASE_INSENSITIVE);
+        return pattern.matcher(path).find();
+    }
+    
+    /**
+     * Find identifier name by active version path.
+     *
+     * @param activeVersionPath active version path
+     * @param identifierGroupIndex identifier group index
+     * @return found identifier
+     */
+    public Optional<String> findIdentifierByActiveVersionPath(final String 
activeVersionPath, final int identifierGroupIndex) {
+        Pattern pattern = Pattern.compile(getActiveVersionPath() + "$", 
Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(activeVersionPath);
+        return matcher.find() ? 
Optional.of(matcher.group(identifierGroupIndex)) : Optional.empty();
+    }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePathTest.java
index 2ebd63b13a8..442f7d096e9 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePathTest.java
@@ -21,7 +21,6 @@ import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class GlobalPropertiesNodePathTest {
     
@@ -36,9 +35,4 @@ class GlobalPropertiesNodePathTest {
         
assertThat(GlobalPropertiesNodePath.getVersionNodePath().getVersionsPath(), 
is("/props/versions"));
         
assertThat(GlobalPropertiesNodePath.getVersionNodePath().getVersionPath(0), 
is("/props/versions/0"));
     }
-    
-    @Test
-    void assertIsActiveVersionPath() {
-        
assertTrue(GlobalPropertiesNodePath.isActiveVersionPath("/props/active_version"));
-    }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePathTest.java
index 9717e6f657f..296ff40fb3f 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePathTest.java
@@ -19,12 +19,8 @@ package org.apache.shardingsphere.mode.node.path.config;
 
 import org.junit.jupiter.api.Test;
 
-import java.util.Optional;
-
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class GlobalRuleNodePathTest {
     
@@ -44,17 +40,4 @@ class GlobalRuleNodePathTest {
         
assertThat(GlobalRuleNodePath.getVersionNodePath("foo_rule").getVersionsPath(), 
is("/rules/foo_rule/versions"));
         
assertThat(GlobalRuleNodePath.getVersionNodePath("foo_rule").getVersionPath(0), 
is("/rules/foo_rule/versions/0"));
     }
-    
-    @Test
-    void assertFindRuleTypeNameFromActiveVersion() {
-        Optional<String> actual = 
GlobalRuleNodePath.findRuleTypeNameFromActiveVersion("/rules/foo_rule/active_version");
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("foo_rule"));
-    }
-    
-    @Test
-    void assertNotFindRuleTypeNameFromActiveVersion() {
-        Optional<String> actual = 
GlobalRuleNodePath.findRuleTypeNameFromActiveVersion("/rules/foo_rule/active_version/xxx");
-        assertFalse(actual.isPresent());
-    }
 }
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 24911d5e611..30259835d3a 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
@@ -67,18 +67,6 @@ class DataSourceMetaDataNodePathTest {
         
assertThat(DataSourceMetaDataNodePath.getStorageNodeVersionNodePath("foo_db", 
"foo_ds").getVersionPath(0), 
is("/metadata/foo_db/data_sources/nodes/foo_ds/versions/0"));
     }
     
-    @Test
-    void assertFindStorageUnitNameByActiveVersionPath() {
-        Optional<String> actual = 
DataSourceMetaDataNodePath.findStorageUnitNameByActiveVersionPath("/metadata/foo_db/data_sources/units/foo_ds/active_version");
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("foo_ds"));
-    }
-    
-    @Test
-    void assertFindStorageUnitNameByActiveVersionPathIfNotFound() {
-        
assertFalse(DataSourceMetaDataNodePath.findStorageUnitNameByActiveVersionPath("/xxx/foo_db/data_sources/units/foo_ds/active_version").isPresent());
-    }
-    
     @Test
     void assertFindStorageUnitNameByStorageUnitPath() {
         Optional<String> actual = 
DataSourceMetaDataNodePath.findStorageUnitNameByStorageUnitPath("/metadata/foo_db/data_sources/units/foo_ds");
@@ -91,18 +79,6 @@ class DataSourceMetaDataNodePathTest {
         
assertFalse(DataSourceMetaDataNodePath.findStorageUnitNameByStorageUnitPath("/xxx/foo_db/data_sources/units/foo_ds").isPresent());
     }
     
-    @Test
-    void assertFindStorageNodeNameByActiveVersionPath() {
-        Optional<String> actual = 
DataSourceMetaDataNodePath.findStorageNodeNameByActiveVersionPath("/metadata/foo_db/data_sources/nodes/foo_ds/active_version");
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("foo_ds"));
-    }
-    
-    @Test
-    void assertFindStorageNodeNameByActiveVersionPathIfNotFound() {
-        
assertFalse(DataSourceMetaDataNodePath.findStorageNodeNameByActiveVersionPath("/xxx/foo_db/data_sources/nodes/foo_ds/active_version").isPresent());
-    }
-    
     @Test
     void assertFindStorageNodeNameByStorageNodePath() {
         Optional<String> actual = 
DataSourceMetaDataNodePath.findStorageNodeNameByStorageNodePath("/metadata/foo_db/data_sources/nodes/foo_ds");
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 418bc674688..dc28a763848 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
@@ -61,21 +61,4 @@ class TableMetaDataNodePathTest {
     void assertIsTablePath() {
         
assertTrue(TableMetaDataNodePath.isTablePath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl"));
     }
-    
-    @Test
-    void assertFindTableNameByActiveVersionPath() {
-        Optional<String> actual = 
TableMetaDataNodePath.findTableNameByActiveVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version");
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("foo_tbl"));
-    }
-    
-    @Test
-    void assertFindTableNameByActiveVersionPathIfNotFound() {
-        
assertFalse(TableMetaDataNodePath.findTableNameByActiveVersionPath("/xxx/foo_db/schemas/foo_schema/tables/foo_tbl/active_version").isPresent());
-    }
-    
-    @Test
-    void assertIsTableActiveVersionPath() {
-        
assertTrue(TableMetaDataNodePath.isTableActiveVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"));
-    }
 }
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 a2535e530a8..a4447b1dbe8 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
@@ -61,21 +61,4 @@ class ViewMetaDataNodePathTest {
     void assertIsViewPath() {
         
assertTrue(ViewMetaDataNodePath.isViewPath("/metadata/foo_db/schemas/foo_schema/views/foo_view"));
     }
-    
-    @Test
-    void assertGetTableNameByActiveVersionNode() {
-        Optional<String> actual = 
ViewMetaDataNodePath.findViewNameByActiveVersionPath("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version");
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("foo_view"));
-    }
-    
-    @Test
-    void assertGetTableNameByActiveVersionNodeIfNotFound() {
-        
assertFalse(ViewMetaDataNodePath.findViewNameByActiveVersionPath("/xxx/foo_db/schemas/foo_schema/views/foo_view/active_version").isPresent());
-    }
-    
-    @Test
-    void assertIsViewActiveVersionPath() {
-        
assertTrue(ViewMetaDataNodePath.isViewActiveVersionPath("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version"));
-    }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePathTest.java
index 0936d6cf139..a6431e37e47 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePathTest.java
@@ -19,6 +19,8 @@ package org.apache.shardingsphere.mode.node.path.version;
 
 import org.junit.jupiter.api.Test;
 
+import java.util.Optional;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -26,7 +28,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class VersionNodePathTest {
     
-    private static final String IDENTIFIER_PATTERN = "([\\w\\-]+)";
+    private final VersionNodePath versionPatternNodePath = new 
VersionNodePath("/metadata/([\\w\\-]+)/schemas/([\\w\\-]+)/tables/([\\w\\-]+)");
     
     @Test
     void assertGetActiveVersionPath() {
@@ -45,8 +47,28 @@ class VersionNodePathTest {
     
     @Test
     void assertIsVersionPath() {
-        assertTrue(new 
VersionNodePath(IDENTIFIER_PATTERN).isVersionPath("foo/versions/0"));
-        assertFalse(new 
VersionNodePath(IDENTIFIER_PATTERN).isVersionPath("foo/versions"));
-        assertFalse(new 
VersionNodePath(IDENTIFIER_PATTERN).isVersionPath("foo/versions/0/xxx"));
+        
assertTrue(versionPatternNodePath.isVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/0"));
+        
assertFalse(versionPatternNodePath.isVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions"));
+        
assertFalse(versionPatternNodePath.isVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/xxx"));
+    }
+    
+    @Test
+    void assertIsActiveVersionPath() {
+        
assertTrue(versionPatternNodePath.isActiveVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"));
+        
assertFalse(versionPatternNodePath.isVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions"));
+    }
+    
+    @Test
+    void assertFindIdentifierByActiveVersionPath() {
+        String path = 
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version";
+        
assertThat(versionPatternNodePath.findIdentifierByActiveVersionPath(path, 1), 
is(Optional.of("foo_db")));
+        
assertThat(versionPatternNodePath.findIdentifierByActiveVersionPath(path, 2), 
is(Optional.of("foo_schema")));
+        
assertThat(versionPatternNodePath.findIdentifierByActiveVersionPath(path, 3), 
is(Optional.of("foo_tbl")));
+    }
+    
+    @Test
+    void assertNotFindIdentifierByActiveVersionPath() {
+        String path = 
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions";
+        
assertFalse(versionPatternNodePath.findIdentifierByActiveVersionPath(path, 
1).isPresent());
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java
index c2309bd92fe..aacfbd68a2e 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java
@@ -94,11 +94,11 @@ public final class MetaDataChangedHandler {
     }
     
     private boolean isTableMetaDataChanged(final String key) {
-        return TableMetaDataNodePath.isTablePath(key) || 
TableMetaDataNodePath.isTableActiveVersionPath(key);
+        return TableMetaDataNodePath.isTablePath(key) || 
TableMetaDataNodePath.getVersionPatternNodePath().isActiveVersionPath(key);
     }
     
     private void handleTableChanged(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& TableMetaDataNodePath.isTableActiveVersionPath(event.getKey())) {
+        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& 
TableMetaDataNodePath.getVersionPatternNodePath().isActiveVersionPath(event.getKey()))
 {
             tableChangedHandler.handleCreatedOrAltered(databaseName, 
schemaName, event);
         } else if (Type.DELETED == event.getType() && 
TableMetaDataNodePath.isTablePath(event.getKey())) {
             tableChangedHandler.handleDropped(databaseName, schemaName, event);
@@ -106,11 +106,11 @@ public final class MetaDataChangedHandler {
     }
     
     private boolean isViewMetaDataChanged(final String key) {
-        return ViewMetaDataNodePath.isViewActiveVersionPath(key) || 
ViewMetaDataNodePath.isViewPath(key);
+        return 
ViewMetaDataNodePath.getVersionPatternNodePath().isActiveVersionPath(key) || 
ViewMetaDataNodePath.isViewPath(key);
     }
     
     private void handleViewChanged(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& ViewMetaDataNodePath.isViewActiveVersionPath(event.getKey())) {
+        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& 
ViewMetaDataNodePath.getVersionPatternNodePath().isActiveVersionPath(event.getKey()))
 {
             viewChangedHandler.handleCreatedOrAltered(databaseName, 
schemaName, event);
         } else if (Type.DELETED == event.getType() && 
ViewMetaDataNodePath.isViewPath(event.getKey())) {
             viewChangedHandler.handleDropped(databaseName, schemaName, event);
@@ -118,7 +118,7 @@ public final class MetaDataChangedHandler {
     }
     
     private void handleDataSourceChanged(final String databaseName, final 
DataChangedEvent event) {
-        Optional<String> storageUnitName = 
DataSourceMetaDataNodePath.findStorageUnitNameByActiveVersionPath(event.getKey());
+        Optional<String> storageUnitName = 
DataSourceMetaDataNodePath.getStorageUnitVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(),
 2);
         boolean isActiveVersion = true;
         if (!storageUnitName.isPresent()) {
             storageUnitName = 
DataSourceMetaDataNodePath.findStorageUnitNameByStorageUnitPath(event.getKey());
@@ -128,7 +128,7 @@ public final class MetaDataChangedHandler {
             handleStorageUnitChanged(databaseName, event, 
storageUnitName.get(), isActiveVersion);
             return;
         }
-        Optional<String> storageNodeName = 
DataSourceMetaDataNodePath.findStorageNodeNameByActiveVersionPath(event.getKey());
+        Optional<String> storageNodeName = 
DataSourceMetaDataNodePath.getStorageNodeVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(),
 2);
         isActiveVersion = true;
         if (!storageNodeName.isPresent()) {
             storageNodeName = 
DataSourceMetaDataNodePath.findStorageNodeNameByStorageNodePath(event.getKey());
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java
index a3260f86697..65869661ebb 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java
@@ -46,7 +46,8 @@ public final class TableChangedHandler {
      * @param event data changed event
      */
     public void handleCreatedOrAltered(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        String tableName = 
TableMetaDataNodePath.findTableNameByActiveVersionPath(event.getKey()).orElseThrow(()
 -> new IllegalStateException("Table name not found."));
+        String tableName = 
TableMetaDataNodePath.getVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(),
 3)
+                .orElseThrow(() -> new IllegalStateException("Table name not 
found."));
         ActiveVersionChecker.checkActiveVersion(contextManager, event);
         ShardingSphereTable table = 
contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load(databaseName,
 schemaName, tableName);
         
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().alterTable(databaseName,
 schemaName, table);
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java
index 034676bc49d..01e4535f8c4 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java
@@ -46,7 +46,7 @@ public final class ViewChangedHandler {
      * @param event data changed event
      */
     public void handleCreatedOrAltered(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        String viewName = 
ViewMetaDataNodePath.findViewNameByActiveVersionPath(event.getKey()).orElseThrow(()
 -> new IllegalStateException("View name not found."));
+        String viewName = 
ViewMetaDataNodePath.getVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(),
 3).orElseThrow(() -> new IllegalStateException("View name not found."));
         ActiveVersionChecker.checkActiveVersion(contextManager, event);
         ShardingSphereView view = 
contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load(databaseName,
 schemaName, viewName);
         
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().alterView(databaseName,
 schemaName, view);
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
index 936e114049c..bf3541f70c7 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
@@ -47,7 +47,7 @@ public final class GlobalRuleChangedHandler implements 
GlobalDataChangedEventHan
     
     @Override
     public void handle(final ContextManager contextManager, final 
DataChangedEvent event) {
-        Optional<String> ruleTypeName = 
GlobalRuleNodePath.findRuleTypeNameFromActiveVersion(event.getKey());
+        Optional<String> ruleTypeName = 
GlobalRuleNodePath.getVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(),
 1);
         if (!ruleTypeName.isPresent()) {
             return;
         }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
index 912f51882ed..2f6b07ea1c1 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
@@ -44,7 +44,7 @@ public final class PropertiesChangedHandler implements 
GlobalDataChangedEventHan
     
     @Override
     public void handle(final ContextManager contextManager, final 
DataChangedEvent event) {
-        if (!GlobalPropertiesNodePath.isActiveVersionPath(event.getKey())) {
+        if 
(!GlobalPropertiesNodePath.getVersionNodePath().isActiveVersionPath(event.getKey()))
 {
             return;
         }
         ActiveVersionChecker.checkActiveVersion(contextManager, event);
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
index 3057d6e0cbe..53a4a1e9c21 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
@@ -77,7 +77,7 @@ class MetaDataChangedHandlerTest {
         ShardingSphereTable table = mock(ShardingSphereTable.class);
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db",
 "foo_schema", "foo_tbl"))
                 .thenReturn(table);
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0",
 "0", Type.ADDED));
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version",
 "0", Type.ADDED));
         
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
 "foo_schema", table);
     }
     
@@ -87,7 +87,7 @@ class MetaDataChangedHandlerTest {
         ShardingSphereTable table = mock(ShardingSphereTable.class);
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db",
 "foo_schema", "foo_tbl"))
                 .thenReturn(table);
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0",
 "0", Type.UPDATED));
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version",
 "0", Type.UPDATED));
         
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
 "foo_schema", table);
     }
     
@@ -103,7 +103,7 @@ class MetaDataChangedHandlerTest {
         ShardingSphereView view = mock(ShardingSphereView.class);
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db",
 "foo_schema", "foo_view"))
                 .thenReturn(view);
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0",
 "0", Type.ADDED));
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
 "0", Type.ADDED));
         
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
 "foo_schema", view);
     }
     
@@ -113,7 +113,7 @@ class MetaDataChangedHandlerTest {
         ShardingSphereView view = mock(ShardingSphereView.class);
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db",
 "foo_schema", "foo_view"))
                 .thenReturn(view);
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0",
 "0", Type.UPDATED));
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
 "0", Type.UPDATED));
         
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
 "foo_schema", view);
     }
     
@@ -127,7 +127,7 @@ class MetaDataChangedHandlerTest {
     void assertHandleStorageUnitRegistered() {
         
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDataSourceUnitService().load("foo_db",
 "foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version/0",
 "0", Type.ADDED));
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version", 
"0", Type.ADDED));
         
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).register(eq("foo_db"),
 any());
     }
     
@@ -135,7 +135,7 @@ class MetaDataChangedHandlerTest {
     void assertHandleStorageUnitAltered() {
         
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDataSourceUnitService().load("foo_db",
 "foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version/0",
 "0", Type.UPDATED));
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version", 
"0", Type.UPDATED));
         
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).alter(eq("foo_db"),
 any());
     }
     


Reply via email to