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 336b27d63d0 Refactor RuleConfigurationChangedHandler (#34887) 336b27d63d0 is described below commit 336b27d63d04200146640a404f2e60ce6ad86f6e Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Wed Mar 5 20:05:24 2025 +0800 Refactor RuleConfigurationChangedHandler (#34887) * Refactor RuleConfigurationChangedHandler * Refactor RuleConfigurationChangedHandler * Refactor RuleConfigurationChangedHandler * Refactor RuleConfigurationChangedHandler --- .../rule/RuleConfigurationChangedHandler.java | 32 ++++++++++------------ .../rule/RuleConfigurationChangedHandlerTest.java | 29 ++++++++++---------- 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java index 3ca63c845ce..b20337b4264 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java @@ -17,16 +17,14 @@ package org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.rule; -import com.google.common.base.Strings; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.mode.event.DataChangedEvent; -import org.apache.shardingsphere.mode.event.DataChangedEvent.Type; import org.apache.shardingsphere.mode.manager.ContextManager; import org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.DatabaseChangedHandler; import org.apache.shardingsphere.mode.metadata.changed.RuleItemChangedNodePathBuilder; -import org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher; +import org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathPattern; import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleNodePath; -import org.apache.shardingsphere.mode.node.path.type.version.VersionNodePath; +import org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathParser; import java.sql.SQLException; import java.util.Optional; @@ -43,28 +41,26 @@ public final class RuleConfigurationChangedHandler implements DatabaseChangedHan @Override public boolean isSubscribed(final String databaseName, final DataChangedEvent event) { - return NodePathSearcher.isMatchedPath(event.getKey(), DatabaseRuleNodePath.createRuleTypeSearchCriteria(databaseName)); + return new VersionNodePathParser(new DatabaseRuleNodePath(databaseName, NodePathPattern.IDENTIFIER, null)).isActiveVersionPath(event.getKey()); } @Override public void handle(final String databaseName, final DataChangedEvent event) throws SQLException { - if (Type.DELETED != event.getType() && Strings.isNullOrEmpty(event.getValue())) { + Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(databaseName, event.getKey()); + if (!databaseRuleNodePath.isPresent()) { return; } - if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) { - if (!VersionNodePath.isActiveVersionPath(event.getKey())) { - return; - } - int version = Integer.parseInt(event.getValue()); - Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(databaseName, event.getKey()); - if (databaseRuleNodePath.isPresent()) { + switch (event.getType()) { + case ADDED: + case UPDATED: + int version = Integer.parseInt(event.getValue()); contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().alter(databaseRuleNodePath.get(), version); - } - } else if (Type.DELETED == event.getType()) { - Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(databaseName, event.getKey()); - if (databaseRuleNodePath.isPresent()) { + break; + case DELETED: contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().drop(databaseRuleNodePath.get()); - } + break; + default: + break; } } } diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java index d6e20061656..683ae0499a4 100644 --- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java +++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java @@ -20,6 +20,7 @@ package org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database import org.apache.shardingsphere.mode.event.DataChangedEvent; import org.apache.shardingsphere.mode.event.DataChangedEvent.Type; import org.apache.shardingsphere.mode.manager.ContextManager; +import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleItem; import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleNodePath; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,6 +31,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.sql.SQLException; +import static org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; @@ -50,7 +52,7 @@ class RuleConfigurationChangedHandlerTest { @Test void assertHandleWithInvalidPath() throws SQLException { - handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/foo_rule", "foo", Type.ADDED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture", "foo", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).alter(any(), eq(0)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).drop(any()); } @@ -62,13 +64,6 @@ class RuleConfigurationChangedHandlerTest { verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).drop(any()); } - @Test - void assertHandleWithPathNotFound() throws SQLException { - handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/active_version", "0", Type.ADDED)); - verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).alter(any(), eq(0)); - verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).drop(any()); - } - @Test void assertHandleWithIgnoreType() throws SQLException { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version", "foo", Type.IGNORED)); @@ -79,36 +74,42 @@ class RuleConfigurationChangedHandlerTest { @Test void assertHandleWithNamedRuleItemAdded() throws SQLException { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version", "0", Type.ADDED)); - verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(any(DatabaseRuleNodePath.class), eq(0)); + verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()) + .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("named", "foo_rule_item"))), eq(0)); } @Test void assertHandleWithNamedRuleItemAltered() throws SQLException { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version", "0", Type.UPDATED)); - verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(any(DatabaseRuleNodePath.class), eq(0)); + verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()) + .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("named", "foo_rule_item"))), eq(0)); } @Test void assertHandleWithNamedRuleItemDropped() throws SQLException { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version", "0", Type.DELETED)); - verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).drop(any(DatabaseRuleNodePath.class)); + verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()) + .drop(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("named", "foo_rule_item")))); } @Test void assertHandleWithUniqueRuleItemAdded() throws SQLException { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0", Type.ADDED)); - verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(any(DatabaseRuleNodePath.class), eq(0)); + verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()) + .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique"))), eq(0)); } @Test void assertHandleWithUniqueRuleItemAltered() throws SQLException { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0", Type.UPDATED)); - verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(any(DatabaseRuleNodePath.class), eq(0)); + verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()) + .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique"))), eq(0)); } @Test void assertHandleWithUniqueRuleItemDropped() throws SQLException { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "foo", Type.DELETED)); - verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).drop(any(DatabaseRuleNodePath.class)); + verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()) + .drop(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique")))); } }