This is an automated email from the ASF dual-hosted git repository. sunnianjun 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 3bb351cfa8a Build rule item delete event by named rule item root path (#32721) 3bb351cfa8a is described below commit 3bb351cfa8a2916d7563fb267455f072f18b3ac1 Author: Haoran Meng <menghaora...@gmail.com> AuthorDate: Thu Aug 29 15:07:49 2024 +0800 Build rule item delete event by named rule item root path (#32721) --- .../mode/path/rule/item/NamedRuleItemNodePath.java | 14 ++++++++++++++ .../mode/path/rule/item/NamedRuleItemNodePathTest.java | 7 +++++++ .../mode/event/builder/RuleConfigurationEventBuilder.java | 7 ++++++- .../event/builder/RuleConfigurationEventBuilderTest.java | 2 +- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/mode/api/src/main/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePath.java b/mode/api/src/main/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePath.java index 0bf6896f925..593ffdf9002 100644 --- a/mode/api/src/main/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePath.java +++ b/mode/api/src/main/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePath.java @@ -38,10 +38,13 @@ public final class NamedRuleItemNodePath { private final Pattern activeVersionPathPattern; + private final Pattern itemPathPattern; + public NamedRuleItemNodePath(final RuleRootNodePath rootNodePath, final String type) { this.type = type; namePathPattern = Pattern.compile(rootNodePath.getNodePrefix() + type + NAME); activeVersionPathPattern = Pattern.compile(rootNodePath.getNodePrefix() + type + ACTIVE_VERSION); + itemPathPattern = Pattern.compile(rootNodePath.getNodePrefix() + type + "/([\\w\\-]+)$"); } /** @@ -75,4 +78,15 @@ public final class NamedRuleItemNodePath { Matcher matcher = activeVersionPathPattern.matcher(path); return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty(); } + + /** + * Get rule item name by item path. + * + * @param path path + * @return got rule item name + */ + public Optional<String> getNameByItemPath(final String path) { + Matcher matcher = itemPathPattern.matcher(path); + return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty(); + } } diff --git a/mode/api/src/test/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePathTest.java b/mode/api/src/test/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePathTest.java index 2d900a9db71..2987b9507d2 100644 --- a/mode/api/src/test/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePathTest.java +++ b/mode/api/src/test/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePathTest.java @@ -60,4 +60,11 @@ class NamedRuleItemNodePathTest { Optional<String> actual = converter.getNameByActiveVersion("/invalid"); assertFalse(actual.isPresent()); } + + @Test + public void assertGetNameByItemPath() { + Optional<String> actual = converter.getNameByItemPath("/metadata/foo_db/rules/foo/tables/foo_table"); + assertTrue(actual.isPresent()); + assertThat(actual.get(), is("foo_table")); + } } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilder.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilder.java index a32b78fa797..fa071d22c41 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilder.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilder.java @@ -62,7 +62,12 @@ public final class RuleConfigurationEventBuilder { return Optional.empty(); } for (Entry<String, NamedRuleItemNodePath> entry : ruleNodePath.getNamedItems().entrySet()) { - Optional<String> itemName = entry.getValue().getNameByActiveVersion(event.getKey()); + Optional<String> itemName; + if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) { + itemName = entry.getValue().getNameByActiveVersion(event.getKey()); + } else { + itemName = entry.getValue().getNameByItemPath(event.getKey()); + } if (itemName.isPresent()) { return Optional.of(create(databaseName, itemName.get(), event, ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); } diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java index 25a425b7e16..01284e6a0ee 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java @@ -117,7 +117,7 @@ class RuleConfigurationEventBuilderTest { Arguments.of("PathNotFound", "/metadata/fixture/rules/fixture/versions/0", "foo", Type.ADDED, false, null), Arguments.of("AddEventWithNamedRuleItemNodePath", "/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", Type.ADDED, true, AlterNamedRuleItemEvent.class), Arguments.of("UpdateEventWithNamedRuleItemNodePath", "/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", Type.UPDATED, true, AlterNamedRuleItemEvent.class), - Arguments.of("DeleteEventWithNamedRuleItemNodePath", "/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", Type.DELETED, true, DropNamedRuleItemEvent.class), + Arguments.of("DeleteEventWithNamedRuleItemNodePath", "/metadata/fixture/rules/fixture/named/xxx", "foo", Type.DELETED, true, DropNamedRuleItemEvent.class), Arguments.of("AddEventWithUniqueRuleItemNodePath", "/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.ADDED, true, AlterUniqueRuleItemEvent.class), Arguments.of("UpdateEventWithUniqueRuleItemNodePath", "/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.UPDATED, true, AlterUniqueRuleItemEvent.class), Arguments.of("DeleteEventWithUniqueRuleItemNodePath", "/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.DELETED, true, DropUniqueRuleItemEvent.class));