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

Reply via email to