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 <zhangli...@apache.org> 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")); } }