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 a5ff5552889 Add NodePathSearchCriteria (#34750)
a5ff5552889 is described below

commit a5ff555288982958abac2888b10396b33b5fb76d
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Feb 22 23:56:12 2025 +0800

    Add NodePathSearchCriteria (#34750)
    
    * Add NodePathSearchCriteria
    
    * Add NodePathSearchCriteria
    
    * Add NodePathSearchCriteria
    
    * Add NodePathSearchCriteria
    
    * Add NodePathSearchCriteria
---
 ...taNodePath.java => NodePathSearchCriteria.java} | 21 +++++++------
 .../mode/node/path/NodePathSearcher.java           | 19 +++++-------
 .../metadata/database/TableMetadataNodePath.java   | 34 ++++++++++++++++++++++
 .../metadata/database/ViewMetadataNodePath.java    | 15 ++++++++++
 .../database/TableMetadataNodePathTest.java        | 34 ++++++++++------------
 .../database/ViewMetadataNodePathTest.java         | 12 +++-----
 .../database/metadata/MetaDataChangedHandler.java  | 22 +++++---------
 .../metadata/type/TableChangedHandler.java         |  6 ++--
 .../database/metadata/type/ViewChangedHandler.java |  7 ++---
 .../type/DatabaseMetaDataChangedListener.java      |  3 +-
 10 files changed, 100 insertions(+), 73 deletions(-)

diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSearchCriteria.java
similarity index 64%
copy from 
mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePath.java
copy to 
mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSearchCriteria.java
index b042ec8efee..3d52f3d5236 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSearchCriteria.java
@@ -15,24 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.node.path.metadata.database;
+package org.apache.shardingsphere.mode.node.path;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.mode.node.path.NodePath;
-import org.apache.shardingsphere.mode.node.path.NodePathEntity;
 
 /**
- * Table metadata node path.
+ * Node path search criteria.
  */
-@NodePathEntity("/metadata/${databaseName}/schemas/${schemaName}/tables/${tableName}")
 @RequiredArgsConstructor
 @Getter
-public final class TableMetadataNodePath implements NodePath {
+public final class NodePathSearchCriteria {
     
-    private final String databaseName;
+    private final NodePath nodePathExample;
     
-    private final String schemaName;
+    private final boolean trimEmptyNode;
     
-    private final String tableName;
+    private final boolean containsChildPath;
+    
+    private final int searchSegmentIndex;
+    
+    public NodePathSearchCriteria(final NodePath nodePathExample, final 
boolean trimEmptyNode, final boolean containsChildPath) {
+        this(nodePathExample, trimEmptyNode, containsChildPath, 0);
+    }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSearcher.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSearcher.java
index e9191063e26..f1c14c6813c 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSearcher.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathSearcher.java
@@ -35,28 +35,23 @@ public final class NodePathSearcher {
      * Find node segment.
      *
      * @param path to be searched path
-     * @param nodePathCriteria node path criteria
-     * @param trimEmptyNode null variable should trim parent node if true
-     * @param containsChildPath whether contains child path
-     * @param searchSegmentIndex search segment index, start from 1
+     * @param criteria node path search criteria
      * @return found node segment
      */
-    public static Optional<String> find(final String path, final NodePath 
nodePathCriteria, final boolean trimEmptyNode, final boolean containsChildPath, 
final int searchSegmentIndex) {
-        Matcher matcher = createPattern(nodePathCriteria, trimEmptyNode, 
containsChildPath).matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(searchSegmentIndex)) 
: Optional.empty();
+    public static Optional<String> find(final String path, final 
NodePathSearchCriteria criteria) {
+        Matcher matcher = createPattern(criteria.getNodePathExample(), 
criteria.isTrimEmptyNode(), criteria.isContainsChildPath()).matcher(path);
+        return matcher.find() ? 
Optional.of(matcher.group(criteria.getSearchSegmentIndex())) : Optional.empty();
     }
     
     /**
      * Whether to matched path.
      *
      * @param path to be searched path
-     * @param nodePathCriteria node path criteria
-     * @param trimEmptyNode null variable should trim parent node if true
-     * @param containsChildPath whether contains child path
+     * @param criteria node path search criteria
      * @return is matched path or not
      */
-    public static boolean isMatchedPath(final String path, final NodePath 
nodePathCriteria, final boolean trimEmptyNode, final boolean containsChildPath) 
{
-        return createPattern(nodePathCriteria, trimEmptyNode, 
containsChildPath).matcher(path).find();
+    public static boolean isMatchedPath(final String path, final 
NodePathSearchCriteria criteria) {
+        return createPattern(criteria.getNodePathExample(), 
criteria.isTrimEmptyNode(), 
criteria.isContainsChildPath()).matcher(path).find();
     }
     
     private static Pattern createPattern(final NodePath nodePathCriteria, 
final boolean trimEmptyNode, final boolean containsChildPath) {
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePath.java
index b042ec8efee..5a2b88faf47 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePath.java
@@ -21,6 +21,8 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.mode.node.path.NodePath;
 import org.apache.shardingsphere.mode.node.path.NodePathEntity;
+import org.apache.shardingsphere.mode.node.path.NodePathPattern;
+import org.apache.shardingsphere.mode.node.path.NodePathSearchCriteria;
 
 /**
  * Table metadata node path.
@@ -35,4 +37,36 @@ public final class TableMetadataNodePath implements NodePath 
{
     private final String schemaName;
     
     private final String tableName;
+    
+    public TableMetadataNodePath() {
+        this(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER);
+    }
+    
+    /**
+     * Create database search criteria.
+     *
+     * @return created database search criteria
+     */
+    public static NodePathSearchCriteria createDatabaseSearchCriteria() {
+        return new NodePathSearchCriteria(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, null, null), true, true, 1);
+    }
+    
+    /**
+     * Create schema search criteria.
+     *
+     * @param containsChildPath contains child path
+     * @return created schema search criteria
+     */
+    public static NodePathSearchCriteria createSchemaSearchCriteria(final 
boolean containsChildPath) {
+        return new NodePathSearchCriteria(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null), true, containsChildPath, 2);
+    }
+    
+    /**
+     * Create table search criteria.
+     *
+     * @return created table search criteria
+     */
+    public static NodePathSearchCriteria createTableSearchCriteria() {
+        return new NodePathSearchCriteria(new TableMetadataNodePath(), false, 
false, 3);
+    }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePath.java
index 488b26fbb9c..da18461de8b 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePath.java
@@ -21,6 +21,8 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.mode.node.path.NodePath;
 import org.apache.shardingsphere.mode.node.path.NodePathEntity;
+import org.apache.shardingsphere.mode.node.path.NodePathPattern;
+import org.apache.shardingsphere.mode.node.path.NodePathSearchCriteria;
 
 /**
  * View metadata node path.
@@ -35,4 +37,17 @@ public final class ViewMetadataNodePath implements NodePath {
     private final String schemaName;
     
     private final String viewName;
+    
+    public ViewMetadataNodePath() {
+        this(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER);
+    }
+    
+    /**
+     * Create view search criteria.
+     *
+     * @return created view search criteria
+     */
+    public static NodePathSearchCriteria createViewSearchCriteria() {
+        return new NodePathSearchCriteria(new ViewMetadataNodePath(), false, 
true, 3);
+    }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePathTest.java
index 6f07c1b675b..a5fee2e4465 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableMetadataNodePathTest.java
@@ -19,7 +19,6 @@ package 
org.apache.shardingsphere.mode.node.path.metadata.database;
 
 import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
-import org.apache.shardingsphere.mode.node.path.NodePathPattern;
 import org.apache.shardingsphere.mode.node.path.version.VersionNodePath;
 import org.junit.jupiter.api.Test;
 
@@ -49,26 +48,23 @@ class TableMetadataNodePathTest {
     }
     
     @Test
-    void assertFind() {
-        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema", new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, null, null), true, true, 1), 
is(Optional.of("foo_db")));
-        assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema", 
new TableMetadataNodePath(NodePathPattern.IDENTIFIER, null, null), true, true, 
1).isPresent());
-        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema", new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null), true, false, 2),
-                is(Optional.of("foo_schema")));
-        assertFalse(
-                
NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema/tables", new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null), true, false, 2)
-                        .isPresent());
-        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema/tables", 
new TableMetadataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, null), true, true, 2),
-                is(Optional.of("foo_schema")));
-        
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/tables", new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null), true, true, 2).isPresent());
-        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl",
-                new TableMetadataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), false, false, 3), 
is(Optional.of("foo_tbl")));
-        
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/tables/foo_tbl",
-                new TableMetadataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), false, false, 
3).isPresent());
+    void assertCreateDatabaseSearchCriteria() {
+        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema", 
TableMetadataNodePath.createDatabaseSearchCriteria()), 
is(Optional.of("foo_db")));
+        assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema", 
TableMetadataNodePath.createDatabaseSearchCriteria()).isPresent());
     }
     
     @Test
-    void assertIsTablePath() {
-        
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl",
-                new TableMetadataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), false, false));
+    void assertCreateSchemaSearchCriteria() {
+        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema", 
TableMetadataNodePath.createSchemaSearchCriteria(false)), 
is(Optional.of("foo_schema")));
+        
assertFalse(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema/tables", 
TableMetadataNodePath.createSchemaSearchCriteria(false)).isPresent());
+        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema/tables", 
TableMetadataNodePath.createSchemaSearchCriteria(true)), 
is(Optional.of("foo_schema")));
+        
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/tables", 
TableMetadataNodePath.createSchemaSearchCriteria(true)).isPresent());
+    }
+    
+    @Test
+    void assertCreateTableSearchCriteria() {
+        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl",
 TableMetadataNodePath.createTableSearchCriteria()), 
is(Optional.of("foo_tbl")));
+        
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/tables/foo_tbl",
 TableMetadataNodePath.createTableSearchCriteria()).isPresent());
+        
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl",
 TableMetadataNodePath.createTableSearchCriteria()));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePathTest.java
index 4320a1478c6..0d17c0b6b5a 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewMetadataNodePathTest.java
@@ -19,7 +19,6 @@ package 
org.apache.shardingsphere.mode.node.path.metadata.database;
 
 import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
-import org.apache.shardingsphere.mode.node.path.NodePathPattern;
 import org.apache.shardingsphere.mode.node.path.version.VersionNodePath;
 import org.junit.jupiter.api.Test;
 
@@ -49,16 +48,13 @@ class ViewMetadataNodePathTest {
     }
     
     @Test
-    void assertFind() {
-        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema/views/foo_view",
-                new ViewMetadataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), false, true, 3), 
is(Optional.of("foo_view")));
-        
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/views/foo_view",
-                new ViewMetadataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), false, true, 
3).isPresent());
+    void assertCreateViewSearchCriteria() {
+        
assertThat(NodePathSearcher.find("/metadata/foo_db/schemas/foo_schema/views/foo_view",
 ViewMetadataNodePath.createViewSearchCriteria()), is(Optional.of("foo_view")));
+        
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/views/foo_view",
 ViewMetadataNodePath.createViewSearchCriteria()).isPresent());
     }
     
     @Test
     void assertIsMatchedPath() {
-        
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view",
-                new ViewMetadataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), false, true));
+        
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view",
 ViewMetadataNodePath.createViewSearchCriteria()));
     }
 }
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 fed7a711918..1c5a1bfc345 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
@@ -26,7 +26,6 @@ import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type.TableChangedHandler;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type.ViewChangedHandler;
 import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
-import org.apache.shardingsphere.mode.node.path.NodePathPattern;
 import 
org.apache.shardingsphere.mode.node.path.metadata.database.TableMetadataNodePath;
 import 
org.apache.shardingsphere.mode.node.path.metadata.database.ViewMetadataNodePath;
 import 
org.apache.shardingsphere.mode.node.path.metadata.storage.DataSourceNodePathParser;
@@ -67,12 +66,12 @@ public final class MetaDataChangedHandler {
      */
     public boolean handle(final String databaseName, final DataChangedEvent 
event) {
         String eventKey = event.getKey();
-        Optional<String> schemaName = NodePathSearcher.find(eventKey, new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null), true, false, 2);
+        Optional<String> schemaName = NodePathSearcher.find(eventKey, 
TableMetadataNodePath.createSchemaSearchCriteria(false));
         if (schemaName.isPresent()) {
             handleSchemaChanged(databaseName, schemaName.get(), event);
             return true;
         }
-        schemaName = NodePathSearcher.find(eventKey, new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null), true, true, 2);
+        schemaName = NodePathSearcher.find(eventKey, 
TableMetadataNodePath.createSchemaSearchCriteria(true));
         if (schemaName.isPresent() && isTableMetaDataChanged(eventKey)) {
             handleTableChanged(databaseName, schemaName.get(), event);
             return true;
@@ -97,31 +96,26 @@ public final class MetaDataChangedHandler {
     }
     
     private boolean isTableMetaDataChanged(final String key) {
-        return NodePathSearcher.isMatchedPath(key, new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false, false)
-                || NodePathSearcher.getVersion(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER)).isActiveVersionPath(key);
+        return NodePathSearcher.isMatchedPath(key, 
TableMetadataNodePath.createTableSearchCriteria()) || 
NodePathSearcher.getVersion(new 
TableMetadataNodePath()).isActiveVersionPath(key);
     }
     
     private void handleTableChanged(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
-                && NodePathSearcher.getVersion(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER)).isActiveVersionPath(event.getKey())) {
+        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& NodePathSearcher.getVersion(new 
TableMetadataNodePath()).isActiveVersionPath(event.getKey())) {
             tableChangedHandler.handleCreatedOrAltered(databaseName, 
schemaName, event);
-        } else if (Type.DELETED == event.getType()
-                && NodePathSearcher.isMatchedPath(event.getKey(), new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false, false)) {
+        } else if (Type.DELETED == event.getType() && 
NodePathSearcher.isMatchedPath(event.getKey(), 
TableMetadataNodePath.createTableSearchCriteria())) {
             tableChangedHandler.handleDropped(databaseName, schemaName, event);
         }
     }
     
     private boolean isViewMetaDataChanged(final String key) {
-        return NodePathSearcher.getVersion(new 
ViewMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER)).isActiveVersionPath(key)
-                || NodePathSearcher.isMatchedPath(key, new 
ViewMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false, true);
+        return NodePathSearcher.getVersion(new 
ViewMetadataNodePath()).isActiveVersionPath(key) || 
NodePathSearcher.isMatchedPath(key, 
ViewMetadataNodePath.createViewSearchCriteria());
     }
     
     private void handleViewChanged(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
         if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
-                && NodePathSearcher.getVersion(new 
ViewMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER)).isActiveVersionPath(event.getKey())) {
+                && NodePathSearcher.getVersion(new 
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())) {
             viewChangedHandler.handleCreatedOrAltered(databaseName, 
schemaName, event);
-        } else if (Type.DELETED == event.getType()
-                && NodePathSearcher.isMatchedPath(event.getKey(), new 
ViewMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false, true)) {
+        } else if (Type.DELETED == event.getType() && 
NodePathSearcher.isMatchedPath(event.getKey(), 
ViewMetadataNodePath.createViewSearchCriteria())) {
             viewChangedHandler.handleDropped(databaseName, schemaName, event);
         }
     }
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 30713ef8a70..f8eb49c1678 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
@@ -23,7 +23,6 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.checker.ActiveVersionChecker;
 import 
org.apache.shardingsphere.mode.metadata.refresher.statistics.StatisticsRefreshEngine;
 import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
-import org.apache.shardingsphere.mode.node.path.NodePathPattern;
 import 
org.apache.shardingsphere.mode.node.path.metadata.database.TableMetadataNodePath;
 
 /**
@@ -48,7 +47,7 @@ public final class TableChangedHandler {
      * @param event data changed event
      */
     public void handleCreatedOrAltered(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        String tableName = NodePathSearcher.getVersion(new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER))
+        String tableName = NodePathSearcher.getVersion(new 
TableMetadataNodePath())
                 .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);
@@ -64,8 +63,7 @@ public final class TableChangedHandler {
      * @param event data changed event
      */
     public void handleDropped(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        String tableName = NodePathSearcher.find(event.getKey(), new 
TableMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false, false, 3)
-                .orElseThrow(() -> new IllegalStateException("Table name not 
found."));
+        String tableName = NodePathSearcher.find(event.getKey(), 
TableMetadataNodePath.createTableSearchCriteria()).orElseThrow(() -> new 
IllegalStateException("Table name not found."));
         
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropTable(databaseName,
 schemaName, tableName);
         statisticsRefreshEngine.asyncRefresh();
     }
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 c36210e0bb6..493c6dd58cf 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
@@ -23,7 +23,6 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.checker.ActiveVersionChecker;
 import 
org.apache.shardingsphere.mode.metadata.refresher.statistics.StatisticsRefreshEngine;
 import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
-import org.apache.shardingsphere.mode.node.path.NodePathPattern;
 import 
org.apache.shardingsphere.mode.node.path.metadata.database.ViewMetadataNodePath;
 
 /**
@@ -48,8 +47,7 @@ public final class ViewChangedHandler {
      * @param event data changed event
      */
     public void handleCreatedOrAltered(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        String viewName = NodePathSearcher.getVersion(
-                new ViewMetadataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER)).findIdentifierByActiveVersionPath(event.getKey(), 
3)
+        String viewName = NodePathSearcher.getVersion(new 
ViewMetadataNodePath()).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);
@@ -65,8 +63,7 @@ public final class ViewChangedHandler {
      * @param event data changed event
      */
     public void handleDropped(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        String viewName = NodePathSearcher.find(event.getKey(), new 
ViewMetadataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER), false, true, 3)
-                .orElseThrow(() -> new IllegalStateException("View name not 
found."));
+        String viewName = NodePathSearcher.find(event.getKey(), 
ViewMetadataNodePath.createViewSearchCriteria()).orElseThrow(() -> new 
IllegalStateException("View name not found."));
         
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropView(databaseName,
 schemaName, viewName);
         statisticsRefreshEngine.asyncRefresh();
     }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
index 1276458e0f0..843ea49bb3d 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
@@ -25,7 +25,6 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.MetaDataChangedHandler;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.rule.RuleConfigurationChangedHandler;
 import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
-import org.apache.shardingsphere.mode.node.path.NodePathPattern;
 import 
org.apache.shardingsphere.mode.node.path.metadata.database.TableMetadataNodePath;
 import 
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
 
@@ -42,7 +41,7 @@ public final class DatabaseMetaDataChangedListener implements 
DataChangedEventLi
     
     @Override
     public void onChange(final DataChangedEvent event) {
-        Optional<String> databaseName = NodePathSearcher.find(event.getKey(), 
new TableMetadataNodePath(NodePathPattern.IDENTIFIER, null, null), true, true, 
1);
+        Optional<String> databaseName = NodePathSearcher.find(event.getKey(), 
TableMetadataNodePath.createDatabaseSearchCriteria());
         if (!databaseName.isPresent()) {
             return;
         }

Reply via email to