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 61f39a52806 Refactor metadata for load database rule (#26459)
61f39a52806 is described below

commit 61f39a52806c906014d73296d591ac74eee69e04
Author: ChenJiaHao <[email protected]>
AuthorDate: Tue Jun 20 21:00:30 2023 +0800

    Refactor metadata for load database rule (#26459)
    
    * Refactor metadata for load database rule
    
    * Fix code style
    
    * Fix load config and persist
    
    * Fix unit test
---
 .../metadata/converter/BroadcastNodeConverter.java |   8 +-
 .../NewYamlBroadcastRuleConfigurationSwapper.java  |   8 +-
 ...wYamlBroadcastRuleConfigurationSwapperTest.java |   6 +-
 .../coverter/BroadcastNodeConverterTest.java       |   2 +-
 .../EncryptRuleConfigurationEventBuilder.java      |  12 +-
 .../AddEncryptTableEvent.java}                     |   6 +-
 .../AlterEncryptTableEvent.java}                   |   6 +-
 .../DeleteEncryptTableEvent.java}                  |   6 +-
 .../converter/CompatibleEncryptNodeConverter.java  | 150 +++++++++++++++++++++
 ...Subscriber.java => EncryptTableSubscriber.java} |  16 +--
 ...lCompatibleEncryptRuleConfigurationSwapper.java |  14 +-
 ...nfra.rule.RuleConfigurationSubscribeCoordinator |   2 +-
 ...patibleEncryptRuleConfigurationSwapperTest.java |   4 +-
 .../metadata/persist/node/NewGlobalNode.java       |  18 +--
 .../service/config/AbstractPersistService.java     |  26 +++-
 .../database/NewDatabaseRulePersistService.java    |   8 +-
 .../config/global/NewPropertiesPersistService.java |   2 +-
 .../NewYamlSingleRuleConfigurationSwapper.java     |   6 +-
 18 files changed, 235 insertions(+), 65 deletions(-)

diff --git 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/metadata/converter/BroadcastNodeConverter.java
 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/metadata/converter/BroadcastNodeConverter.java
index 3f2e6dbdeee..34b4271feca 100644
--- 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/metadata/converter/BroadcastNodeConverter.java
+++ 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/metadata/converter/BroadcastNodeConverter.java
@@ -36,9 +36,7 @@ public final class BroadcastNodeConverter {
     
     private static final String RULES_NODE_PREFIX = 
"/([\\w\\-]+)/([\\w\\-]+)/rules/";
     
-    private static final String VERSION_PATTERN = "/versions/[0-9]+";
-    
-    private static final String VERSION_PATH = "/versions/([0-9]+)";
+    private static final String VERSION_PATH = 
"/([\\w\\-]+)/versions/([0-9]+)";
     
     /**
      * Get tables path.
@@ -68,7 +66,7 @@ public final class BroadcastNodeConverter {
      * @return true or false
      */
     public static boolean isTablesPath(final String rulePath) {
-        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" 
+ TABLES_NODE + VERSION_PATTERN, Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" 
+ TABLES_NODE + VERSION_PATH, Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(rulePath);
         return matcher.find();
     }
@@ -82,6 +80,6 @@ public final class BroadcastNodeConverter {
     public static Optional<String> getTablesVersion(final String rulePath) {
         Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" 
+ TABLES_NODE + VERSION_PATH, Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(rulePath);
-        return matcher.find() ? Optional.of(matcher.group(3)) : 
Optional.empty();
+        return matcher.find() ? Optional.of(matcher.group(4)) : 
Optional.empty();
     }
 }
diff --git 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/NewYamlBroadcastRuleConfigurationSwapper.java
 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/NewYamlBroadcastRuleConfigurationSwapper.java
index 4dc963663e1..cc03cee1900 100644
--- 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/NewYamlBroadcastRuleConfigurationSwapper.java
+++ 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/NewYamlBroadcastRuleConfigurationSwapper.java
@@ -46,9 +46,11 @@ public final class NewYamlBroadcastRuleConfigurationSwapper 
implements NewYamlRu
     
     @Override
     public BroadcastRuleConfiguration swapToObject(final 
Collection<YamlDataNode> dataNodes) {
-        if (!dataNodes.isEmpty()) {
-            YamlBroadcastRuleConfiguration yamlBroadcastRuleConfiguration = 
YamlEngine.unmarshal(dataNodes.iterator().next().getValue(), 
YamlBroadcastRuleConfiguration.class);
-            return new 
BroadcastRuleConfiguration(yamlBroadcastRuleConfiguration.getTables());
+        for (YamlDataNode each : dataNodes) {
+            if (BroadcastNodeConverter.isBroadcastPath(each.getKey())) {
+                YamlBroadcastRuleConfiguration yamlBroadcastRuleConfiguration 
= YamlEngine.unmarshal(each.getValue(), YamlBroadcastRuleConfiguration.class);
+                return new 
BroadcastRuleConfiguration(yamlBroadcastRuleConfiguration.getTables());
+            }
         }
         return new BroadcastRuleConfiguration(Collections.emptyList());
     }
diff --git 
a/features/broadcast/core/src/main/test/org/apache/shardingsphere/broadcast/yaml/swapper/NewYamlBroadcastRuleConfigurationSwapperTest.java
 
b/features/broadcast/core/src/main/test/org/apache/shardingsphere/broadcast/yaml/swapper/NewYamlBroadcastRuleConfigurationSwapperTest.java
index cc07f188caa..5e208a9e09b 100644
--- 
a/features/broadcast/core/src/main/test/org/apache/shardingsphere/broadcast/yaml/swapper/NewYamlBroadcastRuleConfigurationSwapperTest.java
+++ 
b/features/broadcast/core/src/main/test/org/apache/shardingsphere/broadcast/yaml/swapper/NewYamlBroadcastRuleConfigurationSwapperTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.util.yaml.datanode.YamlDataNode;
 import org.junit.jupiter.api.Test;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedList;
 
@@ -34,7 +35,7 @@ class NewYamlBroadcastRuleConfigurationSwapperTest {
     
     @Test
     void assertSwapEmptyConfigToDataNodes() {
-        BroadcastRuleConfiguration config = new BroadcastRuleConfiguration();
+        BroadcastRuleConfiguration config = new 
BroadcastRuleConfiguration(Collections.emptyList());
         Collection<YamlDataNode> result = swapper.swapToDataNodes(config);
         assertThat(result.size(), is(0));
     }
@@ -52,8 +53,7 @@ class NewYamlBroadcastRuleConfigurationSwapperTest {
         Collection<String> tables = new LinkedList<>();
         tables.add(("foo_table"));
         tables.add(("foo_table2"));
-        BroadcastRuleConfiguration result = new BroadcastRuleConfiguration();
-        result.setTables(tables);
+        BroadcastRuleConfiguration result = new 
BroadcastRuleConfiguration(tables);
         return result;
     }
     
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/metadata/coverter/BroadcastNodeConverterTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/metadata/coverter/BroadcastNodeConverterTest.java
index 38cfd212f8f..be2fdf16e7a 100644
--- 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/metadata/coverter/BroadcastNodeConverterTest.java
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/metadata/coverter/BroadcastNodeConverterTest.java
@@ -30,7 +30,7 @@ class BroadcastNodeConverterTest {
     
     @Test
     void assertGetTablesVersion() {
-        Optional<String> actual = 
BroadcastNodeConverter.getTablesVersion("/metadata/foo_db/rules/broadcast/tables/versions/1");
+        Optional<String> actual = 
BroadcastNodeConverter.getTablesVersion("/metadata/foo_db/rules/broadcast/tables/foo/versions/1");
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("1"));
     }
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 f330ff3897b..9ce7de83a77 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
@@ -19,9 +19,9 @@ package org.apache.shardingsphere.encrypt.event;
 
 import com.google.common.base.Strings;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
-import 
org.apache.shardingsphere.encrypt.event.config.AddEncryptConfigurationEvent;
-import 
org.apache.shardingsphere.encrypt.event.config.AlterEncryptConfigurationEvent;
-import 
org.apache.shardingsphere.encrypt.event.config.DeleteEncryptConfigurationEvent;
+import org.apache.shardingsphere.encrypt.event.table.AddEncryptTableEvent;
+import org.apache.shardingsphere.encrypt.event.table.AlterEncryptTableEvent;
+import org.apache.shardingsphere.encrypt.event.table.DeleteEncryptTableEvent;
 import org.apache.shardingsphere.encrypt.event.encryptor.AlterEncryptorEvent;
 import org.apache.shardingsphere.encrypt.event.encryptor.DeleteEncryptorEvent;
 import 
org.apache.shardingsphere.encrypt.metadata.converter.EncryptNodeConverter;
@@ -67,12 +67,12 @@ public final class EncryptRuleConfigurationEventBuilder 
implements RuleConfigura
     
     private Optional<GovernanceEvent> createEncryptConfigEvent(final String 
databaseName, final String groupName, final String version, final 
DataChangedEvent event) {
         if (Type.ADDED == event.getType()) {
-            return Optional.of(new AddEncryptConfigurationEvent(databaseName, 
swapEncryptTableRuleConfig(event.getValue()), event.getKey(), version));
+            return Optional.of(new AddEncryptTableEvent(databaseName, 
swapEncryptTableRuleConfig(event.getValue()), event.getKey(), version));
         }
         if (Type.UPDATED == event.getType()) {
-            return Optional.of(new 
AlterEncryptConfigurationEvent(databaseName, groupName, 
swapEncryptTableRuleConfig(event.getValue()), event.getKey(), version));
+            return Optional.of(new AlterEncryptTableEvent(databaseName, 
groupName, swapEncryptTableRuleConfig(event.getValue()), event.getKey(), 
version));
         }
-        return Optional.of(new DeleteEncryptConfigurationEvent(databaseName, 
groupName, event.getKey(), version));
+        return Optional.of(new DeleteEncryptTableEvent(databaseName, 
groupName, event.getKey(), version));
     }
     
     private EncryptTableRuleConfiguration swapEncryptTableRuleConfig(final 
String yamlContext) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/config/AddEncryptConfigurationEvent.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/AddEncryptTableEvent.java
similarity index 88%
rename from 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/config/AddEncryptConfigurationEvent.java
rename to 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/AddEncryptTableEvent.java
index 295bbcb7cb4..8117c5c6464 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/config/AddEncryptConfigurationEvent.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/AddEncryptTableEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.encrypt.event.config;
+package org.apache.shardingsphere.encrypt.event.table;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -23,11 +23,11 @@ import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfigu
 import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
 
 /**
- * Add encrypt configuration event.
+ * Add encrypt table event.
  */
 @RequiredArgsConstructor
 @Getter
-public final class AddEncryptConfigurationEvent implements GovernanceEvent {
+public final class AddEncryptTableEvent implements GovernanceEvent {
     
     private final String databaseName;
     
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/config/AlterEncryptConfigurationEvent.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/AlterEncryptTableEvent.java
similarity index 88%
rename from 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/config/AlterEncryptConfigurationEvent.java
rename to 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/AlterEncryptTableEvent.java
index a2085ecd132..4dee67d2922 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/config/AlterEncryptConfigurationEvent.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/AlterEncryptTableEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.encrypt.event.config;
+package org.apache.shardingsphere.encrypt.event.table;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -23,11 +23,11 @@ import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfigu
 import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
 
 /**
- * Alter encrypt configuration event.
+ * Alter encrypt table event.
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterEncryptConfigurationEvent implements GovernanceEvent {
+public final class AlterEncryptTableEvent implements GovernanceEvent {
     
     private final String databaseName;
     
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/config/DeleteEncryptConfigurationEvent.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/DeleteEncryptTableEvent.java
similarity index 86%
rename from 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/config/DeleteEncryptConfigurationEvent.java
rename to 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/DeleteEncryptTableEvent.java
index 834a3ba1415..4d37837a7ef 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/config/DeleteEncryptConfigurationEvent.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/table/DeleteEncryptTableEvent.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.encrypt.event.config;
+package org.apache.shardingsphere.encrypt.event.table;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
 
 /**
- * Delete encrypt configuration event.
+ * Delete encrypt table event.
  */
 @RequiredArgsConstructor
 @Getter
-public final class DeleteEncryptConfigurationEvent implements GovernanceEvent {
+public final class DeleteEncryptTableEvent implements GovernanceEvent {
     
     private final String databaseName;
     
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/CompatibleEncryptNodeConverter.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/CompatibleEncryptNodeConverter.java
new file mode 100644
index 00000000000..c1d2ae56a8f
--- /dev/null
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/CompatibleEncryptNodeConverter.java
@@ -0,0 +1,150 @@
+/*
+ * 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.encrypt.metadata.converter;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Compatible encrypt node converter.
+ * @deprecated compatible support will remove in next version.
+ */
+@Deprecated
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class CompatibleEncryptNodeConverter {
+    
+    private static final String ROOT_NODE = "compatible_encrypt";
+    
+    private static final String TABLES_NODE = "tables";
+    
+    private static final String ENCRYPTORS_NODE = "encryptors";
+    
+    private static final String RULES_NODE_PREFIX = 
"/([\\w\\-]+)/([\\w\\-]+)/rules/";
+    
+    private static final String RULE_NAME_PATTERN = "/([\\w\\-]+)?";
+    
+    private static final String RULE_VERSION = 
"/([\\w\\-]+)/versions/([\\w\\-]+)$";
+    
+    /**
+     * Get table name path.
+     *
+     * @param tableName table name
+     * @return table name path
+     */
+    public static String getTableNamePath(final String tableName) {
+        return String.join("/", TABLES_NODE, tableName);
+    }
+    
+    /**
+     * Get encryptor path.
+     *
+     * @param encryptorName encryptor name
+     * @return encryptor path
+     */
+    public static String getEncryptorPath(final String encryptorName) {
+        return String.join("/", ENCRYPTORS_NODE, encryptorName);
+    }
+    
+    /**
+     * Is encrypt path.
+     *
+     * @param rulePath rule path
+     * @return true or false
+     */
+    public static boolean isEncryptPath(final String rulePath) {
+        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + 
"\\.*", Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(rulePath);
+        return matcher.find();
+    }
+    
+    /**
+     * Is encrypt table path.
+     *
+     * @param rulePath rule path
+     * @return true or false
+     */
+    public static boolean isTablePath(final String rulePath) {
+        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" 
+ TABLES_NODE + "\\.*", Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(rulePath);
+        return matcher.find();
+    }
+    
+    /**
+     * Is encryptor path.
+     *
+     * @param rulePath rule path
+     * @return true or false
+     */
+    public static boolean isEncryptorPath(final String rulePath) {
+        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" 
+ ENCRYPTORS_NODE + "\\.*", Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(rulePath);
+        return matcher.find();
+    }
+    
+    /**
+     * Get table name.
+     *
+     * @param rulePath rule path
+     * @return table name
+     */
+    public static Optional<String> getTableName(final String rulePath) {
+        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" 
+ TABLES_NODE + RULE_NAME_PATTERN, Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(rulePath);
+        return matcher.find() ? Optional.of(matcher.group(3)) : 
Optional.empty();
+    }
+    
+    /**
+     *  Get encryptor name.
+     *
+     * @param rulePath rule path
+     * @return encryptor name
+     */
+    public static Optional<String> getEncryptorName(final String rulePath) {
+        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" 
+ ENCRYPTORS_NODE + RULE_NAME_PATTERN, Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(rulePath);
+        return matcher.find() ? Optional.of(matcher.group(3)) : 
Optional.empty();
+    }
+    
+    /**
+     * Get encrypt table version.
+     * 
+     * @param rulePath rule path
+     * @return encrypt table version
+     */
+    public static Optional<String> getEncryptTableVersion(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();
+    }
+    
+    /**
+     * Get encryptor version.
+     *
+     * @param rulePath rule path
+     * @return encryptor version
+     */
+    public static Optional<String> getEncryptorVersion(final String rulePath) {
+        Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" 
+ ENCRYPTORS_NODE + RULE_VERSION, Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(rulePath);
+        return matcher.find() ? Optional.of(matcher.group(4)) : 
Optional.empty();
+    }
+}
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptConfigurationSubscriber.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptTableSubscriber.java
similarity index 88%
rename from 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptConfigurationSubscriber.java
rename to 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptTableSubscriber.java
index 600079a96ff..d73b5a7c36e 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptConfigurationSubscriber.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/subscriber/EncryptTableSubscriber.java
@@ -21,9 +21,9 @@ import com.google.common.eventbus.Subscribe;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
-import 
org.apache.shardingsphere.encrypt.event.config.AddEncryptConfigurationEvent;
-import 
org.apache.shardingsphere.encrypt.event.config.AlterEncryptConfigurationEvent;
-import 
org.apache.shardingsphere.encrypt.event.config.DeleteEncryptConfigurationEvent;
+import org.apache.shardingsphere.encrypt.event.table.AddEncryptTableEvent;
+import org.apache.shardingsphere.encrypt.event.table.AlterEncryptTableEvent;
+import org.apache.shardingsphere.encrypt.event.table.DeleteEncryptTableEvent;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -35,11 +35,11 @@ import java.util.Map;
 import java.util.Optional;
 
 /**
- * Encrypt configuration subscriber.
+ * Encrypt table subscriber.
  */
 @SuppressWarnings("UnstableApiUsage")
 @RequiredArgsConstructor
-public final class EncryptConfigurationSubscriber implements 
RuleConfigurationSubscribeCoordinator {
+public final class EncryptTableSubscriber implements 
RuleConfigurationSubscribeCoordinator {
     
     private Map<String, ShardingSphereDatabase> databases;
     
@@ -58,7 +58,7 @@ public final class EncryptConfigurationSubscriber implements 
RuleConfigurationSu
      * @param event add encrypt configuration event
      */
     @Subscribe
-    public synchronized void renew(final AddEncryptConfigurationEvent event) {
+    public synchronized void renew(final AddEncryptTableEvent event) {
         if 
(!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey())))
 {
             return;
         }
@@ -81,7 +81,7 @@ public final class EncryptConfigurationSubscriber implements 
RuleConfigurationSu
      * @param event alter encrypt configuration event
      */
     @Subscribe
-    public synchronized void renew(final AlterEncryptConfigurationEvent event) 
{
+    public synchronized void renew(final AlterEncryptTableEvent event) {
         if 
(!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey())))
 {
             return;
         }
@@ -99,7 +99,7 @@ public final class EncryptConfigurationSubscriber implements 
RuleConfigurationSu
      * @param event delete encrypt configuration event
      */
     @Subscribe
-    public synchronized void renew(final DeleteEncryptConfigurationEvent 
event) {
+    public synchronized void renew(final DeleteEncryptTableEvent event) {
         if 
(!event.getActiveVersion().equals(instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey())))
 {
             return;
         }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlCompatibleEncryptRuleConfigurationSwapper.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlCompatibleEncryptRuleConfigurationSwapper.java
index 9dd82f32aa8..e96f583f35e 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlCompatibleEncryptRuleConfigurationSwapper.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlCompatibleEncryptRuleConfigurationSwapper.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.encrypt.yaml.swapper;
 import 
org.apache.shardingsphere.encrypt.api.config.CompatibleEncryptRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
 import org.apache.shardingsphere.encrypt.constant.EncryptOrder;
-import 
org.apache.shardingsphere.encrypt.metadata.converter.EncryptNodeConverter;
+import 
org.apache.shardingsphere.encrypt.metadata.converter.CompatibleEncryptNodeConverter;
 import 
org.apache.shardingsphere.encrypt.yaml.config.rule.YamlCompatibleEncryptTableRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.yaml.swapper.rule.YamlCompatibleEncryptTableRuleConfigurationSwapper;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
@@ -54,10 +54,10 @@ public final class 
NewYamlCompatibleEncryptRuleConfigurationSwapper implements N
     public Collection<YamlDataNode> swapToDataNodes(final 
CompatibleEncryptRuleConfiguration data) {
         Collection<YamlDataNode> result = new LinkedHashSet<>();
         for (EncryptTableRuleConfiguration each : data.getTables()) {
-            result.add(new 
YamlDataNode(EncryptNodeConverter.getTableNamePath(each.getName()), 
YamlEngine.marshal(tableSwapper.swapToYamlConfiguration(each))));
+            result.add(new 
YamlDataNode(CompatibleEncryptNodeConverter.getTableNamePath(each.getName()), 
YamlEngine.marshal(tableSwapper.swapToYamlConfiguration(each))));
         }
         for (Entry<String, AlgorithmConfiguration> entry : 
data.getEncryptors().entrySet()) {
-            result.add(new 
YamlDataNode(EncryptNodeConverter.getEncryptorPath(entry.getKey()), 
YamlEngine.marshal(algorithmSwapper.swapToYamlConfiguration(entry.getValue()))));
+            result.add(new 
YamlDataNode(CompatibleEncryptNodeConverter.getEncryptorPath(entry.getKey()), 
YamlEngine.marshal(algorithmSwapper.swapToYamlConfiguration(entry.getValue()))));
         }
         return result;
     }
@@ -67,11 +67,11 @@ public final class 
NewYamlCompatibleEncryptRuleConfigurationSwapper implements N
         Collection<EncryptTableRuleConfiguration> tables = new LinkedList<>();
         Map<String, AlgorithmConfiguration> encryptors = new HashMap<>();
         for (YamlDataNode each : dataNodes) {
-            if (EncryptNodeConverter.isTablePath(each.getKey())) {
-                EncryptNodeConverter.getTableName(each.getKey())
+            if (CompatibleEncryptNodeConverter.isTablePath(each.getKey())) {
+                CompatibleEncryptNodeConverter.getTableName(each.getKey())
                         .ifPresent(tableName -> 
tables.add(tableSwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), 
YamlCompatibleEncryptTableRuleConfiguration.class))));
-            } else if (EncryptNodeConverter.isEncryptorPath(each.getKey())) {
-                EncryptNodeConverter.getEncryptorName(each.getKey())
+            } else if 
(CompatibleEncryptNodeConverter.isEncryptorPath(each.getKey())) {
+                CompatibleEncryptNodeConverter.getEncryptorName(each.getKey())
                         .ifPresent(encryptorName -> 
encryptors.put(encryptorName, 
algorithmSwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), 
YamlAlgorithmConfiguration.class))));
             }
         }
diff --git 
a/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator
 
b/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator
index 6656296e45c..212a192b7c6 100644
--- 
a/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator
+++ 
b/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.rule.RuleConfigurationSubscribeCoordinator
@@ -15,5 +15,5 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.encrypt.subscriber.EncryptConfigurationSubscriber
+org.apache.shardingsphere.encrypt.subscriber.EncryptTableSubscriber
 org.apache.shardingsphere.encrypt.subscriber.EncryptorSubscriber
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlCompatibleEncryptRuleConfigurationSwapperTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlCompatibleEncryptRuleConfigurationSwapperTest.java
index 5666d6802d0..09e20915f5d 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlCompatibleEncryptRuleConfigurationSwapperTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlCompatibleEncryptRuleConfigurationSwapperTest.java
@@ -73,13 +73,13 @@ class NewYamlCompatibleEncryptRuleConfigurationSwapperTest {
     @Test
     void assertSwapToObject() {
         Collection<YamlDataNode> config = new LinkedList<>();
-        config.add(new 
YamlDataNode("/metadata/foo_db/rules/encrypt/tables/foo", "columns:\n"
+        config.add(new 
YamlDataNode("/metadata/foo_db/rules/compatible_encrypt/tables/foo", 
"columns:\n"
                 + "  foo_column:\n"
                 + "    cipherColumn: FIXTURE\n"
                 + "    encryptorName: FOO\n"
                 + "    logicColumn: foo_column\n"
                 + "name: foo\n"));
-        config.add(new 
YamlDataNode("/metadata/foo_db/rules/encrypt/encryptors/FOO", "type: FOO\n"));
+        config.add(new 
YamlDataNode("/metadata/foo_db/rules/compatible_encrypt/encryptors/FOO", "type: 
FOO\n"));
         CompatibleEncryptRuleConfiguration result = 
swapper.swapToObject(config);
         assertThat(result.getTables().size(), is(1));
         assertThat(result.getTables().iterator().next().getName(), is("foo"));
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNode.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNode.java
index e4f6ca6664f..317f31f2498 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNode.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewGlobalNode.java
@@ -84,15 +84,6 @@ public final class NewGlobalNode {
         return String.join("/", getPropsRootNode(), ACTIVE_VERSION);
     }
     
-    /**
-     * Get properties versions node.
-     *
-     * @return properties versions node
-     */
-    public static String getPropsVersionsNode() {
-        return String.join("/", getPropsRootNode(), VERSIONS);
-    }
-    
     /**
      * Get properties version node.
      *
@@ -103,6 +94,15 @@ public final class NewGlobalNode {
         return String.join("/", getPropsVersionsNode(), version);
     }
     
+    /**
+     * Get properties versions node.
+     *
+     * @return properties versions node
+     */
+    public static String getPropsVersionsNode() {
+        return String.join("/", getPropsRootNode(), VERSIONS);
+    }
+    
     private static String getPropsRootNode() {
         return String.join("/", "", PROPS_NODE);
     }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/AbstractPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/AbstractPersistService.java
index 5c8d2f4e4c6..3106503ae43 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/AbstractPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/AbstractPersistService.java
@@ -23,13 +23,21 @@ import org.apache.shardingsphere.mode.spi.PersistRepository;
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
-import java.util.LinkedList;
 import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 @RequiredArgsConstructor
 public abstract class AbstractPersistService {
     
+    private static final String ACTIVE_VERSION_PATTERN = "/active_version$";
+    
+    private static final String ACTIVE_VERSION_PATH = "active_version";
+    
+    private static final String VERSIONS_PATH = "versions";
+    
     private final PersistRepository repository;
     
     /**
@@ -41,7 +49,12 @@ public abstract class AbstractPersistService {
     public Collection<YamlDataNode> getDataNodes(final String rootPath) {
         Collection<YamlDataNode> result = new LinkedList<>();
         for (String each : getNodes(rootPath)) {
-            result.add(new YamlDataNode(each, repository.getDirectly(each)));
+            Pattern pattern = Pattern.compile(ACTIVE_VERSION_PATTERN, 
Pattern.CASE_INSENSITIVE);
+            Matcher matcher = pattern.matcher(each);
+            if (matcher.find()) {
+                String activeRuleKey = each.replace(ACTIVE_VERSION_PATH, 
VERSIONS_PATH) + "/" + getActiveVersion(each);
+                result.add(new YamlDataNode(activeRuleKey, 
repository.getDirectly(activeRuleKey)));
+            }
         }
         return result;
     }
@@ -67,6 +80,11 @@ public abstract class AbstractPersistService {
     }
     
     private String getPath(final String path, final String childKey) {
-        return String.join("/", "", path, childKey);
+        return String.join("/", path, childKey);
     }
+    
+    private String getActiveVersion(final String key) {
+        return repository.getDirectly(key);
+    }
+    
 }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
index 555c411401f..e23e93a91f0 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
@@ -80,18 +80,22 @@ public final class NewDatabaseRulePersistService extends 
AbstractPersistService
     private Collection<MetaDataVersion> persistDataNodes(final String 
databaseName, final String ruleName, final Collection<YamlDataNode> dataNodes) {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (YamlDataNode each : dataNodes) {
-            if 
(Strings.isNullOrEmpty(NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionNode(databaseName,
 ruleName, each.getKey()))) {
+            if (Strings.isNullOrEmpty(getActiveVersion(databaseName, ruleName, 
each.getKey()))) {
                 
repository.persist(NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionNode(databaseName,
 ruleName, each.getKey()), DEFAULT_VERSION);
             }
             List<String> versions = 
repository.getChildrenKeys(NewDatabaseMetaDataNode.getDatabaseRuleVersionsNode(databaseName,
 ruleName, each.getKey()));
             String nextVersion = versions.isEmpty() ? DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
             String persistKey = 
NewDatabaseMetaDataNode.getDatabaseRuleVersionNode(databaseName, ruleName, 
each.getKey(), nextVersion);
             repository.persist(persistKey, each.getValue());
-            result.add(new MetaDataVersion(persistKey, 
NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionNode(databaseName, 
ruleName, each.getKey()), nextVersion));
+            result.add(new MetaDataVersion(persistKey, 
getActiveVersion(databaseName, ruleName, each.getKey()), nextVersion));
         }
         return result;
     }
     
+    private String getActiveVersion(final String databaseName, final String 
ruleName, final String key) {
+        return 
repository.getDirectly(NewDatabaseMetaDataNode.getDatabaseRuleActiveVersionNode(databaseName,
 ruleName, key));
+    }
+    
     @SuppressWarnings({"unchecked", "rawtypes"})
     @Override
     public void delete(final String databaseName, final 
Collection<RuleConfiguration> configs) {
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewPropertiesPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewPropertiesPersistService.java
index 56c2540688c..8eb36e126c6 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewPropertiesPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/NewPropertiesPersistService.java
@@ -66,7 +66,7 @@ public final class NewPropertiesPersistService implements 
GlobalPersistService<P
     
     @Override
     public Properties load() {
-        String yamlContext = 
repository.getDirectly(NewGlobalNode.getPropsVersionNode(NewGlobalNode.getPropsActiveVersionNode()));
+        String yamlContext = 
repository.getDirectly(NewGlobalNode.getPropsVersionNode(getActiveVersion()));
         return Strings.isNullOrEmpty(yamlContext) ? new Properties() : 
YamlEngine.unmarshal(yamlContext, Properties.class);
     }
     
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/NewYamlSingleRuleConfigurationSwapper.java
 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/NewYamlSingleRuleConfigurationSwapper.java
index 67cf184d7cb..d353c0f1ac5 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/NewYamlSingleRuleConfigurationSwapper.java
+++ 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/NewYamlSingleRuleConfigurationSwapper.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.single.yaml.config.swapper;
 
-import com.google.common.base.Strings;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.infra.util.yaml.datanode.YamlDataNode;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.NewYamlRuleConfigurationSwapper;
@@ -51,10 +50,9 @@ public final class NewYamlSingleRuleConfigurationSwapper 
implements NewYamlRuleC
     @Override
     public SingleRuleConfiguration swapToObject(final Collection<YamlDataNode> 
dataNodes) {
         for (YamlDataNode each : dataNodes) {
-            if (Strings.isNullOrEmpty(each.getValue())) {
-                continue;
+            if (SingleNodeConverter.isSinglePath(each.getKey())) {
+                return swapToObject(YamlEngine.unmarshal(each.getValue(), 
YamlSingleRuleConfiguration.class));
             }
-            return swapToObject(YamlEngine.unmarshal(each.getValue(), 
YamlSingleRuleConfiguration.class));
         }
         return new SingleRuleConfiguration();
     }


Reply via email to