Skip to content

Commit

Permalink
Add DatabaseRuleItem (#34666)
Browse files Browse the repository at this point in the history
  • Loading branch information
terrymanu authored Feb 13, 2025
1 parent 4bef624 commit 1faabc3
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
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;
Expand Down Expand Up @@ -90,9 +91,10 @@ public Collection<MetaDataVersion> persist(final String databaseName, final Coll
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;
}
Expand Down Expand Up @@ -130,7 +132,7 @@ public Collection<MetaDataVersion> delete(final String databaseName, final Colle
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));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

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;

/**
Expand Down Expand Up @@ -57,22 +58,22 @@ public static String getRulePath(final String databaseName, final String ruleTyp
*
* @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());
}

/**
* Get database rule version node path generator.
*
* @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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -36,14 +37,15 @@ void assertGetRulePath() {

@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"));
}
}

0 comments on commit 1faabc3

Please sign in to comment.