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();
}