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 <[email protected]>
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"))));
}
}