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 d9f70bdce39 Add MetaDataChangedEventBuilder (#34060)
d9f70bdce39 is described below

commit d9f70bdce394b77112fda3f69d382a5acfd847b6
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Dec 14 22:54:57 2024 +0800

    Add MetaDataChangedEventBuilder (#34060)
    
    * Add MetaDataChangedEventBuilder
    
    * Add MetaDataChangedEventBuilder
---
 .../builder/MetaDataChangedEventBuilder.java}      |  59 ++++------
 .../builder/MetaDataChangedEventBuilderTest.java}  |  57 ++--------
 .../RuleConfigurationChangedEventBuilderTest.java  |   3 +-
 .../type/DatabaseMetaDataChangedListener.java      | 126 +--------------------
 .../type/DatabaseMetaDataChangedListenerTest.java  |  94 +++------------
 5 files changed, 56 insertions(+), 283 deletions(-)

diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/MetaDataChangedEventBuilder.java
similarity index 77%
copy from 
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
copy to 
mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/MetaDataChangedEventBuilder.java
index 50838500209..d8b5bed3288 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/MetaDataChangedEventBuilder.java
@@ -15,17 +15,14 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type;
+package org.apache.shardingsphere.mode.event.builder;
 
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 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.event.builder.RuleConfigurationChangedEventBuilder;
 import org.apache.shardingsphere.mode.event.dispatch.DispatchEvent;
 import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeAlteredEvent;
 import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeRegisteredEvent;
@@ -39,49 +36,41 @@ import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.Table
 import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.TableDroppedEvent;
 import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.ViewCreatedOrAlteredEvent;
 import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.ViewDroppedEvent;
-import 
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
 
 import java.util.Optional;
 
 /**
- * Database meta data changed listener.
+ * Meta data changed event builder.
  */
-@RequiredArgsConstructor
-public final class DatabaseMetaDataChangedListener implements 
DataChangedEventListener {
+public final class MetaDataChangedEventBuilder {
     
-    private final EventBusContext eventBusContext;
-    
-    private final RuleConfigurationChangedEventBuilder 
ruleConfigChangedEventBuilder = new RuleConfigurationChangedEventBuilder();
-    
-    @Override
-    public void onChange(final DataChangedEvent event) {
-        createDispatchEvent(event).ifPresent(eventBusContext::post);
-    }
-    
-    private Optional<DispatchEvent> createDispatchEvent(final DataChangedEvent 
event) {
+    /**
+     * 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> databaseName = 
DatabaseMetaDataNode.getDatabaseNameBySchemaNode(key);
-        if (!databaseName.isPresent()) {
-            return Optional.empty();
-        }
         Optional<String> schemaName = DatabaseMetaDataNode.getSchemaName(key);
         if (schemaName.isPresent()) {
-            return createSchemaChangedEvent(databaseName.get(), 
schemaName.get(), event);
+            return buildSchemaChangedEvent(databaseName, schemaName.get(), 
event);
         }
         schemaName = DatabaseMetaDataNode.getSchemaNameByTableNode(key);
         if (schemaName.isPresent() && isTableMetaDataChanged(event.getKey())) {
-            return createTableChangedEvent(databaseName.get(), 
schemaName.get(), event);
+            return buildTableChangedEvent(databaseName, schemaName.get(), 
event);
         }
         if (schemaName.isPresent() && isViewMetaDataChanged(event.getKey())) {
-            return createViewChangedEvent(databaseName.get(), 
schemaName.get(), event);
+            return buildViewChangedEvent(databaseName, schemaName.get(), 
event);
         }
         if (DataSourceMetaDataNode.isDataSourcesNode(key)) {
-            return createDataSourceChangedEvent(databaseName.get(), event);
+            return buildDataSourceChangedEvent(databaseName, event);
         }
-        return ruleConfigChangedEventBuilder.build(databaseName.get(), event);
+        return Optional.empty();
     }
     
-    private Optional<DispatchEvent> createSchemaChangedEvent(final String 
databaseName, final String schemaName, final DataChangedEvent event) {
+    private Optional<DispatchEvent> buildSchemaChangedEvent(final String 
databaseName, final String schemaName, final DataChangedEvent event) {
         switch (event.getType()) {
             case ADDED:
             case UPDATED:
@@ -97,7 +86,7 @@ public final class DatabaseMetaDataChangedListener implements 
DataChangedEventLi
         return TableMetaDataNode.isTableActiveVersionNode(key) || 
TableMetaDataNode.isTableNode(key);
     }
     
-    private Optional<DispatchEvent> createTableChangedEvent(final String 
databaseName, final String schemaName, final DataChangedEvent event) {
+    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()));
@@ -113,7 +102,7 @@ public final class DatabaseMetaDataChangedListener 
implements DataChangedEventLi
         return ViewMetaDataNode.isViewActiveVersionNode(key) || 
ViewMetaDataNode.isViewNode(key);
     }
     
-    private Optional<DispatchEvent> createViewChangedEvent(final String 
databaseName, final String schemaName, final DataChangedEvent event) {
+    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()));
@@ -125,17 +114,17 @@ public final class DatabaseMetaDataChangedListener 
implements DataChangedEventLi
         return Optional.empty();
     }
     
-    private Optional<DispatchEvent> createDataSourceChangedEvent(final String 
databaseName, final DataChangedEvent event) {
+    private Optional<DispatchEvent> buildDataSourceChangedEvent(final String 
databaseName, final DataChangedEvent event) {
         if 
(DataSourceMetaDataNode.isDataSourceUnitActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceUnitNode(event.getKey())) {
-            return createStorageUnitChangedEvent(databaseName, event);
+            return buildStorageUnitChangedEvent(databaseName, event);
         }
         if 
(DataSourceMetaDataNode.isDataSourceNodeActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceNodeNode(event.getKey())) {
-            return createStorageNodeChangedEvent(databaseName, event);
+            return buildStorageNodeChangedEvent(databaseName, event);
         }
         return Optional.empty();
     }
     
-    private Optional<DispatchEvent> createStorageUnitChangedEvent(final String 
databaseName, final DataChangedEvent event) {
+    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()) {
@@ -152,7 +141,7 @@ public final class DatabaseMetaDataChangedListener 
implements DataChangedEventLi
         return Optional.empty();
     }
     
-    private Optional<DispatchEvent> createStorageNodeChangedEvent(final String 
databaseName, final DataChangedEvent event) {
+    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()) {
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/MetaDataChangedEventBuilderTest.java
similarity index 73%
copy from 
mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
copy to 
mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/MetaDataChangedEventBuilderTest.java
index d1fda9c64ac..60e9320caa9 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/MetaDataChangedEventBuilderTest.java
@@ -15,13 +15,10 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type;
+package org.apache.shardingsphere.mode.event.builder;
 
-import lombok.SneakyThrows;
-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.event.builder.RuleConfigurationChangedEventBuilder;
 import org.apache.shardingsphere.mode.event.dispatch.DispatchEvent;
 import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeAlteredEvent;
 import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeRegisteredEvent;
@@ -35,60 +32,31 @@ import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.Table
 import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.TableDroppedEvent;
 import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.ViewCreatedOrAlteredEvent;
 import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.ViewDroppedEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterUniqueRuleItemEvent;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.extension.ExtendWith;
 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 org.mockito.Mock;
-import org.mockito.internal.configuration.plugins.Plugins;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.mockito.junit.jupiter.MockitoSettings;
-import org.mockito.quality.Strictness;
 
 import java.util.Optional;
 import java.util.stream.Stream;
 
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+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;
 
-@ExtendWith(MockitoExtension.class)
-@MockitoSettings(strictness = Strictness.LENIENT)
-class DatabaseMetaDataChangedListenerTest {
-    
-    private DatabaseMetaDataChangedListener listener;
-    
-    @Mock
-    private EventBusContext eventBusContext;
-    
-    @BeforeEach
-    void setUp() {
-        listener = new DatabaseMetaDataChangedListener(eventBusContext);
-        setMockedBuilder();
-    }
-    
-    @SneakyThrows(ReflectiveOperationException.class)
-    private void setMockedBuilder() {
-        RuleConfigurationChangedEventBuilder ruleConfigChangedEventBuilder = 
mock(RuleConfigurationChangedEventBuilder.class);
-        when(ruleConfigChangedEventBuilder.build(eq("foo_db"), 
any(DataChangedEvent.class))).thenReturn(Optional.of(new 
AlterUniqueRuleItemEvent("foo_db", "key", "value", "type")));
-        
Plugins.getMemberAccessor().set(DatabaseMetaDataChangedListener.class.getDeclaredField("ruleConfigChangedEventBuilder"),
 listener, ruleConfigChangedEventBuilder);
-    }
+class MetaDataChangedEventBuilderTest {
     
     @ParameterizedTest(name = "{0}")
     @ArgumentsSource(TestCaseArgumentsProvider.class)
-    void assertOnChangeWithMetaData(final String name, final String eventKey, 
final Type type, final Class<? extends DispatchEvent> toBePostedEventType) {
-        listener.onChange(new DataChangedEvent(eventKey, "value", type));
+    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) {
-            verify(eventBusContext, times(0)).post(any());
+            assertFalse(actual.isPresent());
         } else {
-            verify(eventBusContext).post(any(toBePostedEventType));
+            assertTrue(actual.isPresent());
+            assertThat(actual.get(), instanceOf(toBePostedEventType));
         }
     }
     
@@ -124,8 +92,7 @@ class DatabaseMetaDataChangedListenerTest {
                     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),
-                    Arguments.of("changeRule", 
"/metadata/foo_db/schemas/foo_schema/rule/", Type.ADDED, 
AlterUniqueRuleItemEvent.class));
+                    Arguments.of("invalidChangeDataSource", 
"/metadata/foo_db/data_sources/other", Type.ADDED, null));
         }
     }
 }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationChangedEventBuilderTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationChangedEventBuilderTest.java
index e9a1fbd1ea7..9d888833df2 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationChangedEventBuilderTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationChangedEventBuilderTest.java
@@ -61,8 +61,7 @@ class RuleConfigurationChangedEventBuilderTest {
     
     @ParameterizedTest(name = "{0}")
     @ArgumentsSource(TestCaseArgumentsProvider.class)
-    void assertBuild(final String name, final String eventKey, final String 
eventValue, final DataChangedEvent.Type type,
-                     final boolean isEventPresent, final Class<? extends 
DispatchEvent> dispatchEventClass) {
+    void assertBuild(final String name, final String eventKey, final String 
eventValue, final Type type, final boolean isEventPresent, final Class<? 
extends DispatchEvent> dispatchEventClass) {
         RuleNodePathProvider ruleNodePathProvider = 
mock(RuleNodePathProvider.class, RETURNS_DEEP_STUBS);
         when(ruleNodePathProvider.getRuleNodePath()).thenReturn(new 
RuleNodePath("fixture", Collections.singleton("named"), 
Collections.singleton("unique")));
         
when(ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)).thenReturn(Collections.singleton(ruleNodePathProvider));
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 50838500209..e0d6c155378 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
@@ -20,25 +20,10 @@ package 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.t
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 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.event.builder.MetaDataChangedEventBuilder;
 import 
org.apache.shardingsphere.mode.event.builder.RuleConfigurationChangedEventBuilder;
 import org.apache.shardingsphere.mode.event.dispatch.DispatchEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeAlteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeRegisteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeUnregisteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.unit.StorageUnitAlteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.unit.StorageUnitRegisteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.unit.StorageUnitUnregisteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.SchemaAddedEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.SchemaDeletedEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.TableCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.TableDroppedEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.ViewDroppedEvent;
 import 
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
 
 import java.util.Optional;
@@ -49,10 +34,12 @@ import java.util.Optional;
 @RequiredArgsConstructor
 public final class DatabaseMetaDataChangedListener implements 
DataChangedEventListener {
     
-    private final EventBusContext eventBusContext;
+    private final MetaDataChangedEventBuilder metaDataChangedEventBuilder = 
new MetaDataChangedEventBuilder();
     
     private final RuleConfigurationChangedEventBuilder 
ruleConfigChangedEventBuilder = new RuleConfigurationChangedEventBuilder();
     
+    private final EventBusContext eventBusContext;
+    
     @Override
     public void onChange(final DataChangedEvent event) {
         createDispatchEvent(event).ifPresent(eventBusContext::post);
@@ -64,108 +51,7 @@ public final class DatabaseMetaDataChangedListener 
implements DataChangedEventLi
         if (!databaseName.isPresent()) {
             return Optional.empty();
         }
-        Optional<String> schemaName = DatabaseMetaDataNode.getSchemaName(key);
-        if (schemaName.isPresent()) {
-            return createSchemaChangedEvent(databaseName.get(), 
schemaName.get(), event);
-        }
-        schemaName = DatabaseMetaDataNode.getSchemaNameByTableNode(key);
-        if (schemaName.isPresent() && isTableMetaDataChanged(event.getKey())) {
-            return createTableChangedEvent(databaseName.get(), 
schemaName.get(), event);
-        }
-        if (schemaName.isPresent() && isViewMetaDataChanged(event.getKey())) {
-            return createViewChangedEvent(databaseName.get(), 
schemaName.get(), event);
-        }
-        if (DataSourceMetaDataNode.isDataSourcesNode(key)) {
-            return createDataSourceChangedEvent(databaseName.get(), event);
-        }
-        return ruleConfigChangedEventBuilder.build(databaseName.get(), event);
-    }
-    
-    private Optional<DispatchEvent> createSchemaChangedEvent(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> createTableChangedEvent(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> createViewChangedEvent(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> createDataSourceChangedEvent(final String 
databaseName, final DataChangedEvent event) {
-        if 
(DataSourceMetaDataNode.isDataSourceUnitActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceUnitNode(event.getKey())) {
-            return createStorageUnitChangedEvent(databaseName, event);
-        }
-        if 
(DataSourceMetaDataNode.isDataSourceNodeActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceNodeNode(event.getKey())) {
-            return createStorageNodeChangedEvent(databaseName, event);
-        }
-        return Optional.empty();
-    }
-    
-    private Optional<DispatchEvent> createStorageUnitChangedEvent(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> createStorageNodeChangedEvent(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();
+        Optional<DispatchEvent> metaDataChangedEvent = 
metaDataChangedEventBuilder.build(databaseName.get(), event);
+        return metaDataChangedEvent.isPresent() ? metaDataChangedEvent : 
ruleConfigChangedEventBuilder.build(databaseName.get(), event);
     }
 }
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 d1fda9c64ac..d1cdabd4faa 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,50 +17,20 @@
 
 package 
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type;
 
-import lombok.SneakyThrows;
 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.event.builder.RuleConfigurationChangedEventBuilder;
-import org.apache.shardingsphere.mode.event.dispatch.DispatchEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeAlteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeRegisteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.node.StorageNodeUnregisteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.unit.StorageUnitAlteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.unit.StorageUnitRegisteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.datasource.unit.StorageUnitUnregisteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.SchemaAddedEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.SchemaDeletedEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.TableCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.TableDroppedEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.ViewDroppedEvent;
-import 
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterUniqueRuleItemEvent;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-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 org.mockito.Mock;
-import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.jupiter.MockitoExtension;
-import org.mockito.junit.jupiter.MockitoSettings;
-import org.mockito.quality.Strictness;
-
-import java.util.Optional;
-import java.util.stream.Stream;
 
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
-@MockitoSettings(strictness = Strictness.LENIENT)
 class DatabaseMetaDataChangedListenerTest {
     
     private DatabaseMetaDataChangedListener listener;
@@ -71,61 +41,23 @@ class DatabaseMetaDataChangedListenerTest {
     @BeforeEach
     void setUp() {
         listener = new DatabaseMetaDataChangedListener(eventBusContext);
-        setMockedBuilder();
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private void setMockedBuilder() {
-        RuleConfigurationChangedEventBuilder ruleConfigChangedEventBuilder = 
mock(RuleConfigurationChangedEventBuilder.class);
-        when(ruleConfigChangedEventBuilder.build(eq("foo_db"), 
any(DataChangedEvent.class))).thenReturn(Optional.of(new 
AlterUniqueRuleItemEvent("foo_db", "key", "value", "type")));
-        
Plugins.getMemberAccessor().set(DatabaseMetaDataChangedListener.class.getDeclaredField("ruleConfigChangedEventBuilder"),
 listener, ruleConfigChangedEventBuilder);
+    @Test
+    void assertOnChangeWithoutDatabase() {
+        listener.onChange(new DataChangedEvent("/metadata", "value", 
Type.IGNORED));
+        verify(eventBusContext, times(0)).post(any());
     }
     
-    @ParameterizedTest(name = "{0}")
-    @ArgumentsSource(TestCaseArgumentsProvider.class)
-    void assertOnChangeWithMetaData(final String name, final String eventKey, 
final Type type, final Class<? extends DispatchEvent> toBePostedEventType) {
-        listener.onChange(new DataChangedEvent(eventKey, "value", type));
-        if (null == toBePostedEventType) {
-            verify(eventBusContext, times(0)).post(any());
-        } else {
-            verify(eventBusContext).post(any(toBePostedEventType));
-        }
+    @Test
+    void assertOnChangeWithMetaDataChanged() {
+        listener.onChange(new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "value", Type.ADDED));
+        verify(eventBusContext).post(any());
     }
     
-    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),
-                    Arguments.of("changeRule", 
"/metadata/foo_db/schemas/foo_schema/rule/", Type.ADDED, 
AlterUniqueRuleItemEvent.class));
-        }
+    @Test
+    void assertOnChangeWithRuleConfigurationChanged() {
+        listener.onChange(new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/rule/", "value", 
Type.ADDED));
+        verify(eventBusContext, times(0)).post(any());
     }
 }


Reply via email to