You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/06/24 13:12:31 UTC

[shardingsphere] branch master updated: Refactor mask event & subscriber (#26482)

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

zhaojinchao 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 e996aad9a8c Refactor mask event & subscriber (#26482)
e996aad9a8c is described below

commit e996aad9a8c723402263b3cf4956dc92286735a9
Author: ChenJiaHao <Pa...@163.com>
AuthorDate: Sat Jun 24 21:12:24 2023 +0800

    Refactor mask event & subscriber (#26482)
---
 .../event/MaskRuleConfigurationEventBuilder.java   | 49 +++++++---------------
 .../event/algorithm/AlterMaskAlgorithmEvent.java   |  3 --
 .../event/algorithm/DeleteMaskAlgorithmEvent.java  |  4 --
 .../AddMaskTableEvent.java}                        |  7 +---
 .../AlterMaskTableEvent.java}                      |  6 +--
 .../DeleteMaskTableEvent.java}                     | 13 ++----
 .../mask/metadata/converter/MaskNodeConverter.java | 30 ++++++-------
 .../mask/subscriber/MaskAlgorithmSubscriber.java   | 11 ++++-
 ...ionSubscriber.java => MaskTableSubscriber.java} | 30 +++++++------
 ...nfra.rule.RuleConfigurationSubscribeCoordinator |  2 +-
 .../metadata/converter/MaskNodeConverterTest.java  |  8 ++--
 ...riteSplittingRuleConfigurationEventBuilder.java |  2 +-
 .../event/loadbalance/DeleteLoadBalanceEvent.java  |  4 --
 .../ReadwriteSplittingLoadBalanceSubscriber.java   |  3 --
 14 files changed, 71 insertions(+), 101 deletions(-)

diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/MaskRuleConfigurationEventBuilder.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/MaskRuleConfigurationEventBuilder.java
index 8935941a895..36526253f7d 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/MaskRuleConfigurationEventBuilder.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/MaskRuleConfigurationEventBuilder.java
@@ -18,20 +18,13 @@
 package org.apache.shardingsphere.mask.event;
 
 import com.google.common.base.Strings;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
-import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
-import org.apache.shardingsphere.infra.yaml.config.pojo.algorithm.YamlAlgorithmConfiguration;
-import org.apache.shardingsphere.infra.yaml.config.swapper.algorithm.YamlAlgorithmConfigurationSwapper;
-import org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
 import org.apache.shardingsphere.mask.event.algorithm.AlterMaskAlgorithmEvent;
 import org.apache.shardingsphere.mask.event.algorithm.DeleteMaskAlgorithmEvent;
-import org.apache.shardingsphere.mask.event.config.AddMaskConfigurationEvent;
-import org.apache.shardingsphere.mask.event.config.AlterMaskConfigurationEvent;
-import org.apache.shardingsphere.mask.event.config.DeleteMaskConfigurationEvent;
+import org.apache.shardingsphere.mask.event.table.AddMaskTableEvent;
+import org.apache.shardingsphere.mask.event.table.AlterMaskTableEvent;
+import org.apache.shardingsphere.mask.event.table.DeleteMaskTableEvent;
 import org.apache.shardingsphere.mask.metadata.converter.MaskNodeConverter;
-import org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskTableRuleConfiguration;
-import org.apache.shardingsphere.mask.yaml.swapper.rule.YamlMaskTableRuleConfigurationSwapper;
 import org.apache.shardingsphere.mode.event.DataChangedEvent;
 import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
 import org.apache.shardingsphere.mode.spi.RuleConfigurationEventBuilder;
@@ -48,45 +41,31 @@ public final class MaskRuleConfigurationEventBuilder implements RuleConfiguratio
         if (!MaskNodeConverter.isMaskPath(event.getKey()) || Strings.isNullOrEmpty(event.getValue())) {
             return Optional.empty();
         }
-        Optional<String> tableName = MaskNodeConverter.getTableName(event.getKey());
+        Optional<String> tableName = MaskNodeConverter.getTableNameByActiveVersionPath(event.getKey());
         if (tableName.isPresent() && !Strings.isNullOrEmpty(event.getValue())) {
-            Optional<String> version = MaskNodeConverter.getMaskTableVersion(event.getKey());
-            if (version.isPresent()) {
-                return createMaskConfigEvent(databaseName, tableName.get(), version.get(), event);
-            }
+            return createMaskConfigEvent(databaseName, tableName.get(), event);
         }
-        Optional<String> algorithmName = MaskNodeConverter.getAlgorithmName(event.getKey());
+        Optional<String> algorithmName = MaskNodeConverter.getAlgorithmNameByActiveVersionPath(event.getKey());
         if (algorithmName.isPresent() && !Strings.isNullOrEmpty(event.getValue())) {
-            Optional<String> algorithmVersion = MaskNodeConverter.getMaskAlgorithmVersion(event.getKey());
-            if (algorithmVersion.isPresent()) {
-                return createMaskAlgorithmEvent(databaseName, algorithmName.get(), algorithmVersion.get(), event);
-            }
+            return createMaskAlgorithmEvent(databaseName, algorithmName.get(), event);
         }
         return Optional.empty();
     }
     
-    private Optional<GovernanceEvent> createMaskConfigEvent(final String databaseName, final String tableName, final String version, final DataChangedEvent event) {
+    private Optional<GovernanceEvent> createMaskConfigEvent(final String databaseName, final String tableName, final DataChangedEvent event) {
         if (Type.ADDED == event.getType()) {
-            return Optional.of(new AddMaskConfigurationEvent(databaseName, swapMaskTableRuleConfig(event.getValue()), event.getKey(), version));
+            return Optional.of(new AddMaskTableEvent(databaseName, event.getKey(), event.getValue()));
         }
         if (Type.UPDATED == event.getType()) {
-            return Optional.of(new AlterMaskConfigurationEvent(databaseName, tableName, swapMaskTableRuleConfig(event.getValue()), event.getKey(), version));
+            return Optional.of(new AlterMaskTableEvent(databaseName, tableName, event.getKey(), event.getValue()));
         }
-        return Optional.of(new DeleteMaskConfigurationEvent(databaseName, tableName, event.getKey(), version));
+        return Optional.of(new DeleteMaskTableEvent(databaseName, tableName));
     }
     
-    private MaskTableRuleConfiguration swapMaskTableRuleConfig(final String yamlContext) {
-        return new YamlMaskTableRuleConfigurationSwapper().swapToObject(YamlEngine.unmarshal(yamlContext, YamlMaskTableRuleConfiguration.class));
-    }
-    
-    private Optional<GovernanceEvent> createMaskAlgorithmEvent(final String databaseName, final String algorithmName, final String version, final DataChangedEvent event) {
+    private Optional<GovernanceEvent> createMaskAlgorithmEvent(final String databaseName, final String algorithmName, final DataChangedEvent event) {
         if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
-            return Optional.of(new AlterMaskAlgorithmEvent(databaseName, algorithmName, swapToAlgorithmConfig(event.getValue()), event.getKey(), version));
+            return Optional.of(new AlterMaskAlgorithmEvent(databaseName, algorithmName, event.getKey(), event.getValue()));
         }
-        return Optional.of(new DeleteMaskAlgorithmEvent(databaseName, algorithmName, event.getKey(), version));
-    }
-    
-    private AlgorithmConfiguration swapToAlgorithmConfig(final String yamlContext) {
-        return new YamlAlgorithmConfigurationSwapper().swapToObject(YamlEngine.unmarshal(yamlContext, YamlAlgorithmConfiguration.class));
+        return Optional.of(new DeleteMaskAlgorithmEvent(databaseName, algorithmName));
     }
 }
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/algorithm/AlterMaskAlgorithmEvent.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/algorithm/AlterMaskAlgorithmEvent.java
index 3b28cbc7529..51e76c92ad1 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/algorithm/AlterMaskAlgorithmEvent.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/algorithm/AlterMaskAlgorithmEvent.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.mask.event.algorithm;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
 
 /**
@@ -33,8 +32,6 @@ public final class AlterMaskAlgorithmEvent implements GovernanceEvent {
     
     private final String algorithmName;
     
-    private final AlgorithmConfiguration config;
-    
     private final String activeVersionKey;
     
     private final String activeVersion;
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/algorithm/DeleteMaskAlgorithmEvent.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/algorithm/DeleteMaskAlgorithmEvent.java
index f2c425dad79..07f484e4e86 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/algorithm/DeleteMaskAlgorithmEvent.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/algorithm/DeleteMaskAlgorithmEvent.java
@@ -31,8 +31,4 @@ public final class DeleteMaskAlgorithmEvent implements GovernanceEvent {
     private final String databaseName;
     
     private final String algorithmName;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
 }
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/config/AddMaskConfigurationEvent.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/table/AddMaskTableEvent.java
similarity index 81%
rename from features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/config/AddMaskConfigurationEvent.java
rename to features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/table/AddMaskTableEvent.java
index 647f7568384..61ec590a9f0 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/config/AddMaskConfigurationEvent.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/table/AddMaskTableEvent.java
@@ -15,24 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mask.event.config;
+package org.apache.shardingsphere.mask.event.table;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
-import org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
 
 /**
  * Add mask configuration event.
  */
 @RequiredArgsConstructor
 @Getter
-public final class AddMaskConfigurationEvent implements GovernanceEvent {
+public final class AddMaskTableEvent implements GovernanceEvent {
     
     private final String databaseName;
     
-    private final MaskTableRuleConfiguration config;
-    
     private final String activeVersionKey;
     
     private final String activeVersion;
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/config/DeleteMaskConfigurationEvent.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/table/AlterMaskTableEvent.java
similarity index 87%
rename from features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/config/DeleteMaskConfigurationEvent.java
rename to features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/table/AlterMaskTableEvent.java
index 8f2ffcf6f37..80d7ca27d1f 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/config/DeleteMaskConfigurationEvent.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/table/AlterMaskTableEvent.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mask.event.config;
+package org.apache.shardingsphere.mask.event.table;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
 
 /**
- * Delete mask configuration event.
+ * Alter mask configuration event.
  */
 @RequiredArgsConstructor
 @Getter
-public final class DeleteMaskConfigurationEvent implements GovernanceEvent {
+public final class AlterMaskTableEvent implements GovernanceEvent {
     
     private final String databaseName;
     
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/config/AlterMaskConfigurationEvent.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/table/DeleteMaskTableEvent.java
similarity index 72%
rename from features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/config/AlterMaskConfigurationEvent.java
rename to features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/table/DeleteMaskTableEvent.java
index 2e16f8f87b9..9b09785f3a3 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/config/AlterMaskConfigurationEvent.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/event/table/DeleteMaskTableEvent.java
@@ -15,27 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mask.event.config;
+package org.apache.shardingsphere.mask.event.table;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
-import org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
 
 /**
- * Alter mask configuration event.
+ * Delete mask configuration event.
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterMaskConfigurationEvent implements GovernanceEvent {
+public final class DeleteMaskTableEvent implements GovernanceEvent {
     
     private final String databaseName;
     
     private final String tableName;
-    
-    private final MaskTableRuleConfiguration config;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
 }
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/metadata/converter/MaskNodeConverter.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/metadata/converter/MaskNodeConverter.java
index d08b45d470e..fa021809e62 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/metadata/converter/MaskNodeConverter.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/metadata/converter/MaskNodeConverter.java
@@ -40,7 +40,7 @@ public final class MaskNodeConverter {
     
     private static final String RULE_NAME_PATTERN = "/([\\w\\-]+)?";
     
-    private static final String RULE_VERSION = "/([\\w\\-]+)/versions/([\\w\\-]+)$";
+    private static final String RULE_ACTIVE_VERSION = "/([\\w\\-]+)/active_version$";
     
     /**
      * Get table name path.
@@ -123,26 +123,26 @@ public final class MaskNodeConverter {
     }
     
     /**
-     * Get mask table version.
+     * Get table name by active version.
      *
-     * @param rulePath rule path
-     * @return mask table version
+     * @param activeVersionPath active version path
+     * @return table name
      */
-    public static Optional<String> getMaskTableVersion(final String rulePath) {
-        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + TABLES_NODE + RULE_VERSION, Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(rulePath);
-        return matcher.find() ? Optional.of(matcher.group(4)) : Optional.empty();
+    public static Optional<String> getTableNameByActiveVersionPath(final String activeVersionPath) {
+        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + TABLES_NODE + RULE_ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(activeVersionPath);
+        return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
     }
     
     /**
-     * Get mask algorithm version.
+     * Get algorithm name by active version.
      *
-     * @param rulePath rule path
-     * @return mask algorithm version
+     * @param activeVersionPath active version path
+     * @return algorithm name
      */
-    public static Optional<String> getMaskAlgorithmVersion(final String rulePath) {
-        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + ALGORITHMS_NODE + RULE_VERSION, Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(rulePath);
-        return matcher.find() ? Optional.of(matcher.group(4)) : Optional.empty();
+    public static Optional<String> getAlgorithmNameByActiveVersionPath(final String activeVersionPath) {
+        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + ALGORITHMS_NODE + RULE_ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(activeVersionPath);
+        return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
     }
 }
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 2a13600aa93..2deb6bcbef6 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
@@ -19,9 +19,13 @@ package org.apache.shardingsphere.mask.subscriber;
 
 import com.google.common.eventbus.Subscribe;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator;
+import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
+import org.apache.shardingsphere.infra.yaml.config.pojo.algorithm.YamlAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.swapper.algorithm.YamlAlgorithmConfigurationSwapper;
 import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
 import org.apache.shardingsphere.mask.event.algorithm.AlterMaskAlgorithmEvent;
 import org.apache.shardingsphere.mask.event.algorithm.DeleteMaskAlgorithmEvent;
@@ -57,7 +61,8 @@ public final class MaskAlgorithmSubscriber implements RuleConfigurationSubscribe
     public synchronized void renew(final AlterMaskAlgorithmEvent event) {
         ShardingSphereDatabase database = databases.get(event.getDatabaseName());
         MaskRuleConfiguration config = (MaskRuleConfiguration) database.getRuleMetaData().getSingleRule(MaskRule.class).getConfiguration();
-        config.getMaskAlgorithms().put(event.getAlgorithmName(), event.getConfig());
+        config.getMaskAlgorithms().put(event.getAlgorithmName(), swapToAlgorithmConfig(
+                instanceContext.getModeContextManager().getVersionPathByActiveVersionKey(event.getActiveVersionKey(), event.getActiveVersion())));
     }
     
     /**
@@ -72,4 +77,8 @@ public final class MaskAlgorithmSubscriber implements RuleConfigurationSubscribe
         config.getMaskAlgorithms().remove(event.getAlgorithmName());
         instanceContext.getEventBusContext().post(new DatabaseRuleConfigurationChangedEvent(event.getDatabaseName(), config));
     }
+    
+    private AlgorithmConfiguration swapToAlgorithmConfig(final String yamlContext) {
+        return new YamlAlgorithmConfigurationSwapper().swapToObject(YamlEngine.unmarshal(yamlContext, YamlAlgorithmConfiguration.class));
+    }
 }
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskConfigurationSubscriber.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java
similarity index 75%
rename from features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskConfigurationSubscriber.java
rename to features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java
index c34d5906793..c2fb4614e97 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskConfigurationSubscriber.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java
@@ -22,12 +22,15 @@ import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator;
+import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
 import org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
-import org.apache.shardingsphere.mask.event.config.AddMaskConfigurationEvent;
-import org.apache.shardingsphere.mask.event.config.AlterMaskConfigurationEvent;
-import org.apache.shardingsphere.mask.event.config.DeleteMaskConfigurationEvent;
+import org.apache.shardingsphere.mask.event.table.AddMaskTableEvent;
+import org.apache.shardingsphere.mask.event.table.AlterMaskTableEvent;
+import org.apache.shardingsphere.mask.event.table.DeleteMaskTableEvent;
 import org.apache.shardingsphere.mask.rule.MaskRule;
+import org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskTableRuleConfiguration;
+import org.apache.shardingsphere.mask.yaml.swapper.rule.YamlMaskTableRuleConfigurationSwapper;
 import org.apache.shardingsphere.mode.event.config.DatabaseRuleConfigurationChangedEvent;
 
 import java.util.Collections;
@@ -39,7 +42,7 @@ import java.util.Optional;
  */
 @SuppressWarnings("UnstableApiUsage")
 @RequiredArgsConstructor
-public final class MaskConfigurationSubscriber implements RuleConfigurationSubscribeCoordinator {
+public final class MaskTableSubscriber implements RuleConfigurationSubscribeCoordinator {
     
     private Map<String, ShardingSphereDatabase> databases;
     
@@ -58,12 +61,13 @@ public final class MaskConfigurationSubscriber implements RuleConfigurationSubsc
      * @param event add mask configuration event
      */
     @Subscribe
-    public synchronized void renew(final AddMaskConfigurationEvent event) {
+    public synchronized void renew(final AddMaskTableEvent event) {
         if (!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
             return;
         }
         ShardingSphereDatabase database = databases.get(event.getDatabaseName());
-        MaskTableRuleConfiguration needToAddedConfig = event.getConfig();
+        MaskTableRuleConfiguration needToAddedConfig = swapMaskTableRuleConfig(
+                instanceContext.getModeContextManager().getVersionPathByActiveVersionKey(event.getActiveVersionKey(), event.getActiveVersion()));
         Optional<MaskRule> rule = database.getRuleMetaData().findSingleRule(MaskRule.class);
         MaskRuleConfiguration config;
         if (rule.isPresent()) {
@@ -82,12 +86,13 @@ public final class MaskConfigurationSubscriber implements RuleConfigurationSubsc
      * @param event alter mask configuration event
      */
     @Subscribe
-    public synchronized void renew(final AlterMaskConfigurationEvent event) {
+    public synchronized void renew(final AlterMaskTableEvent event) {
         if (!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
             return;
         }
         ShardingSphereDatabase database = databases.get(event.getDatabaseName());
-        MaskTableRuleConfiguration needToAlteredConfig = event.getConfig();
+        MaskTableRuleConfiguration needToAlteredConfig = swapMaskTableRuleConfig(
+                instanceContext.getModeContextManager().getVersionPathByActiveVersionKey(event.getActiveVersionKey(), event.getActiveVersion()));
         MaskRuleConfiguration config = (MaskRuleConfiguration) database.getRuleMetaData().getSingleRule(MaskRule.class).getConfiguration();
         config.getTables().removeIf(each -> each.getName().equals(event.getTableName()));
         config.getTables().add(needToAlteredConfig);
@@ -100,13 +105,14 @@ public final class MaskConfigurationSubscriber implements RuleConfigurationSubsc
      * @param event delete mask configuration event
      */
     @Subscribe
-    public synchronized void renew(final DeleteMaskConfigurationEvent event) {
-        if (!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
-            return;
-        }
+    public synchronized void renew(final DeleteMaskTableEvent event) {
         ShardingSphereDatabase database = databases.get(event.getDatabaseName());
         MaskRuleConfiguration config = (MaskRuleConfiguration) database.getRuleMetaData().getSingleRule(MaskRule.class).getConfiguration();
         config.getTables().removeIf(each -> each.getName().equals(event.getTableName()));
         instanceContext.getEventBusContext().post(new DatabaseRuleConfigurationChangedEvent(event.getDatabaseName(), config));
     }
+    
+    private MaskTableRuleConfiguration swapMaskTableRuleConfig(final String yamlContext) {
+        return new YamlMaskTableRuleConfigurationSwapper().swapToObject(YamlEngine.unmarshal(yamlContext, YamlMaskTableRuleConfiguration.class));
+    }
 }
diff --git a/features/mask/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator b/features/mask/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator
index 286c20177a0..749bb19047f 100644
--- a/features/mask/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator
+++ b/features/mask/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator
@@ -15,5 +15,5 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.mask.subscriber.MaskConfigurationSubscriber
+org.apache.shardingsphere.mask.subscriber.MaskTableSubscriber
 org.apache.shardingsphere.mask.subscriber.MaskAlgorithmSubscriber
diff --git a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/metadata/converter/MaskNodeConverterTest.java b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/metadata/converter/MaskNodeConverterTest.java
index b8a61aea3dd..3ecaa742599 100644
--- a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/metadata/converter/MaskNodeConverterTest.java
+++ b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/metadata/converter/MaskNodeConverterTest.java
@@ -64,15 +64,15 @@ class MaskNodeConverterTest {
     
     @Test
     void assertGetMaskTableVersion() {
-        Optional<String> actual = MaskNodeConverter.getMaskTableVersion("/metadata/foo_db/rules/mask/tables/foo_table/versions/1");
+        Optional<String> actual = MaskNodeConverter.getTableNameByActiveVersionPath("/metadata/foo_db/rules/mask/tables/foo_table/active_version");
         assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("1"));
+        assertThat(actual.get(), is("foo_table"));
     }
     
     @Test
     void assertGetMaskAlgorithmVersion() {
-        Optional<String> actual = MaskNodeConverter.getMaskAlgorithmVersion("/metadata/foo_db/rules/mask/algorithms/md5_mask/versions/1");
+        Optional<String> actual = MaskNodeConverter.getAlgorithmNameByActiveVersionPath("/metadata/foo_db/rules/mask/algorithms/md5_mask/active_version");
         assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("1"));
+        assertThat(actual.get(), is("md5_mask"));
     }
 }
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
index ce11b68c31e..acf75c969e7 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
@@ -66,6 +66,6 @@ public final class ReadwriteSplittingRuleConfigurationEventBuilder implements Ru
         if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
             return Optional.of(new AlterLoadBalanceEvent(databaseName, loadBalancerName, event.getKey(), event.getValue()));
         }
-        return Optional.of(new DeleteLoadBalanceEvent(databaseName, loadBalancerName, event.getKey(), event.getValue()));
+        return Optional.of(new DeleteLoadBalanceEvent(databaseName, loadBalancerName));
     }
 }
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/DeleteLoadBalanceEvent.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/DeleteLoadBalanceEvent.java
index 6dcf83a6232..99397c8b4f0 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/DeleteLoadBalanceEvent.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/DeleteLoadBalanceEvent.java
@@ -31,8 +31,4 @@ public final class DeleteLoadBalanceEvent implements GovernanceEvent {
     private final String databaseName;
     
     private final String loadBalanceName;
-    
-    private final String activeVersionKey;
-    
-    private final String activeVersion;
 }
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 e665d34ee26..df039252871 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
@@ -75,9 +75,6 @@ public final class ReadwriteSplittingLoadBalanceSubscriber implements RuleConfig
      */
     @Subscribe
     public synchronized void renew(final DeleteLoadBalanceEvent event) {
-        if (!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
-            return;
-        }
         ShardingSphereDatabase database = databases.get(event.getDatabaseName());
         ReadwriteSplittingRuleConfiguration config = (ReadwriteSplittingRuleConfiguration) database.getRuleMetaData().getSingleRule(ReadwriteSplittingRule.class).getConfiguration();
         config.getLoadBalancers().remove(event.getLoadBalanceName());