You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by qi...@apache.org on 2021/02/02 09:33:29 UTC

[shardingsphere] branch master updated: Refactor governance listener event (#9267)

This is an automated email from the ASF dual-hosted git repository.

qiulu 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 caba1ae  Refactor governance listener event (#9267)
caba1ae is described below

commit caba1ae9e5612d6bc7588548818d26f29d66eba0
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Tue Feb 2 17:32:58 2021 +0800

    Refactor governance listener event (#9267)
    
    * Refactor governance listener event
    
    * Refactor governance listener event
---
 .../metadata/GovernanceMetaDataContexts.java       |  10 +-
 .../metadata/GovernanceMetaDataContextsTest.java   |   7 +-
 .../governance/core/config/ConfigCenter.java       |  38 ++-
 .../config/listener/SchemaChangedListener.java     | 167 -------------
 .../listener/metadata/SchemasChangedListener.java  |   4 +-
 ...taAddedEvent.java => MetaDataCreatedEvent.java} |  15 +-
 .../MetaDataDroppedEvent.java}                     |   9 +-
 .../MetaDataPersistedEvent.java}                   |   8 +-
 ...maPersistEvent.java => SchemaAlteredEvent.java} |   3 +-
 .../notifier/GovernanceSchemaChangedNotifier.java  |   4 +-
 .../governance/core/config/ConfigCenterTest.java   |  26 +-
 .../config/listener/SchemaChangedListenerTest.java | 267 ---------------------
 .../rdl/impl/CreateDatabaseBackendHandler.java     |   4 +-
 .../rdl/impl/DropDatabaseBackendHandler.java       |   4 +-
 14 files changed, 69 insertions(+), 497 deletions(-)

diff --git a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
index 0931a49..3061c92 100644
--- a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
+++ b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
@@ -23,8 +23,8 @@ import org.apache.shardingsphere.governance.core.event.model.auth.Authentication
 import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceChangeCompletedEvent;
 import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceChangedEvent;
 import org.apache.shardingsphere.governance.core.event.model.lock.UnlockEvent;
-import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataAddedEvent;
 import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataDeletedEvent;
+import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataPersistedEvent;
 import org.apache.shardingsphere.governance.core.event.model.props.PropertiesChangedEvent;
 import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsChangedEvent;
 import org.apache.shardingsphere.governance.core.event.model.schema.SchemaChangedEvent;
@@ -154,13 +154,13 @@ public final class GovernanceMetaDataContexts implements MetaDataContexts {
     }
     
     /**
-     * Renew to add new schema.
+     * Renew to persist meta data.
      *
-     * @param event schema add event
+     * @param event meta data persisted event
      * @throws SQLException SQL exception
      */
     @Subscribe
-    public synchronized void renew(final MetaDataAddedEvent event) throws SQLException {
+    public synchronized void renew(final MetaDataPersistedEvent event) throws SQLException {
         Map<String, ShardingSphereMetaData> metaDataMap = new HashMap<>(metaDataContexts.getMetaDataMap());
         metaDataMap.put(event.getSchemaName(), createAddedMetaData(event));
         metaDataContexts = new StandardMetaDataContexts(metaDataMap, metaDataContexts.getExecutorEngine(), metaDataContexts.getAuthentication(), metaDataContexts.getProps());
@@ -289,7 +289,7 @@ public final class GovernanceMetaDataContexts implements MetaDataContexts {
         }
     }
     
-    private ShardingSphereMetaData createAddedMetaData(final MetaDataAddedEvent event) throws SQLException {
+    private ShardingSphereMetaData createAddedMetaData(final MetaDataPersistedEvent event) throws SQLException {
         String schemaName = event.getSchemaName();
         Map<String, Map<String, DataSource>> dataSourcesMap = createDataSourcesMap(Collections.singletonMap(schemaName, 
                 governanceFacade.getConfigCenter().loadDataSourceConfigurations(schemaName)));
diff --git a/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java b/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
index 7c1113c..6db48d1 100644
--- a/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
@@ -20,8 +20,8 @@ package org.apache.shardingsphere.governance.context.metadata;
 import org.apache.shardingsphere.governance.core.config.ConfigCenter;
 import org.apache.shardingsphere.governance.core.event.model.auth.AuthenticationChangedEvent;
 import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceChangedEvent;
-import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataAddedEvent;
 import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataDeletedEvent;
+import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataPersistedEvent;
 import org.apache.shardingsphere.governance.core.event.model.props.PropertiesChangedEvent;
 import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsChangedEvent;
 import org.apache.shardingsphere.governance.core.event.model.schema.SchemaChangedEvent;
@@ -40,8 +40,8 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rule.event.RuleChangedEvent;
-import org.apache.shardingsphere.test.mock.MockedDataSource;
 import org.apache.shardingsphere.replicaquery.rule.ReplicaQueryRule;
+import org.apache.shardingsphere.test.mock.MockedDataSource;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -51,7 +51,6 @@ import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.SQLException;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
@@ -135,7 +134,7 @@ public final class GovernanceMetaDataContextsTest {
     
     @Test
     public void assertSchemaAdd() throws SQLException {
-        MetaDataAddedEvent event = new MetaDataAddedEvent("schema_add", new HashMap<>(), new LinkedList<>());
+        MetaDataPersistedEvent event = new MetaDataPersistedEvent("schema_add");
         when(configCenter.loadDataSourceConfigurations("schema_add")).thenReturn(getDataSourceConfigurations());
         governanceMetaDataContexts.renew(event);
         assertNotNull(governanceMetaDataContexts.getMetaData("schema_add"));
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/ConfigCenter.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/ConfigCenter.java
index eb6fb3c..a5c9c8a 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/ConfigCenter.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/ConfigCenter.java
@@ -25,12 +25,13 @@ import org.apache.shardingsphere.governance.core.config.checker.RuleConfiguratio
 import org.apache.shardingsphere.governance.core.config.checker.RuleConfigurationCheckerFactory;
 import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceAlteredEvent;
 import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourcePersistEvent;
+import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataCreatedEvent;
+import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataDroppedEvent;
 import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationCachedEvent;
 import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsAlteredEvent;
 import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsPersistEvent;
 import org.apache.shardingsphere.governance.core.event.model.rule.SwitchRuleConfigurationEvent;
-import org.apache.shardingsphere.governance.core.event.model.schema.SchemaNamePersistEvent;
-import org.apache.shardingsphere.governance.core.event.model.schema.SchemaPersistEvent;
+import org.apache.shardingsphere.governance.core.event.model.schema.SchemaAlteredEvent;
 import org.apache.shardingsphere.governance.core.yaml.config.YamlConfigurationConverter;
 import org.apache.shardingsphere.governance.core.yaml.config.YamlDataSourceConfiguration;
 import org.apache.shardingsphere.governance.core.yaml.config.YamlDataSourceConfigurationWrap;
@@ -138,29 +139,42 @@ public final class ConfigCenter {
     }
     
     /**
-     * Persist schema name.
+     * Persist meta data.
      * 
-     * @param event Schema name event.
+     * @param event meta data created event.
      */
     @Subscribe
-    public synchronized void renew(final SchemaNamePersistEvent event) {
+    public synchronized void renew(final MetaDataCreatedEvent event) {
         String schemaNames = repository.get(node.getMetadataNodePath());
         Collection<String> schemas = Strings.isNullOrEmpty(schemaNames) ? new LinkedHashSet<>() : new LinkedHashSet<>(Splitter.on(",").splitToList(schemaNames));
-        if (event.isDrop()) {
-            schemas.remove(event.getSchemaName());
-        } else if (!schemas.contains(event.getSchemaName())) {
+        if (!schemas.contains(event.getSchemaName())) {
             schemas.add(event.getSchemaName());
+            repository.persist(node.getMetadataNodePath(), Joiner.on(",").join(schemas));
         }
-        repository.persist(node.getMetadataNodePath(), Joiner.on(",").join(schemas));
     }
     
     /**
-     * Persist meta data.
+     * Delete meta data.
+     *
+     * @param event meta data dropped event
+     */
+    @Subscribe
+    public synchronized void renew(final MetaDataDroppedEvent event) {
+        String schemaNames = repository.get(node.getMetadataNodePath());
+        Collection<String> schemas = Strings.isNullOrEmpty(schemaNames) ? new LinkedHashSet<>() : new LinkedHashSet<>(Splitter.on(",").splitToList(schemaNames));
+        if (schemas.contains(event.getSchemaName())) {
+            schemas.remove(event.getSchemaName());
+            repository.persist(node.getMetadataNodePath(), Joiner.on(",").join(schemas));
+        }
+    }
+    
+    /**
+     * Persist schema.
      *
-     * @param event Meta data event.
+     * @param event schema altered event.
      */
     @Subscribe
-    public synchronized void renew(final SchemaPersistEvent event) {
+    public synchronized void renew(final SchemaAlteredEvent event) {
         persistSchema(event.getSchemaName(), event.getSchema());
     }
     
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListener.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListener.java
deleted file mode 100644
index 223d688..0000000
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListener.java
+++ /dev/null
@@ -1,167 +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.governance.core.config.listener;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import org.apache.commons.collections4.SetUtils;
-import org.apache.shardingsphere.governance.core.config.ConfigCenterNode;
-import org.apache.shardingsphere.governance.core.event.listener.PostGovernanceRepositoryEventListener;
-import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
-import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceChangedEvent;
-import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataAddedEvent;
-import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataDeletedEvent;
-import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationCachedEvent;
-import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsChangedEvent;
-import org.apache.shardingsphere.governance.core.event.model.schema.SchemaChangedEvent;
-import org.apache.shardingsphere.governance.core.yaml.config.YamlDataSourceConfigurationWrap;
-import org.apache.shardingsphere.governance.core.yaml.config.schema.YamlSchema;
-import org.apache.shardingsphere.governance.core.yaml.swapper.DataSourceConfigurationYamlSwapper;
-import org.apache.shardingsphere.governance.core.yaml.swapper.SchemaYamlSwapper;
-import org.apache.shardingsphere.governance.repository.api.ConfigurationRepository;
-import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
-import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent.Type;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.yaml.config.YamlRootRuleConfigurations;
-import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
-import org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.Map.Entry;
-import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * Schema changed listener.
- */
-public final class SchemaChangedListener extends PostGovernanceRepositoryEventListener<GovernanceEvent> {
-    
-    private final ConfigCenterNode configurationNode;
-    
-    private final Collection<String> existedSchemaNames;
-    
-    public SchemaChangedListener(final ConfigurationRepository configurationRepository, final Collection<String> schemaNames) {
-        super(configurationRepository, new ConfigCenterNode().getAllSchemaConfigPaths(schemaNames));
-        configurationNode = new ConfigCenterNode();
-        existedSchemaNames = new LinkedHashSet<>(schemaNames);
-    }
-    
-    @Override
-    protected Optional<GovernanceEvent> createEvent(final DataChangedEvent event) {
-        // TODO Consider removing the following one.
-        if (configurationNode.getMetadataNodePath().equals(event.getKey())) {
-            return createSchemaNamesUpdatedEvent(event.getValue());
-        }
-        String schemaName = configurationNode.getSchemaName(event.getKey());
-        if (Strings.isNullOrEmpty(schemaName) || !isValidNodeChangedEvent(schemaName, event.getKey())) {
-            return Optional.empty();
-        }
-        if (Type.ADDED == event.getType()) {
-            if (event.getKey().startsWith(configurationNode.getCachePath(configurationNode.getRulePath(schemaName)))) {
-                return Optional.of(createRuleConfigurationCachedEvent(schemaName, event));
-            }
-            return Optional.of(createAddedEvent(schemaName));
-        }
-        if (Type.UPDATED == event.getType()) {
-            return Optional.of(createUpdatedEvent(schemaName, event));
-        }
-        if (Type.DELETED == event.getType()) {
-            if (event.getKey().startsWith(configurationNode.getCachePath(configurationNode.getRulePath(schemaName)))) {
-                return Optional.empty();
-            }
-            existedSchemaNames.remove(schemaName);
-            return Optional.of(new MetaDataDeletedEvent(schemaName));
-        }
-        return Optional.empty();
-    }
-    
-    private Optional<GovernanceEvent> createSchemaNamesUpdatedEvent(final String schemaNames) {
-        Collection<String> persistedSchemaNames = configurationNode.splitSchemaName(schemaNames);
-        Set<String> addedSchemaNames = SetUtils.difference(new HashSet<>(persistedSchemaNames), new HashSet<>(existedSchemaNames));
-        if (!addedSchemaNames.isEmpty()) {
-            return Optional.of(createAddedEvent(addedSchemaNames.iterator().next()));
-        }
-        Set<String> deletedSchemaNames = SetUtils.difference(new HashSet<>(existedSchemaNames), new HashSet<>(persistedSchemaNames));
-        if (!deletedSchemaNames.isEmpty()) {
-            String schemaName = deletedSchemaNames.iterator().next();
-            existedSchemaNames.remove(schemaName);
-            return Optional.of(new MetaDataDeletedEvent(schemaName));
-        }
-        return Optional.empty();
-    }
-    
-    private boolean isValidNodeChangedEvent(final String schemaName, final String nodeFullPath) {
-        return !existedSchemaNames.contains(schemaName) || configurationNode.getDataSourcePath(schemaName).equals(nodeFullPath) 
-                || configurationNode.getRulePath(schemaName).equals(nodeFullPath)
-                || configurationNode.getSchemaPath(schemaName).equals(nodeFullPath)
-                || nodeFullPath.startsWith(configurationNode.getCachePath(configurationNode.getRulePath(schemaName)));
-    }
-    
-    private GovernanceEvent createAddedEvent(final String schemaName) {
-        existedSchemaNames.add(schemaName);
-        return new MetaDataAddedEvent(schemaName, Collections.emptyMap(), Collections.emptyList());
-    }
-    
-    private GovernanceEvent createUpdatedEvent(final String schemaName, final DataChangedEvent event) {
-        // TODO Consider remove judgement.
-        return existedSchemaNames.contains(schemaName) ? createUpdatedEventForExistedSchema(schemaName, event) : createAddedEvent(schemaName);
-    }
-    
-    private GovernanceEvent createUpdatedEventForExistedSchema(final String schemaName, final DataChangedEvent event) {
-        if (event.getKey().equals(configurationNode.getDataSourcePath(schemaName))) {
-            return createDataSourceChangedEvent(schemaName, event);
-        } else if (event.getKey().equals(configurationNode.getRulePath(schemaName))) {
-            return createRuleChangedEvent(schemaName, event);
-        }
-        return createSchemaChangedEvent(schemaName, event);
-    }
-    
-    private DataSourceChangedEvent createDataSourceChangedEvent(final String schemaName, final DataChangedEvent event) {
-        YamlDataSourceConfigurationWrap result = YamlEngine.unmarshal(event.getValue(), YamlDataSourceConfigurationWrap.class);
-        Preconditions.checkState(null != result && !result.getDataSources().isEmpty(), "No available data sources to load for governance.");
-        return new DataSourceChangedEvent(schemaName, result.getDataSources().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> new DataSourceConfigurationYamlSwapper().swapToObject(entry.getValue()), (oldValue, currentValue) -> oldValue, LinkedHashMap::new)));
-    }
-    
-    private GovernanceEvent createRuleChangedEvent(final String schemaName, final DataChangedEvent event) {
-        return new RuleConfigurationsChangedEvent(schemaName, getRuleConfigurations(event.getValue()));
-    }
-    
-    private GovernanceEvent createSchemaChangedEvent(final String schemaName, final DataChangedEvent event) {
-        return new SchemaChangedEvent(schemaName, new SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(), YamlSchema.class)));
-    }
-    
-    private GovernanceEvent createRuleConfigurationCachedEvent(final String schemaName, final DataChangedEvent event) {
-        return new RuleConfigurationCachedEvent(getCacheId(event.getKey()), schemaName);
-    }
-    
-    private String getCacheId(final String path) {
-        return path.substring(path.lastIndexOf('/') + 1);
-    }
-    
-    private Collection<RuleConfiguration> getRuleConfigurations(final String yamlContent) {
-        YamlRootRuleConfigurations configurations = YamlEngine.unmarshal(yamlContent, YamlRootRuleConfigurations.class);
-        Preconditions.checkState(null != configurations, "No available rule to load for governance.");
-        return new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(configurations.getRules());
-    }
-}
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/listener/metadata/SchemasChangedListener.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/listener/metadata/SchemasChangedListener.java
index 2b2b6f8..0e461de 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/listener/metadata/SchemasChangedListener.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/listener/metadata/SchemasChangedListener.java
@@ -21,8 +21,8 @@ import org.apache.commons.collections4.SetUtils;
 import org.apache.shardingsphere.governance.core.config.ConfigCenterNode;
 import org.apache.shardingsphere.governance.core.event.listener.PostGovernanceRepositoryEventListener;
 import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
-import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataAddedEvent;
 import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataDeletedEvent;
+import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataPersistedEvent;
 import org.apache.shardingsphere.governance.repository.api.ConfigurationRepository;
 import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
 
@@ -69,7 +69,7 @@ public final class SchemasChangedListener extends PostGovernanceRepositoryEventL
     
     private GovernanceEvent createAddedEvent(final String schemaName) {
         existedSchemaNames.add(schemaName);
-        return new MetaDataAddedEvent(schemaName, Collections.emptyMap(), Collections.emptyList());
+        return new MetaDataPersistedEvent(schemaName);
     }
     
     private GovernanceEvent createDeletedEvent(final String schemaName) {
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataAddedEvent.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataCreatedEvent.java
similarity index 65%
rename from shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataAddedEvent.java
rename to shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataCreatedEvent.java
index fb1a83f..b928e51 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataAddedEvent.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataCreatedEvent.java
@@ -20,23 +20,12 @@ package org.apache.shardingsphere.governance.core.event.model.metadata;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
-import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
-import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
-
-import java.util.Collection;
-import java.util.Map;
-
 /**
- * Meta data added event.
+ * Meta data created event.
  */
 @RequiredArgsConstructor
 @Getter
-public final class MetaDataAddedEvent implements GovernanceEvent {
+public final class MetaDataCreatedEvent {
     
     private final String schemaName;
-    
-    private final Map<String, DataSourceConfiguration> dataSourceConfigurations;
-    
-    private final Collection<RuleConfiguration> ruleConfigurations;
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaNamePersistEvent.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataDroppedEvent.java
similarity index 76%
copy from shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaNamePersistEvent.java
copy to shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataDroppedEvent.java
index 748b40e..61cc5fd 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaNamePersistEvent.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataDroppedEvent.java
@@ -15,20 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.event.model.schema;
+package org.apache.shardingsphere.governance.core.event.model.metadata;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
 
 /**
- * Schema name persist event.
+ * Meta data dropped event.
  */
 @RequiredArgsConstructor
 @Getter
-public final class SchemaNamePersistEvent implements GovernanceEvent {
+public final class MetaDataDroppedEvent {
     
     private final String schemaName;
-    
-    private final boolean isDrop; 
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaNamePersistEvent.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataPersistedEvent.java
similarity index 83%
rename from shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaNamePersistEvent.java
rename to shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataPersistedEvent.java
index 748b40e..aa669bd 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaNamePersistEvent.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/metadata/MetaDataPersistedEvent.java
@@ -15,20 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.event.model.schema;
+package org.apache.shardingsphere.governance.core.event.model.metadata;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
 
 /**
- * Schema name persist event.
+ * Meta data persisted event.
  */
 @RequiredArgsConstructor
 @Getter
-public final class SchemaNamePersistEvent implements GovernanceEvent {
+public final class MetaDataPersistedEvent implements GovernanceEvent {
     
     private final String schemaName;
-    
-    private final boolean isDrop; 
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaPersistEvent.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaAlteredEvent.java
similarity index 89%
rename from shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaPersistEvent.java
rename to shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaAlteredEvent.java
index c4d616a..def429e 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaPersistEvent.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/schema/SchemaAlteredEvent.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.governance.core.event.model.schema;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 
 /**
@@ -27,7 +26,7 @@ import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
  */
 @RequiredArgsConstructor
 @Getter
-public final class SchemaPersistEvent implements GovernanceEvent {
+public final class SchemaAlteredEvent {
     
     private final String schemaName;
     
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/notifier/GovernanceSchemaChangedNotifier.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/notifier/GovernanceSchemaChangedNotifier.java
index 3204ef5..badfc0b 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/notifier/GovernanceSchemaChangedNotifier.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/notifier/GovernanceSchemaChangedNotifier.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.governance.core.event.notifier;
 
-import org.apache.shardingsphere.governance.core.event.model.schema.SchemaPersistEvent;
+import org.apache.shardingsphere.governance.core.event.model.schema.SchemaAlteredEvent;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.metadata.schema.refresher.spi.SchemaChangedNotifier;
@@ -29,7 +29,7 @@ public final class GovernanceSchemaChangedNotifier implements SchemaChangedNotif
     
     @Override
     public void notify(final String name, final ShardingSphereSchema schema) {
-        ShardingSphereEventBus.getInstance().post(new SchemaPersistEvent(name, schema));
+        ShardingSphereEventBus.getInstance().post(new SchemaAlteredEvent(name, schema));
     }
     
     @Override
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/config/ConfigCenterTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/config/ConfigCenterTest.java
index 30082dd..20039c2 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/config/ConfigCenterTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/config/ConfigCenterTest.java
@@ -21,10 +21,11 @@ import lombok.SneakyThrows;
 import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
 import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceAlteredEvent;
 import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourcePersistEvent;
+import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataCreatedEvent;
+import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataDroppedEvent;
 import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsPersistEvent;
 import org.apache.shardingsphere.governance.core.event.model.rule.SwitchRuleConfigurationEvent;
-import org.apache.shardingsphere.governance.core.event.model.schema.SchemaNamePersistEvent;
-import org.apache.shardingsphere.governance.core.event.model.schema.SchemaPersistEvent;
+import org.apache.shardingsphere.governance.core.event.model.schema.SchemaAlteredEvent;
 import org.apache.shardingsphere.governance.core.yaml.config.YamlRuleConfigurationWrap;
 import org.apache.shardingsphere.governance.core.yaml.config.schema.YamlSchema;
 import org.apache.shardingsphere.governance.core.yaml.swapper.SchemaYamlSwapper;
@@ -516,7 +517,7 @@ public final class ConfigCenterTest {
     
     @Test
     public void assertRenewSchemaNameEventWithDrop() {
-        SchemaNamePersistEvent event = new SchemaNamePersistEvent("sharding_db", true);
+        MetaDataDroppedEvent event = new MetaDataDroppedEvent("sharding_db");
         when(configurationRepository.get("/metadata")).thenReturn("sharding_db,replica_query_db");
         ConfigCenter configCenter = new ConfigCenter(configurationRepository);
         configCenter.renew(event);
@@ -524,8 +525,17 @@ public final class ConfigCenterTest {
     }
     
     @Test
+    public void assertRenewSchemaNameEventWithDropAndNotExist() {
+        MetaDataDroppedEvent event = new MetaDataDroppedEvent("sharding_db");
+        when(configurationRepository.get("/metadata")).thenReturn("replica_query_db");
+        ConfigCenter configCenter = new ConfigCenter(configurationRepository);
+        configCenter.renew(event);
+        verify(configurationRepository, times(0)).persist(eq("/metadata"), eq("replica_query_db"));
+    }
+    
+    @Test
     public void assertRenewSchemaNameEventWithAdd() {
-        SchemaNamePersistEvent event = new SchemaNamePersistEvent("sharding_db", false);
+        MetaDataCreatedEvent event = new MetaDataCreatedEvent("sharding_db");
         when(configurationRepository.get("/metadata")).thenReturn("replica_query_db");
         ConfigCenter configCenter = new ConfigCenter(configurationRepository);
         configCenter.renew(event);
@@ -534,11 +544,11 @@ public final class ConfigCenterTest {
     
     @Test
     public void assertRenewSchemaNameEventWithAddAndExist() {
-        SchemaNamePersistEvent event = new SchemaNamePersistEvent("sharding_db", false);
+        MetaDataCreatedEvent event = new MetaDataCreatedEvent("sharding_db");
         when(configurationRepository.get("/metadata")).thenReturn("sharding_db,replica_query_db");
         ConfigCenter configCenter = new ConfigCenter(configurationRepository);
         configCenter.renew(event);
-        verify(configurationRepository).persist(eq("/metadata"), eq("sharding_db,replica_query_db"));
+        verify(configurationRepository, times(0)).persist(eq("/metadata"), eq("sharding_db,replica_query_db"));
     }
     
     @Test
@@ -566,8 +576,8 @@ public final class ConfigCenterTest {
     }
     
     @Test
-    public void assertRenewSchemaPersistEvent() {
-        SchemaPersistEvent event = new SchemaPersistEvent("sharding_db", new SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(readYAML(META_DATA_YAML), YamlSchema.class)));
+    public void assertRenewSchemaAlteredEvent() {
+        SchemaAlteredEvent event = new SchemaAlteredEvent("sharding_db", new SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(readYAML(META_DATA_YAML), YamlSchema.class)));
         ConfigCenter configCenter = new ConfigCenter(configurationRepository);
         configCenter.renew(event);
         verify(configurationRepository).persist(eq("/metadata/sharding_db/schema"), anyString());
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListenerTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListenerTest.java
deleted file mode 100644
index b023e9a..0000000
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListenerTest.java
+++ /dev/null
@@ -1,267 +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.governance.core.config.listener;
-
-import lombok.SneakyThrows;
-import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
-import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
-import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceChangedEvent;
-import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataAddedEvent;
-import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataDeletedEvent;
-import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsChangedEvent;
-import org.apache.shardingsphere.governance.core.event.model.schema.SchemaChangedEvent;
-import org.apache.shardingsphere.governance.repository.api.ConfigurationRepository;
-import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
-import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent.Type;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
-import org.apache.shardingsphere.replicaquery.api.config.ReplicaQueryRuleConfiguration;
-import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(MockitoJUnitRunner.class)
-public final class SchemaChangedListenerTest {
-    
-    private static final String DATA_SOURCE_FILE = "yaml/data-source.yaml";
-    
-    private static final String SHARDING_RULE_FILE = "yaml/sharding-rule.yaml";
-    
-    private static final String REPLICA_QUERY_RULE_FILE = "yaml/replica-query-rule.yaml";
-    
-    private static final String ENCRYPT_RULE_FILE = "yaml/encrypt-rule.yaml";
-    
-    private static final String META_DATA_FILE = "yaml/schema.yaml";
-    
-    private SchemaChangedListener schemaChangedListener;
-    
-    @Mock
-    private ConfigurationRepository configurationRepository;
-    
-    @Before
-    public void setUp() {
-        schemaChangedListener = new SchemaChangedListener(configurationRepository, Arrays.asList("sharding_db", "replica_query_db", "encrypt_db"));
-    }
-    
-    @Test
-    public void assertCreateIgnoredEvent() {
-        assertFalse(schemaChangedListener.createEvent(new DataChangedEvent("/metadata/encrypt_db", "test", Type.UPDATED)).isPresent());
-        assertFalse(schemaChangedListener.createEvent(new DataChangedEvent("/metadata/encrypt_db/rule", "test", Type.IGNORED)).isPresent());
-    }
-    
-    @Test
-    public void assertCreateDataSourceChangedEventForExistedSchema() {
-        String dataSource = readYAML(DATA_SOURCE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/sharding_db/datasource", dataSource, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), instanceOf(DataSourceChangedEvent.class));
-        assertThat(((DataSourceChangedEvent) actual.get()).getSchemaName(), is("sharding_db"));
-    }
-    
-    @Test
-    public void assertCreateRuleConfigurationsChangedEventForExistedSchema() {
-        String shardingRule = readYAML(SHARDING_RULE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/sharding_db/rule", shardingRule, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((RuleConfigurationsChangedEvent) actual.get()).getSchemaName(), is("sharding_db"));
-        Collection<RuleConfiguration> ruleConfigs = ((RuleConfigurationsChangedEvent) actual.get()).getRuleConfigurations();
-        assertThat(ruleConfigs.size(), is(1));
-        assertThat(((ShardingRuleConfiguration) ruleConfigs.iterator().next()).getTables().size(), is(1));
-    }
-    
-    @Test
-    public void assertCreateReplicaQueryRuleChangedEventForExistedSchema() {
-        String rule = readYAML(REPLICA_QUERY_RULE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/replica_query_db/rule", rule, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        RuleConfigurationsChangedEvent event = (RuleConfigurationsChangedEvent) actual.get();
-        assertThat(event.getSchemaName(), is("replica_query_db"));
-        assertThat(event.getRuleConfigurations().iterator().next(), instanceOf(ReplicaQueryRuleConfiguration.class));
-        ReplicaQueryRuleConfiguration ruleConfig = (ReplicaQueryRuleConfiguration) event.getRuleConfigurations().iterator().next();
-        assertThat(ruleConfig.getDataSources().iterator().next().getPrimaryDataSourceName(), is("primary_ds"));
-    }
-    
-    @Test
-    public void assertCreateEncryptRuleChangedEventForExistedSchema() {
-        String encryptRule = readYAML(ENCRYPT_RULE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/encrypt_db/rule", encryptRule, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        RuleConfigurationsChangedEvent event = (RuleConfigurationsChangedEvent) actual.get();
-        assertThat(event.getSchemaName(), is("encrypt_db"));
-        assertThat(event.getRuleConfigurations().iterator().next(), instanceOf(EncryptRuleConfiguration.class));
-        EncryptRuleConfiguration encryptRuleConfig = (EncryptRuleConfiguration) event.getRuleConfigurations().iterator().next();
-        assertThat(encryptRuleConfig.getEncryptors().size(), is(1));
-        ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig = encryptRuleConfig.getEncryptors().get("order_encryptor");
-        assertThat(encryptAlgorithmConfig.getType(), is("AES"));
-        assertThat(encryptAlgorithmConfig.getProps().get("aes-key-value"), is(123456));
-    }
-    
-    @Test
-    public void assertCreateIgnoredGovernanceEventForNewSchema() {
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/logic_db/rule", "rule", Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), instanceOf(MetaDataAddedEvent.class));
-    }
-    
-    @Test
-    public void assertCreateSchemaAddedEventForNewSchema() {
-        String dataSource = readYAML(DATA_SOURCE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/logic_db/datasource", dataSource, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
-    }
-    
-    @Test
-    public void assertCreateReplicaQuerySchemaAddedEventForNewSchema() {
-        String dataSource = readYAML(DATA_SOURCE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/logic_db/datasource", dataSource, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
-    }
-    
-    @Test
-    public void assertCreateEncryptSchemaAddedEventForNewSchema() {
-        String dataSource = readYAML(DATA_SOURCE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/logic_db/datasource", dataSource, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
-    }
-    
-    @Test
-    public void assertCreateSchemaDeletedEventForNewSchema() {
-        String dataSource = readYAML(DATA_SOURCE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/logic_db/datasource", dataSource, Type.DELETED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataDeletedEvent) actual.get()).getSchemaName(), is("logic_db"));
-    }
-    
-    @Test
-    public void assertCreateWithSchemaDeletedEvent() {
-        String dataSource = readYAML(DATA_SOURCE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/logic_db", dataSource, Type.DELETED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), instanceOf(MetaDataDeletedEvent.class));
-    }
-    
-    @Test
-    public void assertCreateWithSchemaDeletedEventWithDataSourceNode() {
-        String dataSource = readYAML(DATA_SOURCE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/datasource", dataSource, Type.DELETED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), instanceOf(MetaDataDeletedEvent.class));
-    }
-    
-    @Test
-    public void assertCreateAddedEventWithEncryptRuleConfigurationForNewSchema() {
-        String encryptRule = readYAML(ENCRYPT_RULE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/logic_db/rule", encryptRule, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
-    }
-    
-    @Test
-    public void assertCreateAddedEventWithShardingRuleConfigurationForNewSchema() {
-        String shardingRule = readYAML(SHARDING_RULE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/logic_db/rule", shardingRule, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
-    }
-    
-    @Test
-    public void assertCreateAddedEventWithReplicaQueryRuleConfigurationForNewSchema() {
-        String rule = readYAML(REPLICA_QUERY_RULE_FILE);
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/logic_db/rule", rule, Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
-    }
-    
-    @Test
-    public void assertCreateSchemaNamesUpdatedEventForAdd() {
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata", "sharding_db,replica_query_db,encrypt_db,shadow_db", Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataAddedEvent) actual.get()).getSchemaName(), is("shadow_db"));
-    }
-    
-    @Test
-    public void assertCreateSchemaNamesUpdatedEventForDelete() {
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata", "sharding_db,replica_query_db", Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataDeletedEvent) actual.get()).getSchemaName(), is("encrypt_db"));
-    }
-    
-    @Test
-    public void assertCreateSchemaNamesUpdatedEventForIgnore() {
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata", "sharding_db,replica_query_db,encrypt_db", Type.UPDATED);
-        assertFalse(schemaChangedListener.createEvent(dataChangedEvent).isPresent());
-    }
-    
-    @Test
-    public void assertCreateSchemaNameAddEvent() {
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/shadow_db", "", Type.ADDED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertThat(((MetaDataAddedEvent) actual.get()).getSchemaName(), is("shadow_db"));
-    }
-    
-    @Test
-    public void assertCreateSchemaChangedEvent() {
-        DataChangedEvent dataChangedEvent = new DataChangedEvent("/metadata/sharding_db/schema", readYAML(META_DATA_FILE), Type.UPDATED);
-        Optional<GovernanceEvent> actual = schemaChangedListener.createEvent(dataChangedEvent);
-        assertTrue(actual.isPresent());
-        assertTrue(((SchemaChangedEvent) actual.get()).getSchema().getAllTableNames().contains("t_order"));
-    }
-    
-    @SneakyThrows({IOException.class, URISyntaxException.class})
-    private String readYAML(final String yamlFile) {
-        return Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI())).stream().map(each -> each + System.lineSeparator()).collect(Collectors.joining());
-    }
-}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateDatabaseBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateDatabaseBackendHandler.java
index d16bd73..8ac9518 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateDatabaseBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/CreateDatabaseBackendHandler.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.governance.core.event.model.schema.SchemaNamePersistEvent;
+import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataCreatedEvent;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.exception.DBCreateExistsException;
@@ -50,6 +50,6 @@ public final class CreateDatabaseBackendHandler implements TextProtocolBackendHa
     
     private void post(final CreateDatabaseStatement sqlStatement) {
         // TODO Need to get the executed feedback from registry center for returning.
-        ShardingSphereEventBus.getInstance().post(new SchemaNamePersistEvent(sqlStatement.getDatabaseName(), false));
+        ShardingSphereEventBus.getInstance().post(new MetaDataCreatedEvent(sqlStatement.getDatabaseName()));
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropDatabaseBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropDatabaseBackendHandler.java
index 63354b3..cb0ba67 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropDatabaseBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/DropDatabaseBackendHandler.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.impl;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.governance.core.event.model.schema.SchemaNamePersistEvent;
+import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataDroppedEvent;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.exception.DBCreateExistsException;
@@ -50,6 +50,6 @@ public final class DropDatabaseBackendHandler implements TextProtocolBackendHand
     
     private void post(final DropDatabaseStatement sqlStatement) {
         // TODO Need to get the executed feedback from registry center for returning.
-        ShardingSphereEventBus.getInstance().post(new SchemaNamePersistEvent(sqlStatement.getDatabaseName(), true));
+        ShardingSphereEventBus.getInstance().post(new MetaDataDroppedEvent(sqlStatement.getDatabaseName()));
     }
 }