This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 1faabc36502 Add DatabaseRuleItem (#34666)
1faabc36502 is described below
commit 1faabc36502cac0ebf955cbd937574d4c8b199f5
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Feb 13 21:57:54 2025 +0800
Add DatabaseRuleItem (#34666)
---
.../database/DatabaseRulePersistService.java | 8 ++--
.../config/database/item/DatabaseRuleItem.java | 44 ++++++++++++++++++++++
.../metadata/DatabaseRuleMetaDataNodePath.java | 13 ++++---
.../metadata/DatabaseRuleMetaDataNodePathTest.java | 10 +++--
4 files changed, 62 insertions(+), 13 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
index 7860b9abe7f..8d485fae0b8 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
@@ -23,6 +23,7 @@ import
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfigurati
import
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
import
org.apache.shardingsphere.mode.metadata.persist.config.RepositoryTuplePersistService;
import
org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService;
+import
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
import
org.apache.shardingsphere.mode.node.path.metadata.DatabaseRuleMetaDataNodePath;
import
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
import org.apache.shardingsphere.mode.node.tuple.RepositoryTuple;
@@ -90,9 +91,10 @@ public final class DatabaseRulePersistService {
private Collection<MetaDataVersion> persistDataNodes(final String
databaseName, final String ruleType, final Collection<RepositoryTuple>
repositoryTuples) {
Collection<MetaDataVersion> result = new LinkedList<>();
for (RepositoryTuple each : repositoryTuples) {
- VersionNodePathGenerator versionNodePathGenerator =
DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName,
ruleType, each.getKey());
+ DatabaseRuleItem databaseRuleItem = new
DatabaseRuleItem(each.getKey());
+ VersionNodePathGenerator versionNodePathGenerator =
DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName,
ruleType, databaseRuleItem);
int nextVersion =
metaDataVersionPersistService.persist(versionNodePathGenerator,
each.getValue());
- result.add(new
MetaDataVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName,
ruleType, each.getKey()), Math.max(MetaDataVersion.INIT_VERSION, nextVersion -
1)));
+ result.add(new
MetaDataVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName,
ruleType, databaseRuleItem), Math.max(MetaDataVersion.INIT_VERSION, nextVersion
- 1)));
}
return result;
}
@@ -130,7 +132,7 @@ public final class DatabaseRulePersistService {
private Collection<MetaDataVersion> delete(final String databaseName,
final String ruleType, final Collection<RepositoryTuple> repositoryTuples) {
Collection<MetaDataVersion> result = new LinkedList<>();
for (RepositoryTuple each : repositoryTuples) {
- String toBeDeletedKey =
DatabaseRuleMetaDataNodePath.getRulePath(databaseName, ruleType, each.getKey());
+ String toBeDeletedKey =
DatabaseRuleMetaDataNodePath.getRulePath(databaseName, ruleType, new
DatabaseRuleItem(each.getKey()));
repository.delete(toBeDeletedKey);
result.add(new MetaDataVersion(toBeDeletedKey));
}
diff --git
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/database/item/DatabaseRuleItem.java
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/database/item/DatabaseRuleItem.java
new file mode 100644
index 00000000000..2bb6843a294
--- /dev/null
+++
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/database/item/DatabaseRuleItem.java
@@ -0,0 +1,44 @@
+/*
+ * 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.mode.node.path.config.database.item;
+
+/**
+ * Database rule item.
+ */
+public final class DatabaseRuleItem {
+
+ private final String itemType;
+
+ private final String itemName;
+
+ public DatabaseRuleItem(final String value) {
+ String[] values = value.split("/");
+ if (1 == values.length) {
+ itemType = values[0];
+ itemName = null;
+ } else {
+ itemType = values[0];
+ itemName = values[1];
+ }
+ }
+
+ @Override
+ public String toString() {
+ return null == itemName ? itemType : String.join("/", itemType,
itemName);
+ }
+}
diff --git
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java
index c2d1edb3662..7278acef661 100644
---
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java
+++
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.node.path.metadata;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
import
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
/**
@@ -57,11 +58,11 @@ public final class DatabaseRuleMetaDataNodePath {
*
* @param databaseName database name
* @param ruleType rule type
- * @param ruleItemName rule item name
+ * @param databaseRuleItem database rule item
* @return database rule path
*/
- public static String getRulePath(final String databaseName, final String
ruleType, final String ruleItemName) {
- return String.join("/", getRulePath(databaseName, ruleType),
ruleItemName);
+ public static String getRulePath(final String databaseName, final String
ruleType, final DatabaseRuleItem databaseRuleItem) {
+ return String.join("/", getRulePath(databaseName, ruleType),
databaseRuleItem.toString());
}
/**
@@ -69,10 +70,10 @@ public final class DatabaseRuleMetaDataNodePath {
*
* @param databaseName database name
* @param ruleType rule type
- * @param ruleItemName rule item name
+ * @param databaseRuleItem database rule item
* @return database rule version node path generator
*/
- public static VersionNodePathGenerator getVersionNodePathGenerator(final
String databaseName, final String ruleType, final String ruleItemName) {
- return new VersionNodePathGenerator(getRulePath(databaseName,
ruleType, ruleItemName));
+ public static VersionNodePathGenerator getVersionNodePathGenerator(final
String databaseName, final String ruleType, final DatabaseRuleItem
databaseRuleItem) {
+ return new VersionNodePathGenerator(getRulePath(databaseName,
ruleType, databaseRuleItem));
}
}
diff --git
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java
index 43f1c59b3c9..5d6a3a7b8fb 100644
---
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java
+++
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.mode.node.path.metadata;
+import
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
import org.junit.jupiter.api.Test;
import static org.hamcrest.CoreMatchers.is;
@@ -36,14 +37,15 @@ class DatabaseRuleMetaDataNodePathTest {
@Test
void assertGetRulePathWithKey() {
- assertThat(DatabaseRuleMetaDataNodePath.getRulePath("foo_db",
"foo_rule", "foo_rule_item"),
is("/metadata/foo_db/rules/foo_rule/foo_rule_item"));
+ assertThat(DatabaseRuleMetaDataNodePath.getRulePath("foo_db",
"foo_rule", new DatabaseRuleItem("foo_rule_item")),
is("/metadata/foo_db/rules/foo_rule/foo_rule_item"));
}
@Test
void assertGetVersionNodePathGenerator() {
-
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db",
"foo_rule", "foo_rule_item").getActiveVersionPath(),
+ DatabaseRuleItem databaseRuleItem = new
DatabaseRuleItem("foo_rule_item");
+
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db",
"foo_rule", databaseRuleItem).getActiveVersionPath(),
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/active_version"));
-
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db",
"foo_rule", "foo_rule_item").getVersionsPath(),
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions"));
-
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db",
"foo_rule", "foo_rule_item").getVersionPath(0),
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions/0"));
+
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db",
"foo_rule", databaseRuleItem).getVersionsPath(),
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions"));
+
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db",
"foo_rule", databaseRuleItem).getVersionPath(0),
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions/0"));
}
}