You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/06/27 11:42:30 UTC

[shardingsphere] branch master updated: Enhanced delete metadata refresh (#26630)

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

duanzhengqiang 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 fa39fc1698c Enhanced delete metadata refresh (#26630)
fa39fc1698c is described below

commit fa39fc1698c6f059df391ced9cccf01942400c2b
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Tue Jun 27 19:42:24 2023 +0800

    Enhanced delete metadata refresh (#26630)
    
    * Enhanced delete metadata refresh
    
    * Remove unless parameter
---
 .../BroadcastConfigurationSubscriber.java          |  3 ++
 ...atibleEncryptRuleConfigurationEventBuilder.java |  4 +--
 .../EncryptRuleConfigurationEventBuilder.java      |  4 +--
 .../encryptor/DeleteCompatibleEncryptorEvent.java  |  4 ---
 .../table/DeleteCompatibleEncryptTableEvent.java   |  4 ---
 .../event/encryptor/DeleteEncryptorEvent.java      |  4 ---
 .../event/table/DeleteEncryptTableEvent.java       |  4 ---
 .../encrypt/subscriber/EncryptTableSubscriber.java |  2 +-
 .../encrypt/subscriber/EncryptorSubscriber.java    |  2 +-
 .../CompatibleEncryptTableSubscriber.java          |  2 +-
 .../compatible/CompatibleEncryptorSubscriber.java  |  2 +-
 .../mask/subscriber/MaskAlgorithmSubscriber.java   |  3 ++
 .../mask/subscriber/MaskTableSubscriber.java       |  3 ++
 .../ReadwriteSplittingDataSourceSubscriber.java    |  3 ++
 .../ReadwriteSplittingLoadBalanceSubscriber.java   |  3 ++
 .../DefaultShadowAlgorithmNameSubscriber.java      |  3 ++
 .../subscriber/ShadowAlgorithmSubscriber.java      |  3 ++
 .../subscriber/ShadowDataSourceSubscriber.java     |  3 ++
 .../shadow/subscriber/ShadowTableSubscriber.java   |  3 ++
 .../subscriber/ShardingAlgorithmSubscriber.java    |  9 +++++
 .../ShardingCacheConfigurationSubscriber.java      |  3 ++
 .../ShardingStrategyConfigurationSubscriber.java   | 15 ++++++++
 .../ShardingTableConfigurationSubscriber.java      |  3 ++
 .../mode/manager/ContextManager.java               |  6 ++++
 .../subscriber/NewDataSourceChangedSubscriber.java |  3 ++
 .../NewResourceMetaDataChangedSubscriber.java      |  1 -
 .../cluster/zookeeper/ZookeeperRepository.java     |  1 +
 .../bootstrap/src/main/resources/conf/server.yaml  | 40 +++++++++++-----------
 28 files changed, 95 insertions(+), 45 deletions(-)

diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/subscriber/BroadcastConfigurationSubscriber.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/subscriber/BroadcastConfigurationSubscriber.java
index 04044ef6241..13a487e2f74 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/subscriber/BroadcastConfigurationSubscriber.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/subscriber/BroadcastConfigurationSubscriber.java
@@ -96,6 +96,9 @@ public final class BroadcastConfigurationSubscriber implements RuleChangedSubscr
      */
     @Subscribe
     public synchronized void renew(final DeleteBroadcastTableEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         BroadcastRuleConfiguration config = database.getRuleMetaData().getSingleRule(BroadcastRule.class).getConfiguration();
         config.getTables().clear();
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/CompatibleEncryptRuleConfigurationEventBuilder.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/CompatibleEncryptRuleConfigurationEventBuilder.java
index ad87ec92f11..cc381a8a0bc 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/CompatibleEncryptRuleConfigurationEventBuilder.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/CompatibleEncryptRuleConfigurationEventBuilder.java
@@ -64,13 +64,13 @@ public final class CompatibleEncryptRuleConfigurationEventBuilder implements Rul
         if (Type.UPDATED == event.getType()) {
             return Optional.of(new AlterCompatibleEncryptTableEvent(databaseName, groupName, event.getKey(), event.getValue()));
         }
-        return Optional.of(new DeleteCompatibleEncryptTableEvent(databaseName, groupName, event.getKey(), event.getValue()));
+        return Optional.of(new DeleteCompatibleEncryptTableEvent(databaseName, groupName));
     }
     
     private Optional<GovernanceEvent> createEncryptorEvent(final String databaseName, final String encryptorName, final DataChangedEvent event) {
         if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
             return Optional.of(new AlterCompatibleEncryptorEvent(databaseName, encryptorName, event.getKey(), event.getValue()));
         }
-        return Optional.of(new DeleteCompatibleEncryptorEvent(databaseName, encryptorName, event.getKey(), event.getValue()));
+        return Optional.of(new DeleteCompatibleEncryptorEvent(databaseName, encryptorName));
     }
 }
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/EncryptRuleConfigurationEventBuilder.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/EncryptRuleConfigurationEventBuilder.java
index e832db6b41e..0dd8193ef38 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/EncryptRuleConfigurationEventBuilder.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/EncryptRuleConfigurationEventBuilder.java
@@ -62,13 +62,13 @@ public final class EncryptRuleConfigurationEventBuilder implements RuleConfigura
         if (Type.UPDATED == event.getType()) {
             return Optional.of(new AlterEncryptTableEvent(databaseName, groupName, event.getKey(), event.getValue()));
         }
-        return Optional.of(new DeleteEncryptTableEvent(databaseName, groupName, event.getKey(), event.getValue()));
+        return Optional.of(new DeleteEncryptTableEvent(databaseName, groupName));
     }
     
     private Optional<GovernanceEvent> createEncryptorEvent(final String databaseName, final String encryptorName, final DataChangedEvent event) {
         if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
             return Optional.of(new AlterEncryptorEvent(databaseName, encryptorName, event.getKey(), event.getValue()));
         }
-        return Optional.of(new DeleteEncryptorEvent(databaseName, encryptorName, event.getKey(), event.getValue()));
+        return Optional.of(new DeleteEncryptorEvent(databaseName, encryptorName));
     }
 }
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/compatible/encryptor/DeleteCompatibleEncryptorEvent.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/compatible/encryptor/DeleteCompatibleEncryptorEvent.java
index 025c0d098af..c2ce43409f6 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/compatible/encryptor/DeleteCompatibleEncryptorEvent.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/compatible/encryptor/DeleteCompatibleEncryptorEvent.java
@@ -33,8 +33,4 @@ public final class DeleteCompatibleEncryptorEvent implements GovernanceEvent {
     private final String databaseName;
     
     private final String encryptorName;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
 }
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/compatible/table/DeleteCompatibleEncryptTableEvent.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/compatible/table/DeleteCompatibleEncryptTableEvent.java
index adbb4f0b157..08b74430dd9 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/compatible/table/DeleteCompatibleEncryptTableEvent.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/compatible/table/DeleteCompatibleEncryptTableEvent.java
@@ -33,8 +33,4 @@ public final class DeleteCompatibleEncryptTableEvent implements GovernanceEvent
     private final String databaseName;
     
     private final String tableName;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
 }
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/encryptor/DeleteEncryptorEvent.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/encryptor/DeleteEncryptorEvent.java
index af6428835be..ecd264bd64e 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/encryptor/DeleteEncryptorEvent.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/encryptor/DeleteEncryptorEvent.java
@@ -31,8 +31,4 @@ public final class DeleteEncryptorEvent implements GovernanceEvent {
     private final String databaseName;
     
     private final String encryptorName;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
 }
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/DeleteEncryptTableEvent.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/DeleteEncryptTableEvent.java
index 4d37837a7ef..310b994afa2 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/DeleteEncryptTableEvent.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/DeleteEncryptTableEvent.java
@@ -31,8 +31,4 @@ public final class DeleteEncryptTableEvent implements GovernanceEvent {
     private final String databaseName;
     
     private final String tableName;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
 }
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptTableSubscriber.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptTableSubscriber.java
index 6b7daef25a8..6afafe184fe 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptTableSubscriber.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptTableSubscriber.java
@@ -91,7 +91,7 @@ public final class EncryptTableSubscriber implements RuleChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final DeleteEncryptTableEvent event) {
-        if (!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
             return;
         }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptorSubscriber.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptorSubscriber.java
index 6d0585f2141..6ed8f013deb 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptorSubscriber.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptorSubscriber.java
@@ -69,7 +69,7 @@ public final class EncryptorSubscriber implements RuleChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final DeleteEncryptorEvent event) {
-        if (!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
             return;
         }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/compatible/CompatibleEncryptTableSubscriber.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/compatible/CompatibleEncryptTableSubscriber.java
index d94ecd6f4f4..e5287f578f9 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/compatible/CompatibleEncryptTableSubscriber.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/compatible/CompatibleEncryptTableSubscriber.java
@@ -93,7 +93,7 @@ public final class CompatibleEncryptTableSubscriber implements RuleChangedSubscr
      */
     @Subscribe
     public synchronized void renew(final DeleteCompatibleEncryptTableEvent event) {
-        if (!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
             return;
         }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/compatible/CompatibleEncryptorSubscriber.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/compatible/CompatibleEncryptorSubscriber.java
index 94208d648c6..62860c6dbd1 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/compatible/CompatibleEncryptorSubscriber.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/compatible/CompatibleEncryptorSubscriber.java
@@ -71,7 +71,7 @@ public final class CompatibleEncryptorSubscriber implements RuleChangedSubscribe
      */
     @Subscribe
     public synchronized void renew(final DeleteCompatibleEncryptorEvent event) {
-        if (!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
             return;
         }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskAlgorithmSubscriber.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskAlgorithmSubscriber.java
index 4dee1ecf849..a9ce8bf4a16 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskAlgorithmSubscriber.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskAlgorithmSubscriber.java
@@ -69,6 +69,9 @@ public final class MaskAlgorithmSubscriber implements RuleChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final DeleteMaskAlgorithmEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         MaskRuleConfiguration config = (MaskRuleConfiguration) database.getRuleMetaData().getSingleRule(MaskRule.class).getConfiguration();
         config.getMaskAlgorithms().remove(event.getAlgorithmName());
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java
index bb4628a1a8c..ad23caa07d1 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java
@@ -91,6 +91,9 @@ public final class MaskTableSubscriber implements RuleChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final DeleteMaskTableEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         MaskRuleConfiguration config = (MaskRuleConfiguration) database.getRuleMetaData().getSingleRule(MaskRule.class).getConfiguration();
         config.getTables().removeIf(each -> each.getName().equals(event.getTableName()));
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingDataSourceSubscriber.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingDataSourceSubscriber.java
index b32f84c275f..1213a9e738b 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingDataSourceSubscriber.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingDataSourceSubscriber.java
@@ -93,6 +93,9 @@ public final class ReadwriteSplittingDataSourceSubscriber implements RuleChanged
      */
     @Subscribe
     public synchronized void renew(final DeleteReadwriteSplittingDataSourceEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ReadwriteSplittingRuleConfiguration config = (ReadwriteSplittingRuleConfiguration) database.getRuleMetaData().getSingleRule(ReadwriteSplittingRule.class).getConfiguration();
         config.getDataSources().removeIf(each -> each.getName().equals(event.getGroupName()));
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingLoadBalanceSubscriber.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingLoadBalanceSubscriber.java
index 1025d63c461..fd4fa9503cd 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingLoadBalanceSubscriber.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingLoadBalanceSubscriber.java
@@ -72,6 +72,9 @@ public final class ReadwriteSplittingLoadBalanceSubscriber implements RuleChange
      */
     @Subscribe
     public synchronized void renew(final DeleteLoadBalanceEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ReadwriteSplittingRuleConfiguration config = (ReadwriteSplittingRuleConfiguration) database.getRuleMetaData().getSingleRule(ReadwriteSplittingRule.class).getConfiguration();
         config.getLoadBalancers().remove(event.getLoadBalanceName());
diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/DefaultShadowAlgorithmNameSubscriber.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/DefaultShadowAlgorithmNameSubscriber.java
index 90bdf5afc83..9ec9d4c29e6 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/DefaultShadowAlgorithmNameSubscriber.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/DefaultShadowAlgorithmNameSubscriber.java
@@ -67,6 +67,9 @@ public final class DefaultShadowAlgorithmNameSubscriber implements RuleChangedSu
      */
     @Subscribe
     public synchronized void renew(final DeleteDefaultShadowAlgorithmNameEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShadowRuleConfiguration config = (ShadowRuleConfiguration) database.getRuleMetaData().getSingleRule(ShadowRule.class).getConfiguration();
         config.setDefaultShadowAlgorithmName(null);
diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowAlgorithmSubscriber.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowAlgorithmSubscriber.java
index 2350e9426a2..7126896cc98 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowAlgorithmSubscriber.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowAlgorithmSubscriber.java
@@ -73,6 +73,9 @@ public final class ShadowAlgorithmSubscriber implements RuleChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final DeleteShadowAlgorithmEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShadowRuleConfiguration config = (ShadowRuleConfiguration) database.getRuleMetaData().getSingleRule(ShadowRule.class).getConfiguration();
         config.getShadowAlgorithms().remove(event.getAlgorithmName());
diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowDataSourceSubscriber.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowDataSourceSubscriber.java
index bdc28abfd16..6ad3daed7f8 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowDataSourceSubscriber.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowDataSourceSubscriber.java
@@ -97,6 +97,9 @@ public final class ShadowDataSourceSubscriber implements RuleChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final DeleteShadowDataSourceEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShadowRuleConfiguration config = (ShadowRuleConfiguration) database.getRuleMetaData().getSingleRule(ShadowRule.class).getConfiguration();
         config.getDataSources().removeIf(each -> each.getName().equals(event.getDataSourceName()));
diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowTableSubscriber.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowTableSubscriber.java
index 1bc9625f41d..decfd323e93 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowTableSubscriber.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/subscriber/ShadowTableSubscriber.java
@@ -88,6 +88,9 @@ public final class ShadowTableSubscriber implements RuleChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final DeleteShadowTableEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShadowRuleConfiguration config = (ShadowRuleConfiguration) database.getRuleMetaData().getSingleRule(ShadowRule.class).getConfiguration();
         config.getTables().remove(event.getTableName());
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingAlgorithmSubscriber.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingAlgorithmSubscriber.java
index 4562fea2053..37252012d54 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingAlgorithmSubscriber.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingAlgorithmSubscriber.java
@@ -99,6 +99,9 @@ public final class ShardingAlgorithmSubscriber implements RuleChangedSubscriber
      */
     @Subscribe
     public synchronized void renew(final DeleteShardingAlgorithmEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.getShardingAlgorithms().remove(event.getAlgorithmName());
@@ -112,6 +115,9 @@ public final class ShardingAlgorithmSubscriber implements RuleChangedSubscriber
      */
     @Subscribe
     public synchronized void renew(final DeleteKeyGeneratorEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.getKeyGenerators().remove(event.getKeyGeneratorName());
@@ -125,6 +131,9 @@ public final class ShardingAlgorithmSubscriber implements RuleChangedSubscriber
      */
     @Subscribe
     public synchronized void renew(final DeleteAuditorEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.getAuditors().remove(event.getAuditorName());
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingCacheConfigurationSubscriber.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingCacheConfigurationSubscriber.java
index a83fad5d4fb..3c4a2aa3abc 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingCacheConfigurationSubscriber.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingCacheConfigurationSubscriber.java
@@ -90,6 +90,9 @@ public final class ShardingCacheConfigurationSubscriber implements RuleChangedSu
      */
     @Subscribe
     public synchronized void renew(final DeleteShardingCacheConfigurationEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.setShardingCache(null);
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingStrategyConfigurationSubscriber.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingStrategyConfigurationSubscriber.java
index 118071ef05a..da219bc85e4 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingStrategyConfigurationSubscriber.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingStrategyConfigurationSubscriber.java
@@ -220,6 +220,9 @@ public final class ShardingStrategyConfigurationSubscriber implements RuleChange
      */
     @Subscribe
     public synchronized void renew(final DeleteDatabaseShardingStrategyConfigurationEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.setDefaultDatabaseShardingStrategy(null);
@@ -233,6 +236,9 @@ public final class ShardingStrategyConfigurationSubscriber implements RuleChange
      */
     @Subscribe
     public synchronized void renew(final DeleteTableShardingStrategyConfigurationEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.setDefaultTableShardingStrategy(null);
@@ -246,6 +252,9 @@ public final class ShardingStrategyConfigurationSubscriber implements RuleChange
      */
     @Subscribe
     public synchronized void renew(final DeleteKeyGenerateStrategyConfigurationEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.setDefaultKeyGenerateStrategy(null);
@@ -259,6 +268,9 @@ public final class ShardingStrategyConfigurationSubscriber implements RuleChange
      */
     @Subscribe
     public synchronized void renew(final DeleteShardingAuditorStrategyConfigurationEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.setDefaultAuditStrategy(null);
@@ -272,6 +284,9 @@ public final class ShardingStrategyConfigurationSubscriber implements RuleChange
      */
     @Subscribe
     public synchronized void renew(final DeleteDefaultShardingColumnEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.setDefaultAuditStrategy(null);
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingTableConfigurationSubscriber.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingTableConfigurationSubscriber.java
index 3647d4bfe78..2370a61bf91 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingTableConfigurationSubscriber.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/subscriber/ShardingTableConfigurationSubscriber.java
@@ -176,6 +176,9 @@ public final class ShardingTableConfigurationSubscriber implements RuleChangedSu
      */
     @Subscribe
     public synchronized void renew(final DeleteShardingTableConfigurationEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabases().get(event.getDatabaseName());
         ShardingRuleConfiguration config = (ShardingRuleConfiguration) database.getRuleMetaData().getSingleRule(ShardingRule.class).getConfiguration();
         config.getTables().removeIf(each -> each.getLogicTable().equals(event.getTableName()));
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index c6aecf25d1d..ed51e0908c0 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -180,6 +180,9 @@ public final class ContextManager implements AutoCloseable {
      * @param schemaName schema name
      */
     public synchronized void dropSchema(final String databaseName, final String schemaName) {
+        if (!metaDataContexts.get().getMetaData().containsDatabase(databaseName)) {
+            return;
+        }
         ShardingSphereDatabase database = metaDataContexts.get().getMetaData().getDatabase(databaseName);
         if (!database.containsSchema(schemaName)) {
             return;
@@ -197,6 +200,9 @@ public final class ContextManager implements AutoCloseable {
      * @param toBeDeletedViewName to be deleted view name
      */
     public synchronized void alterSchema(final String databaseName, final String schemaName, final String toBeDeletedTableName, final String toBeDeletedViewName) {
+        if (!metaDataContexts.get().getMetaData().containsDatabase(databaseName) || !metaDataContexts.get().getMetaData().getDatabase(databaseName).containsSchema(schemaName)) {
+            return;
+        }
         Optional.ofNullable(toBeDeletedTableName).ifPresent(optional -> dropTable(databaseName, schemaName, optional));
         Optional.ofNullable(toBeDeletedViewName).ifPresent(optional -> dropView(databaseName, schemaName, optional));
         alterMetaDataHeldRule(metaDataContexts.get().getMetaData().getDatabase(databaseName));
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewDataSourceChangedSubscriber.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewDataSourceChangedSubscriber.java
index 5a87ed13bae..ab7b2d033a6 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewDataSourceChangedSubscriber.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewDataSourceChangedSubscriber.java
@@ -72,6 +72,9 @@ public final class NewDataSourceChangedSubscriber {
      */
     @Subscribe
     public void renew(final UnregisterStorageUnitEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         contextManager.unregisterStorageUnit(event.getDatabaseName(), event.getStorageUnitName());
     }
 }
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewResourceMetaDataChangedSubscriber.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewResourceMetaDataChangedSubscriber.java
index 4e461936076..3960b38e665 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewResourceMetaDataChangedSubscriber.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewResourceMetaDataChangedSubscriber.java
@@ -109,7 +109,6 @@ public final class NewResourceMetaDataChangedSubscriber {
     @Subscribe
     public synchronized void renew(final DropTableEvent event) {
         contextManager.alterSchema(event.getDatabaseName(), event.getSchemaName(), event.getTableName(), null);
-        
     }
     
     /**
diff --git a/mode/type/cluster/repository/provider/zookeeper/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepository.java b/mode/type/cluster/repository/provider/zookeeper/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepository.java
index 44845d3f89a..52dc8923b51 100644
--- a/mode/type/cluster/repository/provider/zookeeper/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepository.java
+++ b/mode/type/cluster/repository/provider/zookeeper/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepository.java
@@ -243,6 +243,7 @@ public final class ZookeeperRepository implements ClusterPersistRepository, Inst
                 .forTreeCache(client, (framework, treeCacheListener) -> {
                     Type changedType = getChangedType(treeCacheListener.getType());
                     if (Type.IGNORED != changedType) {
+                        System.out.println("watch path is :" + treeCacheListener.getData().getPath());
                         listener.onChange(new DataChangedEvent(treeCacheListener.getData().getPath(),
                                 new String(treeCacheListener.getData().getData(), StandardCharsets.UTF_8), changedType));
                     }
diff --git a/proxy/bootstrap/src/main/resources/conf/server.yaml b/proxy/bootstrap/src/main/resources/conf/server.yaml
index 9b0c5cd34f3..9b235cabc21 100644
--- a/proxy/bootstrap/src/main/resources/conf/server.yaml
+++ b/proxy/bootstrap/src/main/resources/conf/server.yaml
@@ -21,26 +21,26 @@
 # 
 ######################################################################################################
 
-#mode:
-#  type: Cluster
-#  repository:
-#    type: ZooKeeper
-#    props:
-#      namespace: governance_ds
-#      server-lists: localhost:2181
-#      retryIntervalMilliseconds: 500
-#      timeToLiveSeconds: 60
-#      maxRetries: 3
-#      operationTimeoutMilliseconds: 500
-#
-#authority:
-#  users:
-#    - user: root@%
-#      password: root
-#    - user: sharding
-#      password: sharding
-#  privilege:
-#    type: ALL_PERMITTED
+mode:
+  type: Cluster
+  repository:
+    type: ZooKeeper
+    props:
+      namespace: governance_ds
+      server-lists: localhost:2181
+      retryIntervalMilliseconds: 500
+      timeToLiveSeconds: 60
+      maxRetries: 3
+      operationTimeoutMilliseconds: 500
+
+authority:
+  users:
+    - user: root@%
+      password: root
+    - user: sharding
+      password: sharding
+  privilege:
+    type: ALL_PERMITTED
 #
 #transaction:
 #  defaultType: XA