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 226ed8b3d44 Split MetaDataChangedHandler to SchemaChangedHandler, 
TableChangedHandler and ViewChangedHandler (#34893)
226ed8b3d44 is described below

commit 226ed8b3d445211613e51081e0110f2b7894ae93
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Mar 6 00:56:55 2025 +0800

    Split MetaDataChangedHandler to SchemaChangedHandler, TableChangedHandler 
and ViewChangedHandler (#34893)
---
 .../database/metadata/MetaDataChangedHandler.java  | 106 ------------------
 .../metadata/{type => }/SchemaChangedHandler.java  |  51 ++++++---
 .../metadata/{type => }/TableChangedHandler.java   |  46 +++++---
 .../metadata/{type => }/ViewChangedHandler.java    |  48 +++++---
 .../type/DatabaseMetaDataChangedListener.java      |   8 +-
 .../metadata/MetaDataChangedHandlerTest.java       | 123 ---------------------
 .../metadata/SchemaChangedHandlerTest.java         |  59 ++++++++++
 .../database/metadata/TableChangedHandlerTest.java |  72 ++++++++++++
 .../database/metadata/ViewChangedHandlerTest.java  |  72 ++++++++++++
 9 files changed, 302 insertions(+), 283 deletions(-)

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
deleted file mode 100644
index 049a4232747..00000000000
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
-
-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.manager.cluster.dispatch.handler.database.metadata.type.SchemaChangedHandler;
-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.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;
-import 
org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathParser;
-
-import java.util.Optional;
-
-/**
- * Meta data changed handler.
- */
-public final class MetaDataChangedHandler implements DatabaseChangedHandler {
-    
-    private final SchemaChangedHandler schemaChangedHandler;
-    
-    private final TableChangedHandler tableChangedHandler;
-    
-    private final ViewChangedHandler viewChangedHandler;
-    
-    public MetaDataChangedHandler(final ContextManager contextManager) {
-        schemaChangedHandler = new SchemaChangedHandler(contextManager);
-        tableChangedHandler = new TableChangedHandler(contextManager);
-        viewChangedHandler = new ViewChangedHandler(contextManager);
-    }
-    
-    @Override
-    public boolean isSubscribed(final String databaseName, final 
DataChangedEvent event) {
-        return NodePathSearcher.isMatchedPath(event.getKey(), 
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
-    }
-    
-    @Override
-    public void handle(final String databaseName, final DataChangedEvent 
event) {
-        String eventKey = event.getKey();
-        Optional<String> schemaName = NodePathSearcher.find(eventKey, 
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, false));
-        if (schemaName.isPresent()) {
-            handleSchemaChanged(databaseName, schemaName.get(), event);
-            return;
-        }
-        schemaName = NodePathSearcher.find(eventKey, 
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
-        if (schemaName.isPresent() && isTableMetaDataChanged(eventKey)) {
-            handleTableChanged(databaseName, schemaName.get(), event);
-            return;
-        }
-        if (schemaName.isPresent() && isViewMetaDataChanged(eventKey)) {
-            handleViewChanged(databaseName, schemaName.get(), event);
-        }
-    }
-    
-    private void handleSchemaChanged(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
-        if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
-            schemaChangedHandler.handleCreated(databaseName, schemaName);
-        } else if (Type.DELETED == event.getType()) {
-            schemaChangedHandler.handleDropped(databaseName, schemaName);
-        }
-    }
-    
-    private boolean isTableMetaDataChanged(final String key) {
-        return NodePathSearcher.isMatchedPath(key, 
TableMetadataNodePath.createTableSearchCriteria()) || new 
VersionNodePathParser(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()) 
&& new VersionNodePathParser(new 
TableMetadataNodePath()).isActiveVersionPath(event.getKey())) {
-            tableChangedHandler.handleCreatedOrAltered(databaseName, 
schemaName, event);
-        } else if (Type.DELETED == event.getType() && 
NodePathSearcher.isMatchedPath(event.getKey(), 
TableMetadataNodePath.createTableSearchCriteria())) {
-            tableChangedHandler.handleDropped(databaseName, schemaName, event);
-        }
-    }
-    
-    private boolean isViewMetaDataChanged(final String key) {
-        return new VersionNodePathParser(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())
-                && new VersionNodePathParser(new 
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())) {
-            viewChangedHandler.handleCreatedOrAltered(databaseName, 
schemaName, event);
-        } 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/SchemaChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandler.java
similarity index 52%
rename from 
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/SchemaChangedHandler.java
rename to 
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandler.java
index f88c482c796..486121bf0fa 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/SchemaChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandler.java
@@ -15,15 +15,21 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type;
+package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
 
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
 import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.DatabaseChangedHandler;
 import 
org.apache.shardingsphere.mode.metadata.refresher.statistics.StatisticsRefreshEngine;
+import 
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher;
+import 
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
+
+import java.util.Optional;
 
 /**
  * Schema changed handler.
  */
-public final class SchemaChangedHandler {
+public final class SchemaChangedHandler implements DatabaseChangedHandler {
     
     private final ContextManager contextManager;
     
@@ -34,24 +40,37 @@ public final class SchemaChangedHandler {
         statisticsRefreshEngine = new StatisticsRefreshEngine(contextManager);
     }
     
-    /**
-     * Handle schema created.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     */
-    public void handleCreated(final String databaseName, final String 
schemaName) {
+    @Override
+    public boolean isSubscribed(final String databaseName, final 
DataChangedEvent event) {
+        return NodePathSearcher.isMatchedPath(event.getKey(), 
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, false));
+    }
+    
+    @Override
+    public void handle(final String databaseName, final DataChangedEvent 
event) {
+        String eventKey = event.getKey();
+        Optional<String> schemaName = NodePathSearcher.find(eventKey, 
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, false));
+        if (!schemaName.isPresent()) {
+            return;
+        }
+        switch (event.getType()) {
+            case ADDED:
+            case UPDATED:
+                handleCreated(databaseName, schemaName.get());
+                break;
+            case DELETED:
+                handleDropped(databaseName, schemaName.get());
+                break;
+            default:
+                break;
+        }
+    }
+    
+    private void handleCreated(final String databaseName, final String 
schemaName) {
         
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().addSchema(databaseName,
 schemaName);
         statisticsRefreshEngine.asyncRefresh();
     }
     
-    /**
-     * Handle schema dropped.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     */
-    public void handleDropped(final String databaseName, final String 
schemaName) {
+    private void handleDropped(final String databaseName, final String 
schemaName) {
         
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropSchema(databaseName,
 schemaName);
         statisticsRefreshEngine.asyncRefresh();
     }
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/TableChangedHandler.java
similarity index 64%
rename from 
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java
rename to 
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
index 6ae5167ce00..12d3dee648e 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/TableChangedHandler.java
@@ -15,21 +15,25 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type;
+package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
 
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 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.NodePathSearcher;
 import 
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
 import 
org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathParser;
 
+import java.util.Optional;
+
 /**
  * Table changed handler.
  */
-public final class TableChangedHandler {
+public final class TableChangedHandler implements DatabaseChangedHandler {
     
     private final ContextManager contextManager;
     
@@ -43,14 +47,27 @@ public final class TableChangedHandler {
         statisticsRefreshEngine = new StatisticsRefreshEngine(contextManager);
     }
     
-    /**
-     * Handle table created or altered.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param event data changed event
-     */
-    public void handleCreatedOrAltered(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
+    @Override
+    public boolean isSubscribed(final String databaseName, final 
DataChangedEvent event) {
+        return NodePathSearcher.isMatchedPath(event.getKey(), 
TableMetadataNodePath.createTableSearchCriteria())
+                || new VersionNodePathParser(new 
TableMetadataNodePath()).isActiveVersionPath(event.getKey());
+    }
+    
+    @Override
+    public void handle(final String databaseName, final DataChangedEvent 
event) {
+        String eventKey = event.getKey();
+        Optional<String> schemaName = NodePathSearcher.find(eventKey, 
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
+        if (!schemaName.isPresent()) {
+            return;
+        }
+        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& new VersionNodePathParser(new 
TableMetadataNodePath()).isActiveVersionPath(event.getKey())) {
+            handleCreatedOrAltered(databaseName, schemaName.get(), event);
+        } else if (Type.DELETED == event.getType() && 
NodePathSearcher.isMatchedPath(event.getKey(), 
TableMetadataNodePath.createTableSearchCriteria())) {
+            handleDropped(databaseName, schemaName.get(), event);
+        }
+    }
+    
+    private void handleCreatedOrAltered(final String databaseName, final 
String schemaName, final DataChangedEvent event) {
         String tableName = new VersionNodePathParser(new 
TableMetadataNodePath())
                 .findIdentifierByActiveVersionPath(event.getKey(), 
3).orElseThrow(() -> new IllegalStateException("Table name not found."));
         if (!activeVersionChecker.checkSame(event)) {
@@ -61,14 +78,7 @@ public final class TableChangedHandler {
         statisticsRefreshEngine.asyncRefresh();
     }
     
-    /**
-     * Handle table dropped.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param event data changed event
-     */
-    public void handleDropped(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
+    private void handleDropped(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
         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/ViewChangedHandler.java
similarity index 62%
rename from 
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java
rename to 
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
index f39750006cb..c3ecd3aa46e 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/ViewChangedHandler.java
@@ -15,21 +15,26 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type;
+package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
 
 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.NodePathSearcher;
+import 
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
 import 
org.apache.shardingsphere.mode.node.path.type.metadata.database.ViewMetadataNodePath;
 import 
org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathParser;
 
+import java.util.Optional;
+
 /**
  * View changed handler.
  */
-public final class ViewChangedHandler {
+public final class ViewChangedHandler implements DatabaseChangedHandler {
     
     private final ContextManager contextManager;
     
@@ -43,14 +48,28 @@ public final class ViewChangedHandler {
         statisticsRefreshEngine = new StatisticsRefreshEngine(contextManager);
     }
     
-    /**
-     * Handle view created or altered.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param event data changed event
-     */
-    public void handleCreatedOrAltered(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
+    @Override
+    public boolean isSubscribed(final String databaseName, final 
DataChangedEvent event) {
+        return new VersionNodePathParser(new 
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())
+                || NodePathSearcher.isMatchedPath(event.getKey(), 
ViewMetadataNodePath.createViewSearchCriteria());
+    }
+    
+    @Override
+    public void handle(final String databaseName, final DataChangedEvent 
event) {
+        String eventKey = event.getKey();
+        Optional<String> schemaName = NodePathSearcher.find(eventKey, 
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
+        if (!schemaName.isPresent()) {
+            return;
+        }
+        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
+                && new VersionNodePathParser(new 
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())) {
+            handleCreatedOrAltered(databaseName, schemaName.get(), event);
+        } else if (Type.DELETED == event.getType() && 
NodePathSearcher.isMatchedPath(event.getKey(), 
ViewMetadataNodePath.createViewSearchCriteria())) {
+            handleDropped(databaseName, schemaName.get(), event);
+        }
+    }
+    
+    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."));
         if (!activeVersionChecker.checkSame(event)) {
@@ -61,14 +80,7 @@ public final class ViewChangedHandler {
         statisticsRefreshEngine.asyncRefresh();
     }
     
-    /**
-     * Handle view dropped.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param event data changed event
-     */
-    public void handleDropped(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
+    private void handleDropped(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
         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 24eda761ee6..8886ac2e4fe 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
@@ -24,7 +24,9 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.DatabaseChangedHandler;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.datasource.StorageNodeChangedHandler;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.datasource.StorageUnitChangedHandler;
-import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.MetaDataChangedHandler;
+import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.ViewChangedHandler;
+import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.SchemaChangedHandler;
+import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.TableChangedHandler;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.rule.RuleConfigurationChangedHandler;
 import 
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher;
 import 
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
@@ -44,7 +46,9 @@ public final class DatabaseMetaDataChangedListener implements 
DataChangedEventLi
     
     public DatabaseMetaDataChangedListener(final ContextManager 
contextManager) {
         handlers = Arrays.asList(
-                new MetaDataChangedHandler(contextManager),
+                new SchemaChangedHandler(contextManager),
+                new TableChangedHandler(contextManager),
+                new ViewChangedHandler(contextManager),
                 new StorageUnitChangedHandler(contextManager),
                 new StorageNodeChangedHandler(contextManager),
                 new RuleConfigurationChangedHandler(contextManager));
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
deleted file mode 100644
index 4b016602689..00000000000
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
-
-import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
-import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
-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.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.mockito.junit.jupiter.MockitoSettings;
-import org.mockito.quality.Strictness;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-@MockitoSettings(strictness = Strictness.LENIENT)
-class MetaDataChangedHandlerTest {
-    
-    private MetaDataChangedHandler handler;
-    
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ContextManager contextManager;
-    
-    @BeforeEach
-    void setUp() {
-        
when(contextManager.getMetaDataContexts().getMetaData().getTemporaryProps().getValue(TemporaryConfigurationPropertyKey.PROXY_META_DATA_COLLECTOR_ENABLED)).thenReturn(false);
-        
when(contextManager.getComputeNodeInstanceContext().getModeConfiguration().isCluster()).thenReturn(true);
-        
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
-        handler = new MetaDataChangedHandler(contextManager);
-    }
-    
-    @Test
-    void assertHandleSchemaCreated() {
-        
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "", Type.ADDED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).addSchema("foo_db",
 "foo_schema");
-    }
-    
-    @Test
-    void assertHandleSchemaDropped() {
-        
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "", Type.DELETED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropSchema("foo_db",
 "foo_schema");
-    }
-    
-    @Test
-    void assertHandleTableCreated() {
-        
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
-        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", Type.ADDED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
 "foo_schema", table);
-    }
-    
-    @Test
-    void assertHandleTableAltered() {
-        
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
-        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", Type.UPDATED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
 "foo_schema", table);
-    }
-    
-    @Test
-    void assertHandleTableDropped() {
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "", 
Type.DELETED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropTable("foo_db",
 "foo_schema", "foo_tbl");
-    }
-    
-    @Test
-    void assertHandleViewCreated() {
-        
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
-        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", Type.ADDED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
 "foo_schema", view);
-    }
-    
-    @Test
-    void assertHandleViewAltered() {
-        
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
-        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", Type.UPDATED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
 "foo_schema", view);
-    }
-    
-    @Test
-    void assertHandleViewDropped() {
-        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view", "", 
Type.DELETED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropView("foo_db",
 "foo_schema", "foo_view");
-    }
-}
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandlerTest.java
new file mode 100644
index 00000000000..2089175f991
--- /dev/null
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandlerTest.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
+
+import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class SchemaChangedHandlerTest {
+    
+    private SchemaChangedHandler handler;
+    
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private ContextManager contextManager;
+    
+    @BeforeEach
+    void setUp() {
+        
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
+        handler = new SchemaChangedHandler(contextManager);
+    }
+    
+    @Test
+    void assertHandleSchemaCreated() {
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "", Type.ADDED));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).addSchema("foo_db",
 "foo_schema");
+    }
+    
+    @Test
+    void assertHandleSchemaDropped() {
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "", Type.DELETED));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropSchema("foo_db",
 "foo_schema");
+    }
+}
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
new file mode 100644
index 00000000000..3c1869012a3
--- /dev/null
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
+
+import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class TableChangedHandlerTest {
+    
+    private TableChangedHandler handler;
+    
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private ContextManager contextManager;
+    
+    @BeforeEach
+    void setUp() {
+        handler = new TableChangedHandler(contextManager);
+    }
+    
+    @Test
+    void assertHandleTableCreated() {
+        
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
+        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", Type.ADDED));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
 "foo_schema", table);
+    }
+    
+    @Test
+    void assertHandleTableAltered() {
+        
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
+        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", Type.UPDATED));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
 "foo_schema", table);
+    }
+    
+    @Test
+    void assertHandleTableDropped() {
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "", 
Type.DELETED));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropTable("foo_db",
 "foo_schema", "foo_tbl");
+    }
+}
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
new file mode 100644
index 00000000000..b2262b89324
--- /dev/null
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
+
+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.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class ViewChangedHandlerTest {
+    
+    private ViewChangedHandler handler;
+    
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private ContextManager contextManager;
+    
+    @BeforeEach
+    void setUp() {
+        handler = new ViewChangedHandler(contextManager);
+    }
+    
+    @Test
+    void assertHandleViewCreated() {
+        
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
+        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", Type.ADDED));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
 "foo_schema", view);
+    }
+    
+    @Test
+    void assertHandleViewAltered() {
+        
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
+        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", Type.UPDATED));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
 "foo_schema", view);
+    }
+    
+    @Test
+    void assertHandleViewDropped() {
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view", "", 
Type.DELETED));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropView("foo_db",
 "foo_schema", "foo_view");
+    }
+}


Reply via email to