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 736ca922dea Use MetaDataChangedHandler to instead of 
MetaDataChangedSubscriber (#34219)
736ca922dea is described below

commit 736ca922dea579093f8bc8392e8b5e350dd70378
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jan 1 22:48:43 2025 +0800

    Use MetaDataChangedHandler to instead of MetaDataChangedSubscriber (#34219)
    
    * Use MetaDataChangedHandler to instead of MetaDataChangedSubscriber
---
 .../ShardingSphereStatisticsRefreshEngine.java     |   5 +-
 .../builder/MetaDataChangedEventBuilder.java       | 160 ---------------------
 .../event/metadata/schema/SchemaAddedEvent.java    |  34 -----
 .../event/metadata/schema/SchemaDeletedEvent.java  |  34 -----
 .../schema/table/TableCreatedOrAlteredEvent.java   |  40 ------
 .../metadata/schema/table/TableDroppedEvent.java   |  36 -----
 .../schema/view/ViewCreatedOrAlteredEvent.java     |  40 ------
 .../metadata/schema/view/ViewDroppedEvent.java     |  40 ------
 .../handler/database/MetaDataChangedHandler.java   | 154 ++++++++++++++++++++
 .../handler/database/SchemaChangedHandler.java     |  58 ++++++++
 .../database/StorageNodeChangedHandler.java        |  63 ++++++++
 .../database/StorageUnitChangedHandler.java        |  76 ++++++++++
 .../handler/database/TableChangedHandler.java      |  70 +++++++++
 .../handler/database/ViewChangedHandler.java       |  70 +++++++++
 .../global/ListenerAssistedChangedHandler.java     |   2 +-
 .../listener/DataChangedEventListenerRegistry.java |   2 +-
 .../type/DatabaseMetaDataChangedListener.java      |  15 +-
 .../ClusterDispatchEventSubscriberRegistry.java    |   7 +-
 .../subscriber/type/MetaDataChangedSubscriber.java | 126 ----------------
 .../builder/MetaDataChangedEventBuilderTest.java   |  98 -------------
 .../database/MetaDataChangedHandlerTest.java       | 148 +++++++++++++++++++
 .../type/DatabaseMetaDataChangedListenerTest.java  |  15 +-
 .../type/MetaDataChangedSubscriberTest.java        | 105 --------------
 .../type/StorageUnitEventSubscriberTest.java       |  73 ----------
 24 files changed, 663 insertions(+), 808 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/ShardingSphereStatisticsRefreshEngine.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/ShardingSphereStatisticsRefreshEngine.java
index 073be7e5a01..bfad2f96fc7 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/ShardingSphereStatisticsRefreshEngine.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/ShardingSphereStatisticsRefreshEngine.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.mode.metadata.refresher;
 import lombok.extern.slf4j.Slf4j;
 import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.executor.kernel.thread.ExecutorThreadFactoryBuilder;
+import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
 import org.apache.shardingsphere.infra.lock.LockContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -68,7 +69,9 @@ public final class ShardingSphereStatisticsRefreshEngine {
      * Async refresh.
      */
     public void asyncRefresh() {
-        EXECUTOR_SERVICE.execute(this::refresh);
+        if (InstanceType.PROXY == 
contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType())
 {
+            EXECUTOR_SERVICE.execute(this::refresh);
+        }
     }
     
     /**
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilder.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilder.java
deleted file mode 100644
index 44621086837..00000000000
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilder.java
+++ /dev/null
@@ -1,160 +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.event.dispatch.builder;
-
-import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
-import 
org.apache.shardingsphere.metadata.persist.node.metadata.DataSourceMetaDataNode;
-import 
org.apache.shardingsphere.metadata.persist.node.metadata.TableMetaDataNode;
-import 
org.apache.shardingsphere.metadata.persist.node.metadata.ViewMetaDataNode;
-import org.apache.shardingsphere.mode.event.DataChangedEvent;
-import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeRegisteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeUnregisteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitRegisteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitUnregisteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaAddedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaDeletedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableDroppedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewDroppedEvent;
-
-import java.util.Optional;
-
-/**
- * Meta data changed event builder.
- */
-public final class MetaDataChangedEventBuilder {
-    
-    /**
-     * Build meta data changed event.
-     *
-     * @param databaseName database name
-     * @param event data changed event
-     * @return built event
-     */
-    public Optional<DispatchEvent> build(final String databaseName, final 
DataChangedEvent event) {
-        String key = event.getKey();
-        Optional<String> schemaName = DatabaseMetaDataNode.getSchemaName(key);
-        if (schemaName.isPresent()) {
-            return buildSchemaChangedEvent(databaseName, schemaName.get(), 
event);
-        }
-        schemaName = DatabaseMetaDataNode.getSchemaNameByTableNode(key);
-        if (schemaName.isPresent() && isTableMetaDataChanged(event.getKey())) {
-            return buildTableChangedEvent(databaseName, schemaName.get(), 
event);
-        }
-        if (schemaName.isPresent() && isViewMetaDataChanged(event.getKey())) {
-            return buildViewChangedEvent(databaseName, schemaName.get(), 
event);
-        }
-        if (DataSourceMetaDataNode.isDataSourcesNode(key)) {
-            return buildDataSourceChangedEvent(databaseName, event);
-        }
-        return Optional.empty();
-    }
-    
-    private Optional<DispatchEvent> buildSchemaChangedEvent(final String 
databaseName, final String schemaName, final DataChangedEvent event) {
-        switch (event.getType()) {
-            case ADDED:
-            case UPDATED:
-                return Optional.of(new SchemaAddedEvent(databaseName, 
schemaName));
-            case DELETED:
-                return Optional.of(new SchemaDeletedEvent(databaseName, 
schemaName));
-            default:
-                return Optional.empty();
-        }
-    }
-    
-    private boolean isTableMetaDataChanged(final String key) {
-        return TableMetaDataNode.isTableActiveVersionNode(key) || 
TableMetaDataNode.isTableNode(key);
-    }
-    
-    private Optional<DispatchEvent> buildTableChangedEvent(final String 
databaseName, final String schemaName, final DataChangedEvent event) {
-        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& TableMetaDataNode.isTableActiveVersionNode(event.getKey())) {
-            String tableName = 
TableMetaDataNode.getTableNameByActiveVersionNode(event.getKey()).orElseThrow(()
 -> new IllegalStateException("Table name not found."));
-            return Optional.of(new TableCreatedOrAlteredEvent(databaseName, 
schemaName, tableName, event.getKey(), event.getValue()));
-        }
-        if (Type.DELETED == event.getType() && 
TableMetaDataNode.isTableNode(event.getKey())) {
-            String tableName = 
TableMetaDataNode.getTableName(event.getKey()).orElseThrow(() -> new 
IllegalStateException("Table name not found."));
-            return Optional.of(new TableDroppedEvent(databaseName, schemaName, 
tableName));
-        }
-        return Optional.empty();
-    }
-    
-    private boolean isViewMetaDataChanged(final String key) {
-        return ViewMetaDataNode.isViewActiveVersionNode(key) || 
ViewMetaDataNode.isViewNode(key);
-    }
-    
-    private Optional<DispatchEvent> buildViewChangedEvent(final String 
databaseName, final String schemaName, final DataChangedEvent event) {
-        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& ViewMetaDataNode.isViewActiveVersionNode(event.getKey())) {
-            String viewName = 
ViewMetaDataNode.getViewNameByActiveVersionNode(event.getKey()).orElseThrow(() 
-> new IllegalStateException("View name not found."));
-            return Optional.of(new ViewCreatedOrAlteredEvent(databaseName, 
schemaName, viewName, event.getKey(), event.getValue()));
-        }
-        if (Type.DELETED == event.getType() && 
ViewMetaDataNode.isViewNode(event.getKey())) {
-            String viewName = 
ViewMetaDataNode.getViewName(event.getKey()).orElseThrow(() -> new 
IllegalStateException("View name not found."));
-            return Optional.of(new ViewDroppedEvent(databaseName, schemaName, 
viewName, event.getKey(), event.getValue()));
-        }
-        return Optional.empty();
-    }
-    
-    private Optional<DispatchEvent> buildDataSourceChangedEvent(final String 
databaseName, final DataChangedEvent event) {
-        if 
(DataSourceMetaDataNode.isDataSourceUnitActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceUnitNode(event.getKey())) {
-            return buildStorageUnitChangedEvent(databaseName, event);
-        }
-        if 
(DataSourceMetaDataNode.isDataSourceNodeActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceNodeNode(event.getKey())) {
-            return buildStorageNodeChangedEvent(databaseName, event);
-        }
-        return Optional.empty();
-    }
-    
-    private Optional<DispatchEvent> buildStorageUnitChangedEvent(final String 
databaseName, final DataChangedEvent event) {
-        Optional<String> dataSourceUnitName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitActiveVersionNode(event.getKey());
-        if (dataSourceUnitName.isPresent()) {
-            if (Type.ADDED == event.getType()) {
-                return Optional.of(new 
StorageUnitRegisteredEvent(databaseName, dataSourceUnitName.get(), 
event.getKey(), event.getValue()));
-            }
-            if (Type.UPDATED == event.getType()) {
-                return Optional.of(new StorageUnitAlteredEvent(databaseName, 
dataSourceUnitName.get(), event.getKey(), event.getValue()));
-            }
-        }
-        dataSourceUnitName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitNode(event.getKey());
-        if (Type.DELETED == event.getType() && dataSourceUnitName.isPresent()) 
{
-            return Optional.of(new StorageUnitUnregisteredEvent(databaseName, 
dataSourceUnitName.get()));
-        }
-        return Optional.empty();
-    }
-    
-    private Optional<DispatchEvent> buildStorageNodeChangedEvent(final String 
databaseName, final DataChangedEvent event) {
-        Optional<String> dataSourceNodeName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeActiveVersionNode(event.getKey());
-        if (dataSourceNodeName.isPresent()) {
-            if (Type.ADDED == event.getType()) {
-                return Optional.of(new 
StorageNodeRegisteredEvent(databaseName, dataSourceNodeName.get(), 
event.getKey(), event.getValue()));
-            }
-            if (Type.UPDATED == event.getType()) {
-                return Optional.of(new StorageNodeAlteredEvent(databaseName, 
dataSourceNodeName.get(), event.getKey(), event.getValue()));
-            }
-        }
-        dataSourceNodeName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeNode(event.getKey());
-        if (Type.DELETED == event.getType() && dataSourceNodeName.isPresent()) 
{
-            return Optional.of(new StorageNodeUnregisteredEvent(databaseName, 
dataSourceNodeName.get()));
-        }
-        return Optional.empty();
-    }
-}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaAddedEvent.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaAddedEvent.java
deleted file mode 100644
index 79a9259687a..00000000000
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaAddedEvent.java
+++ /dev/null
@@ -1,34 +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.event.dispatch.event.metadata.schema;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * Schema added event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class SchemaAddedEvent implements DispatchEvent {
-    
-    private final String databaseName;
-    
-    private final String schemaName;
-}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaDeletedEvent.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaDeletedEvent.java
deleted file mode 100644
index 72efaa3eeee..00000000000
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaDeletedEvent.java
+++ /dev/null
@@ -1,34 +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.event.dispatch.event.metadata.schema;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * Schema deleted event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class SchemaDeletedEvent implements DispatchEvent {
-    
-    private final String databaseName;
-    
-    private final String schemaName;
-}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableCreatedOrAlteredEvent.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableCreatedOrAlteredEvent.java
deleted file mode 100644
index bc72d30cd9c..00000000000
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableCreatedOrAlteredEvent.java
+++ /dev/null
@@ -1,40 +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.event.dispatch.event.metadata.schema.table;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * Table created or altered event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class TableCreatedOrAlteredEvent implements DispatchEvent {
-    
-    private final String databaseName;
-    
-    private final String schemaName;
-    
-    private final String tableName;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
-}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableDroppedEvent.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableDroppedEvent.java
deleted file mode 100644
index f8aca800dba..00000000000
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableDroppedEvent.java
+++ /dev/null
@@ -1,36 +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.event.dispatch.event.metadata.schema.table;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * Table dropped event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class TableDroppedEvent implements DispatchEvent {
-    
-    private final String databaseName;
-    
-    private final String schemaName;
-    
-    private final String tableName;
-}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewCreatedOrAlteredEvent.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewCreatedOrAlteredEvent.java
deleted file mode 100644
index 6357a4612e3..00000000000
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewCreatedOrAlteredEvent.java
+++ /dev/null
@@ -1,40 +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.event.dispatch.event.metadata.schema.view;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * View created or altered event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class ViewCreatedOrAlteredEvent implements DispatchEvent {
-    
-    private final String databaseName;
-    
-    private final String schemaName;
-    
-    private final String viewName;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
-}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewDroppedEvent.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewDroppedEvent.java
deleted file mode 100644
index 0e5984c5636..00000000000
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewDroppedEvent.java
+++ /dev/null
@@ -1,40 +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.event.dispatch.event.metadata.schema.view;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * View dropped event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class ViewDroppedEvent implements DispatchEvent {
-    
-    private final String databaseName;
-    
-    private final String schemaName;
-    
-    private final String viewName;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
-}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandler.java
new file mode 100644
index 00000000000..45b3ae2c54a
--- /dev/null
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandler.java
@@ -0,0 +1,154 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
+import 
org.apache.shardingsphere.metadata.persist.node.metadata.DataSourceMetaDataNode;
+import 
org.apache.shardingsphere.metadata.persist.node.metadata.TableMetaDataNode;
+import 
org.apache.shardingsphere.metadata.persist.node.metadata.ViewMetaDataNode;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+
+import java.util.Optional;
+
+/**
+ * Meta data changed handler.
+ */
+public final class MetaDataChangedHandler {
+    
+    private final SchemaChangedHandler schemaChangedHandler;
+    
+    private final TableChangedHandler tableChangedHandler;
+    
+    private final ViewChangedHandler viewChangedHandler;
+    
+    private final StorageUnitChangedHandler storageUnitChangedHandler;
+    
+    private final StorageNodeChangedHandler storageNodeChangedHandler;
+    
+    public MetaDataChangedHandler(final ContextManager contextManager) {
+        schemaChangedHandler = new SchemaChangedHandler(contextManager);
+        tableChangedHandler = new TableChangedHandler(contextManager);
+        viewChangedHandler = new ViewChangedHandler(contextManager);
+        storageUnitChangedHandler = new 
StorageUnitChangedHandler(contextManager);
+        storageNodeChangedHandler = new 
StorageNodeChangedHandler(contextManager);
+    }
+    
+    /**
+     * Handle meta data changed.
+     *
+     * @param databaseName database name
+     * @param event data changed event
+     * @return handle completed or not
+     */
+    public boolean handle(final String databaseName, final DataChangedEvent 
event) {
+        String eventKey = event.getKey();
+        Optional<String> schemaName = 
DatabaseMetaDataNode.getSchemaName(eventKey);
+        if (schemaName.isPresent()) {
+            handleSchemaChanged(databaseName, schemaName.get(), event);
+            return true;
+        }
+        schemaName = DatabaseMetaDataNode.getSchemaNameByTableNode(eventKey);
+        if (schemaName.isPresent() && isTableMetaDataChanged(eventKey)) {
+            handleTableChanged(databaseName, schemaName.get(), event);
+            return true;
+        }
+        if (schemaName.isPresent() && isViewMetaDataChanged(eventKey)) {
+            handleViewChanged(databaseName, schemaName.get(), event);
+            return true;
+        }
+        if (DataSourceMetaDataNode.isDataSourcesNode(eventKey)) {
+            handleDataSourceChanged(databaseName, event);
+            return true;
+        }
+        return false;
+    }
+    
+    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 TableMetaDataNode.isTableActiveVersionNode(key) || 
TableMetaDataNode.isTableNode(key);
+    }
+    
+    private void handleTableChanged(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
+        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& TableMetaDataNode.isTableActiveVersionNode(event.getKey())) {
+            tableChangedHandler.handleCreatedOrAltered(databaseName, 
schemaName, event);
+        } else if (Type.DELETED == event.getType() && 
TableMetaDataNode.isTableNode(event.getKey())) {
+            tableChangedHandler.handleDropped(databaseName, schemaName, event);
+        }
+    }
+    
+    private boolean isViewMetaDataChanged(final String key) {
+        return ViewMetaDataNode.isViewActiveVersionNode(key) || 
ViewMetaDataNode.isViewNode(key);
+    }
+    
+    private void handleViewChanged(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
+        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& ViewMetaDataNode.isViewActiveVersionNode(event.getKey())) {
+            viewChangedHandler.handleCreatedOrAltered(databaseName, 
schemaName, event);
+        } else if (Type.DELETED == event.getType() && 
ViewMetaDataNode.isViewNode(event.getKey())) {
+            viewChangedHandler.handleDropped(databaseName, schemaName, event);
+        }
+    }
+    
+    private void handleDataSourceChanged(final String databaseName, final 
DataChangedEvent event) {
+        if 
(DataSourceMetaDataNode.isDataSourceUnitActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceUnitNode(event.getKey())) {
+            handleStorageUnitChanged(databaseName, event);
+        } else if 
(DataSourceMetaDataNode.isDataSourceNodeActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceNodeNode(event.getKey())) {
+            handleStorageNodeChanged(databaseName, event);
+        }
+    }
+    
+    private void handleStorageUnitChanged(final String databaseName, final 
DataChangedEvent event) {
+        Optional<String> dataSourceUnitName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitActiveVersionNode(event.getKey());
+        if (dataSourceUnitName.isPresent()) {
+            if (Type.ADDED == event.getType()) {
+                storageUnitChangedHandler.handleRegistered(databaseName, 
dataSourceUnitName.get(), event);
+            } else if (Type.UPDATED == event.getType()) {
+                storageUnitChangedHandler.handleAltered(databaseName, 
dataSourceUnitName.get(), event);
+            }
+            return;
+        }
+        dataSourceUnitName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitNode(event.getKey());
+        if (Type.DELETED == event.getType() && dataSourceUnitName.isPresent()) 
{
+            storageUnitChangedHandler.handleUnregistered(databaseName, 
dataSourceUnitName.get());
+        }
+    }
+    
+    private void handleStorageNodeChanged(final String databaseName, final 
DataChangedEvent event) {
+        Optional<String> dataSourceNodeName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeActiveVersionNode(event.getKey());
+        if (dataSourceNodeName.isPresent()) {
+            if (Type.ADDED == event.getType()) {
+                storageNodeChangedHandler.handleRegistered(databaseName, 
dataSourceNodeName.get(), event);
+            } else if (Type.UPDATED == event.getType()) {
+                storageNodeChangedHandler.handleAltered(databaseName, 
dataSourceNodeName.get(), event);
+            }
+            return;
+        }
+        dataSourceNodeName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeNode(event.getKey());
+        if (Type.DELETED == event.getType() && dataSourceNodeName.isPresent()) 
{
+            storageNodeChangedHandler.handleUnregistered(databaseName, 
dataSourceNodeName.get());
+        }
+    }
+}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/SchemaChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/SchemaChangedHandler.java
new file mode 100644
index 00000000000..e06af0c2afb
--- /dev/null
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/SchemaChangedHandler.java
@@ -0,0 +1,58 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.mode.metadata.refresher.ShardingSphereStatisticsRefreshEngine;
+
+/**
+ * Schema changed handler.
+ */
+public final class SchemaChangedHandler {
+    
+    private final ContextManager contextManager;
+    
+    private final ShardingSphereStatisticsRefreshEngine 
statisticsRefreshEngine;
+    
+    public SchemaChangedHandler(final ContextManager contextManager) {
+        this.contextManager = contextManager;
+        statisticsRefreshEngine = new 
ShardingSphereStatisticsRefreshEngine(contextManager);
+    }
+    
+    /**
+     * Handle schema created.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     */
+    public void handleCreated(final String databaseName, final String 
schemaName) {
+        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().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) {
+        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropSchema(databaseName,
 schemaName);
+        statisticsRefreshEngine.asyncRefresh();
+    }
+}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageNodeChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageNodeChangedHandler.java
new file mode 100644
index 00000000000..08118079737
--- /dev/null
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageNodeChangedHandler.java
@@ -0,0 +1,63 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+
+/**
+ * Storage node changed handler.
+ */
+@RequiredArgsConstructor
+public final class StorageNodeChangedHandler {
+    
+    private final ContextManager contextManager;
+    
+    /**
+     * Handle storage node registered.
+     *
+     * @param databaseName database name
+     * @param dataSourceUnitName data source unit name
+     * @param event data changed event
+     */
+    public void handleRegistered(final String databaseName, final String 
dataSourceUnitName, final DataChangedEvent event) {
+        // TODO
+    }
+    
+    /**
+     * Handle storage node altered.
+     *
+     * @param databaseName database name
+     * @param dataSourceUnitName data source unit name
+     * @param event data changed event
+     */
+    public void handleAltered(final String databaseName, final String 
dataSourceUnitName, final DataChangedEvent event) {
+        // TODO
+    }
+    
+    /**
+     * Handle storage node unregistered.
+     *
+     * @param databaseName database name
+     * @param dataSourceUnitName data source unit name
+     */
+    public void handleUnregistered(final String databaseName, final String 
dataSourceUnitName) {
+        // TODO
+    }
+}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageUnitChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageUnitChangedHandler.java
new file mode 100644
index 00000000000..fff5ccacaf5
--- /dev/null
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageUnitChangedHandler.java
@@ -0,0 +1,76 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+
+import java.util.Collections;
+
+/**
+ * Storage unit changed handler.
+ */
+@RequiredArgsConstructor
+public final class StorageUnitChangedHandler {
+    
+    private final ContextManager contextManager;
+    
+    /**
+     * Handle storage unit registered.
+     *
+     * @param databaseName database name
+     * @param dataSourceUnitName data source unit name
+     * @param event data changed event
+     */
+    public void handleRegistered(final String databaseName, final String 
dataSourceUnitName, final DataChangedEvent event) {
+        Preconditions.checkArgument(event.getValue().equals(
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getKey())),
+                "Invalid active version: %s of key: %s", event.getValue(), 
event.getKey());
+        DataSourcePoolProperties dataSourcePoolProps = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load(databaseName,
 dataSourceUnitName);
+        
contextManager.getMetaDataContextManager().getStorageUnitManager().registerStorageUnit(databaseName,
 Collections.singletonMap(dataSourceUnitName, dataSourcePoolProps));
+    }
+    
+    /**
+     * Handle storage unit altered.
+     *
+     * @param databaseName database name
+     * @param dataSourceUnitName data source unit name
+     * @param event data changed event
+     */
+    public void handleAltered(final String databaseName, final String 
dataSourceUnitName, final DataChangedEvent event) {
+        Preconditions.checkArgument(event.getValue().equals(
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getKey())),
+                "Invalid active version: %s of key: %s", event.getValue(), 
event.getKey());
+        DataSourcePoolProperties dataSourcePoolProps = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load(databaseName,
 dataSourceUnitName);
+        
contextManager.getMetaDataContextManager().getStorageUnitManager().alterStorageUnit(databaseName,
 Collections.singletonMap(dataSourceUnitName, dataSourcePoolProps));
+    }
+    
+    /**
+     * Handle storage unit unregistered.
+     *
+     * @param databaseName database name
+     * @param dataSourceUnitName data source unit name
+     */
+    public void handleUnregistered(final String databaseName, final String 
dataSourceUnitName) {
+        
Preconditions.checkState(contextManager.getMetaDataContexts().getMetaData().containsDatabase(databaseName),
 "No database '%s' exists.", databaseName);
+        
contextManager.getMetaDataContextManager().getStorageUnitManager().unregisterStorageUnit(databaseName,
 dataSourceUnitName);
+    }
+}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/TableChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/TableChangedHandler.java
new file mode 100644
index 00000000000..1cb6634ab9d
--- /dev/null
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/TableChangedHandler.java
@@ -0,0 +1,70 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import com.google.common.base.Preconditions;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import 
org.apache.shardingsphere.metadata.persist.node.metadata.TableMetaDataNode;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.mode.metadata.refresher.ShardingSphereStatisticsRefreshEngine;
+
+/**
+ * Table changed handler.
+ */
+public final class TableChangedHandler {
+    
+    private final ContextManager contextManager;
+    
+    private final ShardingSphereStatisticsRefreshEngine 
statisticsRefreshEngine;
+    
+    public TableChangedHandler(final ContextManager contextManager) {
+        this.contextManager = contextManager;
+        statisticsRefreshEngine = new 
ShardingSphereStatisticsRefreshEngine(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) {
+        String tableName = 
TableMetaDataNode.getTableNameByActiveVersionNode(event.getKey()).orElseThrow(()
 -> new IllegalStateException("Table name not found."));
+        Preconditions.checkArgument(event.getValue().equals(
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getKey())),
+                "Invalid active version: %s of key: %s", event.getValue(), 
event.getKey());
+        ShardingSphereTable table = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getTable().load(databaseName,
 schemaName, tableName);
+        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
 schemaName, table, null);
+        statisticsRefreshEngine.asyncRefresh();
+    }
+    
+    /**
+     * Handle table altered.
+     *
+     * @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) {
+        String tableName = 
TableMetaDataNode.getTableName(event.getKey()).orElseThrow(() -> new 
IllegalStateException("Table name not found."));
+        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
 schemaName, tableName, null);
+        statisticsRefreshEngine.asyncRefresh();
+    }
+}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/ViewChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/ViewChangedHandler.java
new file mode 100644
index 00000000000..b40a6225dad
--- /dev/null
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/ViewChangedHandler.java
@@ -0,0 +1,70 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import com.google.common.base.Preconditions;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
+import 
org.apache.shardingsphere.metadata.persist.node.metadata.ViewMetaDataNode;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.mode.metadata.refresher.ShardingSphereStatisticsRefreshEngine;
+
+/**
+ * View changed handler.
+ */
+public final class ViewChangedHandler {
+    
+    private final ContextManager contextManager;
+    
+    private final ShardingSphereStatisticsRefreshEngine 
statisticsRefreshEngine;
+    
+    public ViewChangedHandler(final ContextManager contextManager) {
+        this.contextManager = contextManager;
+        statisticsRefreshEngine = new 
ShardingSphereStatisticsRefreshEngine(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) {
+        String viewName = 
ViewMetaDataNode.getViewNameByActiveVersionNode(event.getKey()).orElseThrow(() 
-> new IllegalStateException("View name not found."));
+        Preconditions.checkArgument(event.getValue().equals(
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getKey())),
+                "Invalid active version: %s of key: %s", event.getValue(), 
event.getKey());
+        ShardingSphereView view = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load(databaseName,
 schemaName, viewName);
+        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
 schemaName, null, view);
+        new 
ShardingSphereStatisticsRefreshEngine(contextManager).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) {
+        String viewName = 
ViewMetaDataNode.getViewName(event.getKey()).orElseThrow(() -> new 
IllegalStateException("View name not found."));
+        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
 schemaName, null, viewName);
+        new 
ShardingSphereStatisticsRefreshEngine(contextManager).asyncRefresh();
+    }
+}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/global/ListenerAssistedChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/global/ListenerAssistedChangedHandler.java
index b82eaf814fd..99c096c64f0 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/global/ListenerAssistedChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/global/ListenerAssistedChangedHandler.java
@@ -55,7 +55,7 @@ public final class ListenerAssistedChangedHandler implements 
DataChangedEventHan
     private static void handle(final ContextManager contextManager, final 
String databaseName, final ListenerAssistedType listenerAssistedType) {
         ClusterPersistRepository repository = (ClusterPersistRepository) 
contextManager.getPersistServiceFacade().getRepository();
         if (ListenerAssistedType.CREATE_DATABASE == listenerAssistedType) {
-            
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager.getComputeNodeInstanceContext().getEventBusContext()));
+            
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
             
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().addDatabase(databaseName);
         } else if (ListenerAssistedType.DROP_DATABASE == listenerAssistedType) 
{
             
repository.removeDataListener(DatabaseMetaDataNode.getDatabaseNamePath(databaseName));
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/DataChangedEventListenerRegistry.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/DataChangedEventListenerRegistry.java
index 052a89e1434..4017ce828e7 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/DataChangedEventListenerRegistry.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/DataChangedEventListenerRegistry.java
@@ -57,7 +57,7 @@ public final class DataChangedEventListenerRegistry {
     }
     
     private void registerDatabaseListeners(final String databaseName) {
-        
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), new 
DatabaseMetaDataChangedListener(eventBusContext));
+        
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
     }
     
     private void registerGlobalHandlers(final DataChangedEventHandler handler) 
{
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
index b6d3322e8b4..37fa76bfb75 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
@@ -18,12 +18,12 @@
 package 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
 import org.apache.shardingsphere.mode.event.DataChangedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.builder.MetaDataChangedEventBuilder;
+import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.builder.RuleConfigurationChangedEventBuilder;
 import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
+import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.MetaDataChangedHandler;
 import 
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
 
 import java.util.Optional;
@@ -34,11 +34,11 @@ import java.util.Optional;
 @RequiredArgsConstructor
 public final class DatabaseMetaDataChangedListener implements 
DataChangedEventListener {
     
-    private final EventBusContext eventBusContext;
+    private final ContextManager contextManager;
     
     @Override
     public void onChange(final DataChangedEvent event) {
-        createDispatchEvent(event).ifPresent(eventBusContext::post);
+        
createDispatchEvent(event).ifPresent(contextManager.getComputeNodeInstanceContext().getEventBusContext()::post);
     }
     
     private Optional<DispatchEvent> createDispatchEvent(final DataChangedEvent 
event) {
@@ -47,7 +47,10 @@ public final class DatabaseMetaDataChangedListener 
implements DataChangedEventLi
         if (!databaseName.isPresent()) {
             return Optional.empty();
         }
-        Optional<DispatchEvent> metaDataChangedEvent = new 
MetaDataChangedEventBuilder().build(databaseName.get(), event);
-        return metaDataChangedEvent.isPresent() ? metaDataChangedEvent : new 
RuleConfigurationChangedEventBuilder().build(databaseName.get(), event);
+        boolean handleCompleted = new 
MetaDataChangedHandler(contextManager).handle(databaseName.get(), event);
+        if (handleCompleted) {
+            return Optional.empty();
+        }
+        return new 
RuleConfigurationChangedEventBuilder().build(databaseName.get(), event);
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/ClusterDispatchEventSubscriberRegistry.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/ClusterDispatchEventSubscriberRegistry.java
index 969b6117ebb..8d6f5ebf1d4 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/ClusterDispatchEventSubscriberRegistry.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/ClusterDispatchEventSubscriberRegistry.java
@@ -21,9 +21,7 @@ import lombok.Getter;
 import org.apache.shardingsphere.infra.util.eventbus.EventSubscriber;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.CacheEvictedSubscriber;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.MetaDataChangedSubscriber;
 import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.RuleItemChangedSubscriber;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.StorageUnitEventSubscriber;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -37,9 +35,6 @@ public final class ClusterDispatchEventSubscriberRegistry {
     private final Collection<EventSubscriber> subscribers;
     
     public ClusterDispatchEventSubscriberRegistry(final ContextManager 
contextManager) {
-        subscribers = Arrays.asList(new 
RuleItemChangedSubscriber(contextManager),
-                new MetaDataChangedSubscriber(contextManager),
-                new CacheEvictedSubscriber(),
-                new StorageUnitEventSubscriber(contextManager));
+        subscribers = Arrays.asList(new 
RuleItemChangedSubscriber(contextManager), new CacheEvictedSubscriber());
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriber.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriber.java
deleted file mode 100644
index 936ff6d05cf..00000000000
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriber.java
+++ /dev/null
@@ -1,126 +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.event.dispatch.subscriber.type;
-
-import com.google.common.base.Preconditions;
-import com.google.common.eventbus.Subscribe;
-import lombok.RequiredArgsConstructor;
-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.manager.ContextManager;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaAddedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaDeletedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableDroppedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewDroppedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.DispatchEventSubscriber;
-import 
org.apache.shardingsphere.mode.metadata.refresher.ShardingSphereStatisticsRefreshEngine;
-
-/**
- * Meta data changed subscriber.
- */
-@RequiredArgsConstructor
-public final class MetaDataChangedSubscriber implements 
DispatchEventSubscriber {
-    
-    private final ContextManager contextManager;
-    
-    /**
-     * Renew to added schema.
-     *
-     * @param event schema added event
-     */
-    @Subscribe
-    public synchronized void renew(final SchemaAddedEvent event) {
-        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().addSchema(event.getDatabaseName(),
 event.getSchemaName());
-        refreshStatisticsData();
-    }
-    
-    /**
-     * Renew to delete schema.
-     *
-     * @param event schema delete event
-     */
-    @Subscribe
-    public synchronized void renew(final SchemaDeletedEvent event) {
-        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropSchema(event.getDatabaseName(),
 event.getSchemaName());
-        refreshStatisticsData();
-    }
-    
-    /**
-     * Renew table.
-     *
-     * @param event create or alter table event
-     */
-    @Subscribe
-    public synchronized void renew(final TableCreatedOrAlteredEvent event) {
-        Preconditions.checkArgument(event.getActiveVersion().equals(
-                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())),
-                "Invalid active version: %s of key: %s", 
event.getActiveVersion(), event.getActiveVersionKey());
-        ShardingSphereTable table = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getTable()
-                .load(event.getDatabaseName(), event.getSchemaName(), 
event.getTableName());
-        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
 event.getSchemaName(), table, null);
-        refreshStatisticsData();
-    }
-    
-    /**
-     * Renew table.
-     *
-     * @param event drop table event
-     */
-    @Subscribe
-    public synchronized void renew(final TableDroppedEvent event) {
-        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
 event.getSchemaName(), event.getTableName(), null);
-        refreshStatisticsData();
-    }
-    
-    /**
-     * Renew view.
-     *
-     * @param event create or alter view event
-     */
-    @Subscribe
-    public synchronized void renew(final ViewCreatedOrAlteredEvent event) {
-        Preconditions.checkArgument(event.getActiveVersion().equals(
-                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())),
-                "Invalid active version: %s of key: %s", 
event.getActiveVersion(), event.getActiveVersionKey());
-        ShardingSphereView view = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getView()
-                .load(event.getDatabaseName(), event.getSchemaName(), 
event.getViewName());
-        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
 event.getSchemaName(), null, view);
-        refreshStatisticsData();
-    }
-    
-    /**
-     * Renew view.
-     *
-     * @param event drop view event
-     */
-    @Subscribe
-    public synchronized void renew(final ViewDroppedEvent event) {
-        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
 event.getSchemaName(), null, event.getViewName());
-        refreshStatisticsData();
-    }
-    
-    private void refreshStatisticsData() {
-        if 
(contextManager.getComputeNodeInstanceContext().getModeConfiguration().isCluster()
-                && InstanceType.PROXY == 
contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType())
 {
-            new 
ShardingSphereStatisticsRefreshEngine(contextManager).asyncRefresh();
-        }
-    }
-}
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilderTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilderTest.java
deleted file mode 100644
index 1e6f71f6af0..00000000000
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilderTest.java
+++ /dev/null
@@ -1,98 +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.event.dispatch.builder;
-
-import org.apache.shardingsphere.mode.event.DataChangedEvent;
-import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeRegisteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeUnregisteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitRegisteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitUnregisteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaAddedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaDeletedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableDroppedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewDroppedEvent;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-class MetaDataChangedEventBuilderTest {
-    
-    @ParameterizedTest(name = "{0}")
-    @ArgumentsSource(TestCaseArgumentsProvider.class)
-    void assertBuild(final String name, final String eventKey, final Type 
type, final Class<? extends DispatchEvent> toBePostedEventType) {
-        Optional<DispatchEvent> actual = new 
MetaDataChangedEventBuilder().build("foo_db", new DataChangedEvent(eventKey, 
"value", type));
-        if (null == toBePostedEventType) {
-            assertFalse(actual.isPresent());
-        } else {
-            assertTrue(actual.isPresent());
-            assertThat(actual.get(), instanceOf(toBePostedEventType));
-        }
-    }
-    
-    private static class TestCaseArgumentsProvider implements 
ArgumentsProvider {
-        
-        @Override
-        public final Stream<? extends Arguments> provideArguments(final 
ExtensionContext extensionContext) {
-            return Stream.of(
-                    Arguments.of("changeWithoutDatabase", "/metadata", 
Type.IGNORED, null),
-                    Arguments.of("addSchema", 
"/metadata/foo_db/schemas/foo_schema", Type.ADDED, SchemaAddedEvent.class),
-                    Arguments.of("updateSchema", 
"/metadata/foo_db/schemas/foo_schema", Type.UPDATED, SchemaAddedEvent.class),
-                    Arguments.of("deleteSchema", 
"/metadata/foo_db/schemas/foo_schema", Type.DELETED, SchemaDeletedEvent.class),
-                    Arguments.of("ignoreChangeSchema", 
"/metadata/foo_db/schemas/foo_schema", Type.IGNORED, null),
-                    Arguments.of("addTable", 
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0", 
Type.ADDED, TableCreatedOrAlteredEvent.class),
-                    Arguments.of("updateTable", 
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0", 
Type.UPDATED, TableCreatedOrAlteredEvent.class),
-                    Arguments.of("deleteTable", 
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", Type.DELETED, 
TableDroppedEvent.class),
-                    Arguments.of("invalidAddTable", 
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", Type.ADDED, null),
-                    Arguments.of("invalidDeleteTable", 
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0", 
Type.DELETED, null),
-                    Arguments.of("addView", 
"/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0", 
Type.ADDED, ViewCreatedOrAlteredEvent.class),
-                    Arguments.of("updateView", 
"/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0", 
Type.UPDATED, ViewCreatedOrAlteredEvent.class),
-                    Arguments.of("deleteView", 
"/metadata/foo_db/schemas/foo_schema/views/foo_view", Type.DELETED, 
ViewDroppedEvent.class),
-                    Arguments.of("invalidAddView", 
"/metadata/foo_db/schemas/foo_schema/views/foo_view", Type.ADDED, null),
-                    Arguments.of("invalidDeleteView", 
"/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0", 
Type.DELETED, null),
-                    Arguments.of("registerStorageUnit", 
"/metadata/foo_db/data_sources/units/foo_unit/active_version/0", Type.ADDED, 
StorageUnitRegisteredEvent.class),
-                    Arguments.of("alterStorageUnit", 
"/metadata/foo_db/data_sources/units/foo_unit/active_version/0", Type.UPDATED, 
StorageUnitAlteredEvent.class),
-                    Arguments.of("unregisterStorageUnit", 
"/metadata/foo_db/data_sources/units/foo_unit", Type.DELETED, 
StorageUnitUnregisteredEvent.class),
-                    Arguments.of("invalidRegisterStorageNode", 
"/metadata/foo_db/data_sources/units/foo_unit", Type.ADDED, null),
-                    Arguments.of("invalidUnregisterStorageNode", 
"/metadata/foo_db/data_sources/units/foo_unit/active_version/0", Type.DELETED, 
null),
-                    Arguments.of("ignoreChangeStorageUnit", 
"/metadata/foo_db/data_sources/units/foo_unit", Type.IGNORED, null),
-                    Arguments.of("registerStorageNode", 
"/metadata/foo_db/data_sources/nodes/foo_node/active_version/0", Type.ADDED, 
StorageNodeRegisteredEvent.class),
-                    Arguments.of("alterStorageNode", 
"/metadata/foo_db/data_sources/nodes/foo_node/active_version/0", Type.UPDATED, 
StorageNodeAlteredEvent.class),
-                    Arguments.of("unregisterStorageNode", 
"/metadata/foo_db/data_sources/nodes/foo_node", Type.DELETED, 
StorageNodeUnregisteredEvent.class),
-                    Arguments.of("invalidRegisterStorageNode", 
"/metadata/foo_db/data_sources/nodes/foo_node", Type.ADDED, null),
-                    Arguments.of("invalidUnregisterStorageNode", 
"/metadata/foo_db/data_sources/nodes/foo_node/active_version/0", Type.DELETED, 
null),
-                    Arguments.of("ignoreChangeStorageNode", 
"/metadata/foo_db/data_sources/nodes/foo_node", Type.IGNORED, null),
-                    Arguments.of("invalidChangeDataSource", 
"/metadata/foo_db/data_sources/other", Type.ADDED, null));
-        }
-    }
-}
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandlerTest.java
new file mode 100644
index 00000000000..63cc3544f24
--- /dev/null
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandlerTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
+import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+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.ArgumentMatchers.eq;
+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().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(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().getSchemaMetaDataManager()).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().getSchemaMetaDataManager()).dropSchema("foo_db",
 "foo_schema");
+    }
+    
+    @Test
+    void assertHandleTableCreated() {
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+        ShardingSphereTable table = mock(ShardingSphereTable.class);
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", table, null);
+    }
+    
+    @Test
+    void assertHandleTableAltered() {
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+        ShardingSphereTable table = mock(ShardingSphereTable.class);
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", table, null);
+    }
+    
+    @Test
+    void assertHandleTableDropped() {
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "", 
Type.DELETED));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", "foo_tbl", null);
+    }
+    
+    @Test
+    void assertHandleViewCreated() {
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+        ShardingSphereView view = mock(ShardingSphereView.class);
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, view);
+    }
+    
+    @Test
+    void assertHandleViewAltered() {
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+        ShardingSphereView view = mock(ShardingSphereView.class);
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, view);
+    }
+    
+    @Test
+    void assertHandleViewDropped() {
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view", "", 
Type.DELETED));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, "foo_view");
+    }
+    
+    @Test
+    void assertHandleStorageUnitRegistered() {
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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));
+        
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).registerStorageUnit(eq("foo_db"),
 any());
+    }
+    
+    @Test
+    void assertHandleStorageUnitAltered() {
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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));
+        
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).alterStorageUnit(eq("foo_db"),
 any());
+    }
+    
+    @Test
+    void assertHandleStorageUnitUnregistered() {
+        
when(contextManager.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
+        handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit", "", 
Type.DELETED));
+        
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).unregisterStorageUnit("foo_db",
 "foo_unit");
+    }
+}
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
index d1cdabd4faa..6dfb047211b 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
@@ -17,12 +17,13 @@
 
 package 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type;
 
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 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;
 
@@ -35,29 +36,29 @@ class DatabaseMetaDataChangedListenerTest {
     
     private DatabaseMetaDataChangedListener listener;
     
-    @Mock
-    private EventBusContext eventBusContext;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private ContextManager contextManager;
     
     @BeforeEach
     void setUp() {
-        listener = new DatabaseMetaDataChangedListener(eventBusContext);
+        listener = new DatabaseMetaDataChangedListener(contextManager);
     }
     
     @Test
     void assertOnChangeWithoutDatabase() {
         listener.onChange(new DataChangedEvent("/metadata", "value", 
Type.IGNORED));
-        verify(eventBusContext, times(0)).post(any());
+        
verify(contextManager.getComputeNodeInstanceContext().getEventBusContext(), 
times(0)).post(any());
     }
     
     @Test
     void assertOnChangeWithMetaDataChanged() {
         listener.onChange(new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "value", Type.ADDED));
-        verify(eventBusContext).post(any());
+        
verify(contextManager.getComputeNodeInstanceContext().getEventBusContext(), 
times(0)).post(any());
     }
     
     @Test
     void assertOnChangeWithRuleConfigurationChanged() {
         listener.onChange(new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/rule/", "value", 
Type.ADDED));
-        verify(eventBusContext, times(0)).post(any());
+        
verify(contextManager.getComputeNodeInstanceContext().getEventBusContext(), 
times(0)).post(any());
     }
 }
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriberTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriberTest.java
deleted file mode 100644
index 2482e872109..00000000000
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriberTest.java
+++ /dev/null
@@ -1,105 +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.event.dispatch.subscriber.type;
-
-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.manager.ContextManager;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaAddedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaDeletedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableDroppedEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewDroppedEvent;
-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.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-@MockitoSettings(strictness = Strictness.LENIENT)
-class MetaDataChangedSubscriberTest {
-    
-    private MetaDataChangedSubscriber subscriber;
-    
-    @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);
-        subscriber = new MetaDataChangedSubscriber(contextManager);
-    }
-    
-    @Test
-    void assertRenewWithSchemaAddedEvent() {
-        
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
-        subscriber.renew(new SchemaAddedEvent("foo_db", "foo_schema"));
-        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).addSchema("foo_db",
 "foo_schema");
-    }
-    
-    @Test
-    void assertRenewWithSchemaDeletedEvent() {
-        
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
-        subscriber.renew(new SchemaDeletedEvent("foo_db", "foo_schema"));
-        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropSchema("foo_db",
 "foo_schema");
-    }
-    
-    @Test
-    void assertRenewWithCreateOrAlterTableEvent() {
-        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
-        ShardingSphereTable table = mock(ShardingSphereTable.class);
-        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getTable().load("foo_db",
 "foo_schema", "foo_tbl"))
-                .thenReturn(table);
-        subscriber.renew(new TableCreatedOrAlteredEvent("foo_db", 
"foo_schema", "foo_tbl", "key", "value"));
-        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", table, null);
-    }
-    
-    @Test
-    void assertRenewWithDropTableEvent() {
-        subscriber.renew(new TableDroppedEvent("foo_db", "foo_schema", 
"foo_tbl"));
-        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", "foo_tbl", null);
-    }
-    
-    @Test
-    void assertRenewWithCreateOrAlterViewEvent() {
-        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
-        ShardingSphereView view = mock(ShardingSphereView.class);
-        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load("foo_db",
 "foo_schema", "foo_view"))
-                .thenReturn(view);
-        subscriber.renew(new ViewCreatedOrAlteredEvent("foo_db", "foo_schema", 
"foo_view", "key", "value"));
-        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, view);
-    }
-    
-    @Test
-    void assertRenewWithDropViewEvent() {
-        subscriber.renew(new ViewDroppedEvent("foo_db", "foo_schema", 
"foo_view", "key", "value"));
-        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, "foo_view");
-    }
-}
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/StorageUnitEventSubscriberTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/StorageUnitEventSubscriberTest.java
deleted file mode 100644
index 60598865b7b..00000000000
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/StorageUnitEventSubscriberTest.java
+++ /dev/null
@@ -1,73 +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.event.dispatch.subscriber.type;
-
-import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitAlteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitRegisteredEvent;
-import 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitUnregisteredEvent;
-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.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-class StorageUnitEventSubscriberTest {
-    
-    private StorageUnitEventSubscriber subscriber;
-    
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ContextManager contextManager;
-    
-    @BeforeEach
-    void setUp() {
-        subscriber = new StorageUnitEventSubscriber(contextManager);
-    }
-    
-    @Test
-    void assertRenewWithRegisterStorageUnitEvent() {
-        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
-        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load("foo_db",
 "foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
-        subscriber.renew(new StorageUnitRegisteredEvent("foo_db", "foo_unit", 
"key", "value"));
-        
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).registerStorageUnit(eq("foo_db"),
 any());
-    }
-    
-    @Test
-    void assertRenewWithAlterStorageUnitEvent() {
-        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
-        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load("foo_db",
 "foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
-        subscriber.renew(new StorageUnitAlteredEvent("foo_db", "foo_unit", 
"key", "value"));
-        
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).alterStorageUnit(eq("foo_db"),
 any());
-    }
-    
-    @Test
-    void assertRenewWithUnregisterStorageUnitEvent() {
-        
when(contextManager.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
-        subscriber.renew(new StorageUnitUnregisteredEvent("foo_db", 
"foo_unit"));
-        
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).unregisterStorageUnit("foo_db",
 "foo_unit");
-    }
-}

Reply via email to