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 3cae0065ef3 Add ViewChangedHandler (#34898)
3cae0065ef3 is described below

commit 3cae0065ef356ebb7d8b78fe7fb5dfdd22896c6b
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Mar 6 13:09:29 2025 +0800

    Add ViewChangedHandler (#34898)
    
    * Add ViewChangedHandler
    
    * Add ViewChangedHandler
    
    * Add ViewChangedHandler
---
 .../metadata/database/ViewMetadataNodePath.java    | 10 ++++-----
 .../database/ViewMetadataNodePathTest.java         |  8 +++----
 .../database/metadata/ViewChangedHandler.java      | 25 ++++++++++++----------
 3 files changed, 22 insertions(+), 21 deletions(-)

diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePath.java
index 816bdba0345..db390bcd114 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePath.java
@@ -38,16 +38,14 @@ public final class ViewMetadataNodePath implements NodePath 
{
     
     private final String viewName;
     
-    public ViewMetadataNodePath() {
-        this(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER);
-    }
-    
     /**
      * Create view search criteria.
      *
+     * @param databaseName database name
+     * @param schemaName schema name
      * @return created search criteria
      */
-    public static NodePathSearchCriteria createViewSearchCriteria() {
-        return new NodePathSearchCriteria(new ViewMetadataNodePath(), false, 
false, 3);
+    public static NodePathSearchCriteria createViewSearchCriteria(final String 
databaseName, final String schemaName) {
+        return new NodePathSearchCriteria(new 
ViewMetadataNodePath(databaseName, schemaName, NodePathPattern.IDENTIFIER), 
false, true, 1);
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePathTest.java
index 5ba8525a93a..9fc195975dc 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePathTest.java
@@ -47,9 +47,9 @@ class ViewMetadataNodePathTest {
     
     @Test
     void assertCreateViewSearchCriteria() {
-        
assertThat(NodePathSearcher.get("/metadata/foo_db/schemas/foo_schema/views/foo_view",
 ViewMetadataNodePath.createViewSearchCriteria()), is("foo_view"));
-        
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/views/foo_view",
 ViewMetadataNodePath.createViewSearchCriteria()).isPresent());
-        
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view",
 ViewMetadataNodePath.createViewSearchCriteria()));
-        
assertFalse(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0",
 ViewMetadataNodePath.createViewSearchCriteria()));
+        
assertThat(NodePathSearcher.get("/metadata/foo_db/schemas/foo_schema/views/foo_view",
 ViewMetadataNodePath.createViewSearchCriteria("foo_db", "foo_schema")), 
is("foo_view"));
+        
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/views/foo_view",
 ViewMetadataNodePath.createViewSearchCriteria("foo_db", 
"foo_schema")).isPresent());
+        
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view",
 ViewMetadataNodePath.createViewSearchCriteria("foo_db", "foo_schema")));
+        
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0",
 ViewMetadataNodePath.createViewSearchCriteria("foo_db", "foo_schema")));
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
index e8bcae053ac..a28981a4010 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
@@ -19,11 +19,11 @@ package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database
 
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
 import org.apache.shardingsphere.mode.event.DataChangedEvent;
-import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.DatabaseChangedHandler;
 import org.apache.shardingsphere.mode.metadata.manager.ActiveVersionChecker;
 import 
org.apache.shardingsphere.mode.metadata.refresher.statistics.StatisticsRefreshEngine;
+import 
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathPattern;
 import 
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher;
 import 
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
 import 
org.apache.shardingsphere.mode.node.path.type.metadata.database.ViewMetadataNodePath;
@@ -48,24 +48,27 @@ public final class ViewChangedHandler implements 
DatabaseChangedHandler {
     
     @Override
     public boolean isSubscribed(final String databaseName, final 
DataChangedEvent event) {
-        return new VersionNodePathParser(new 
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())
-                || NodePathSearcher.isMatchedPath(event.getKey(), 
ViewMetadataNodePath.createViewSearchCriteria());
+        return new VersionNodePathParser(new 
ViewMetadataNodePath(databaseName, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER)).isActiveVersionPath(event.getKey());
     }
     
     @Override
     public void handle(final String databaseName, final DataChangedEvent 
event) {
         String schemaName = NodePathSearcher.get(event.getKey(), 
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
-        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
-                && new VersionNodePathParser(new 
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())) {
-            handleCreatedOrAltered(databaseName, schemaName, event);
-        } else if (Type.DELETED == event.getType() && 
NodePathSearcher.isMatchedPath(event.getKey(), 
ViewMetadataNodePath.createViewSearchCriteria())) {
-            handleDropped(databaseName, schemaName, event);
+        switch (event.getType()) {
+            case ADDED:
+            case UPDATED:
+                handleCreatedOrAltered(databaseName, schemaName, event);
+                break;
+            case DELETED:
+                handleDropped(databaseName, schemaName, event);
+                break;
+            default:
+                break;
         }
     }
     
     private void handleCreatedOrAltered(final String databaseName, final 
String schemaName, final DataChangedEvent event) {
-        String viewName = new VersionNodePathParser(new 
ViewMetadataNodePath()).findIdentifierByActiveVersionPath(event.getKey(), 3)
-                .orElseThrow(() -> new IllegalStateException("View name not 
found."));
+        String viewName = NodePathSearcher.get(event.getKey(), 
ViewMetadataNodePath.createViewSearchCriteria(databaseName, schemaName));
         if (!activeVersionChecker.checkSame(event)) {
             return;
         }
@@ -75,7 +78,7 @@ public final class ViewChangedHandler implements 
DatabaseChangedHandler {
     }
     
     private void handleDropped(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        String viewName = NodePathSearcher.get(event.getKey(), 
ViewMetadataNodePath.createViewSearchCriteria());
+        String viewName = NodePathSearcher.get(event.getKey(), 
ViewMetadataNodePath.createViewSearchCriteria(databaseName, schemaName));
         
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropView(databaseName,
 schemaName, viewName);
         statisticsRefreshEngine.asyncRefresh();
     }

Reply via email to