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 24914595701 Refactor ShowProcessListTriggerNodePath and
KillProcessHandler (#34761)
24914595701 is described below
commit 249145957011f9403229bdd472721895dd2e42e3
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Feb 23 18:02:55 2025 +0800
Refactor ShowProcessListTriggerNodePath and KillProcessHandler (#34761)
* Refactor ShowProcessListTriggerNodePath and KillProcessHandler
* Refactor ShowProcessListTriggerNodePath and KillProcessHandler
---
.../process/KillProcessTriggerNodePath.java | 24 ++++++++++++++++++++++
.../process/ShowProcessListTriggerNodePath.java | 24 ++++++++++++++++++++++
.../root/DatabaseRuleRootNodePathTest.java | 2 +-
.../process/KillProcessTriggerNodePathTest.java | 23 +++++++++++++++++++++
.../ShowProcessListTriggerNodePathTest.java | 23 +++++++++++++++++++++
.../handler/global/type/KillProcessHandler.java | 14 ++++---------
.../global/type/ShowProcessListHandler.java | 23 +++++++--------------
7 files changed, 106 insertions(+), 27 deletions(-)
diff --git
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
index ae5415aea37..55410769f03 100644
---
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
+++
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePath.java
@@ -21,6 +21,8 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.mode.node.path.NodePath;
import org.apache.shardingsphere.mode.node.path.NodePathEntity;
+import org.apache.shardingsphere.mode.node.path.NodePathPattern;
+import org.apache.shardingsphere.mode.node.path.NodePathSearchCriteria;
/**
* Kill process trigger node path.
@@ -31,4 +33,26 @@ import
org.apache.shardingsphere.mode.node.path.NodePathEntity;
public final class KillProcessTriggerNodePath implements NodePath {
private final InstanceProcessNodeValue instanceProcess;
+
+ public KillProcessTriggerNodePath() {
+ this(new InstanceProcessNodeValue(NodePathPattern.IDENTIFIER,
NodePathPattern.IDENTIFIER));
+ }
+
+ /**
+ * Create instance ID search criteria.
+ *
+ * @return created search criteria
+ */
+ public static NodePathSearchCriteria createInstanceIdSearchCriteria() {
+ return new NodePathSearchCriteria(new KillProcessTriggerNodePath(),
false, false, 1);
+ }
+
+ /**
+ * Create process ID search criteria.
+ *
+ * @return created search criteria
+ */
+ public static NodePathSearchCriteria createProcessIdSearchCriteria() {
+ return new NodePathSearchCriteria(new KillProcessTriggerNodePath(),
false, false, 2);
+ }
}
diff --git
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePath.java
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePath.java
index bc9d9c3b63b..5243b40e4d6 100644
---
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePath.java
+++
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePath.java
@@ -21,6 +21,8 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.mode.node.path.NodePath;
import org.apache.shardingsphere.mode.node.path.NodePathEntity;
+import org.apache.shardingsphere.mode.node.path.NodePathPattern;
+import org.apache.shardingsphere.mode.node.path.NodePathSearchCriteria;
/**
* Show process list trigger node path.
@@ -31,4 +33,26 @@ import
org.apache.shardingsphere.mode.node.path.NodePathEntity;
public final class ShowProcessListTriggerNodePath implements NodePath {
private final InstanceProcessNodeValue instanceProcess;
+
+ public ShowProcessListTriggerNodePath() {
+ this(new InstanceProcessNodeValue(NodePathPattern.IDENTIFIER,
NodePathPattern.IDENTIFIER));
+ }
+
+ /**
+ * Create instance ID search criteria.
+ *
+ * @return created search criteria
+ */
+ public static NodePathSearchCriteria createInstanceIdSearchCriteria() {
+ return new NodePathSearchCriteria(new
ShowProcessListTriggerNodePath(), false, false, 1);
+ }
+
+ /**
+ * Create process ID search criteria.
+ *
+ * @return created search criteria
+ */
+ public static NodePathSearchCriteria createProcessIdSearchCriteria() {
+ return new NodePathSearchCriteria(new
ShowProcessListTriggerNodePath(), false, false, 2);
+ }
}
diff --git
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/database/root/DatabaseRuleRootNodePathTest.java
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/database/root/DatabaseRuleRootNodePathTest.java
index fdca2c8d113..e3852933904 100644
---
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/database/root/DatabaseRuleRootNodePathTest.java
+++
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/database/root/DatabaseRuleRootNodePathTest.java
@@ -30,7 +30,7 @@ class DatabaseRuleRootNodePathTest {
@Test
void assertGetRuleNodePrefix() {
- assertThat(nodePath.getNodePrefix(),
is("/metadata/([\\w\\-]+)/rules/foo/"));
+ assertThat(nodePath.getNodePrefix(),
is("/metadata/([\\w-]+)/rules/foo/"));
}
@Test
diff --git
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePathTest.java
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePathTest.java
index 967683a9d95..a7f91b32ad3 100644
---
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePathTest.java
+++
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/KillProcessTriggerNodePathTest.java
@@ -18,10 +18,15 @@
package org.apache.shardingsphere.mode.node.path.node.compute.process;
import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
+import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
import org.junit.jupiter.api.Test;
+import java.util.Optional;
+
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
class KillProcessTriggerNodePathTest {
@@ -31,4 +36,22 @@ class KillProcessTriggerNodePathTest {
assertThat(NodePathGenerator.toPath(new KillProcessTriggerNodePath(new
InstanceProcessNodeValue("foo_instance_id", "foo_process_id")), false),
is("/nodes/compute_nodes/kill_process_trigger/foo_instance_id:foo_process_id"));
}
+
+ @Test
+ void assertCreateInstanceIdSearchCriteria() {
+
assertThat(NodePathSearcher.find("/nodes/compute_nodes/kill_process_trigger/foo_instance_id:foo_process_id",
+ KillProcessTriggerNodePath.createInstanceIdSearchCriteria()),
is(Optional.of("foo_instance_id")));
+
assertFalse(NodePathSearcher.find("/nodes/compute_nodes/kill_process_trigger/foo_instance_id",
KillProcessTriggerNodePath.createInstanceIdSearchCriteria()).isPresent());
+
assertTrue(NodePathSearcher.isMatchedPath("/nodes/compute_nodes/kill_process_trigger/foo_instance_id:foo_process_id",
KillProcessTriggerNodePath.createInstanceIdSearchCriteria()));
+
assertFalse(NodePathSearcher.isMatchedPath("/nodes/compute_nodes/kill_process_trigger/foo_instance_id",
KillProcessTriggerNodePath.createInstanceIdSearchCriteria()));
+ }
+
+ @Test
+ void assertCreateProcessIdSearchCriteria() {
+
assertThat(NodePathSearcher.find("/nodes/compute_nodes/kill_process_trigger/foo_instance_id:foo_process_id",
+ KillProcessTriggerNodePath.createProcessIdSearchCriteria()),
is(Optional.of("foo_process_id")));
+
assertFalse(NodePathSearcher.find("/nodes/compute_nodes/kill_process_trigger/foo_instance_id",
KillProcessTriggerNodePath.createProcessIdSearchCriteria()).isPresent());
+
assertTrue(NodePathSearcher.isMatchedPath("/nodes/compute_nodes/kill_process_trigger/foo_instance_id:foo_process_id",
KillProcessTriggerNodePath.createProcessIdSearchCriteria()));
+
assertFalse(NodePathSearcher.isMatchedPath("/nodes/compute_nodes/kill_process_trigger/foo_instance_id",
KillProcessTriggerNodePath.createProcessIdSearchCriteria()));
+ }
}
diff --git
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePathTest.java
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePathTest.java
index 4b8adafc26c..b3a04ed990c 100644
---
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePathTest.java
+++
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/node/compute/process/ShowProcessListTriggerNodePathTest.java
@@ -18,10 +18,15 @@
package org.apache.shardingsphere.mode.node.path.node.compute.process;
import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
+import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
import org.junit.jupiter.api.Test;
+import java.util.Optional;
+
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
class ShowProcessListTriggerNodePathTest {
@@ -31,4 +36,22 @@ class ShowProcessListTriggerNodePathTest {
assertThat(NodePathGenerator.toPath(new
ShowProcessListTriggerNodePath(new InstanceProcessNodeValue("foo_instance_id",
"foo_process_id")), false),
is("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id:foo_process_id"));
}
+
+ @Test
+ void assertCreateInstanceIdSearchCriteria() {
+
assertThat(NodePathSearcher.find("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id:foo_process_id",
+
ShowProcessListTriggerNodePath.createInstanceIdSearchCriteria()),
is(Optional.of("foo_instance_id")));
+
assertFalse(NodePathSearcher.find("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id",
ShowProcessListTriggerNodePath.createInstanceIdSearchCriteria()).isPresent());
+
assertTrue(NodePathSearcher.isMatchedPath("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id:foo_process_id",
ShowProcessListTriggerNodePath.createInstanceIdSearchCriteria()));
+
assertFalse(NodePathSearcher.isMatchedPath("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id",
ShowProcessListTriggerNodePath.createInstanceIdSearchCriteria()));
+ }
+
+ @Test
+ void assertCreateProcessIdSearchCriteria() {
+
assertThat(NodePathSearcher.find("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id:foo_process_id",
+
ShowProcessListTriggerNodePath.createProcessIdSearchCriteria()),
is(Optional.of("foo_process_id")));
+
assertFalse(NodePathSearcher.find("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id",
ShowProcessListTriggerNodePath.createProcessIdSearchCriteria()).isPresent());
+
assertTrue(NodePathSearcher.isMatchedPath("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id:foo_process_id",
ShowProcessListTriggerNodePath.createProcessIdSearchCriteria()));
+
assertFalse(NodePathSearcher.isMatchedPath("/nodes/compute_nodes/show_process_list_trigger/foo_instance_id",
ShowProcessListTriggerNodePath.createProcessIdSearchCriteria()));
+ }
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/KillProcessHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/KillProcessHandler.java
index 4fa74ddc993..a182f7f2e42 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/KillProcessHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/KillProcessHandler.java
@@ -26,13 +26,12 @@ import
org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.global.GlobalDataChangedEventHandler;
import
org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.process.ClusterProcessPersistCoordinator;
import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
+import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
import
org.apache.shardingsphere.mode.node.path.node.compute.process.KillProcessTriggerNodePath;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collection;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
/**
* Kill process handler.
@@ -51,12 +50,11 @@ public final class KillProcessHandler implements
GlobalDataChangedEventHandler {
@Override
public void handle(final ContextManager contextManager, final
DataChangedEvent event) {
- Matcher matcher = getKillProcessTriggerMatcher(event);
- if (!matcher.find()) {
+ if (!NodePathSearcher.isMatchedPath(event.getKey(),
KillProcessTriggerNodePath.createProcessIdSearchCriteria())) {
return;
}
- String instanceId = matcher.group(1);
- String processId = matcher.group(2);
+ String instanceId = NodePathSearcher.find(event.getKey(),
KillProcessTriggerNodePath.createInstanceIdSearchCriteria()).orElse("");
+ String processId = NodePathSearcher.find(event.getKey(),
KillProcessTriggerNodePath.createProcessIdSearchCriteria()).orElse("");
if (Type.ADDED == event.getType()) {
if
(!instanceId.equals(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getId()))
{
return;
@@ -71,8 +69,4 @@ public final class KillProcessHandler implements
GlobalDataChangedEventHandler {
ProcessOperationLockRegistry.getInstance().notify(processId);
}
}
-
- private Matcher getKillProcessTriggerMatcher(final DataChangedEvent event)
{
- return Pattern.compile(NodePathGenerator.toPath(new
KillProcessTriggerNodePath(null), false) + "/([\\S]+):([\\S]+)$",
Pattern.CASE_INSENSITIVE).matcher(event.getKey());
- }
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ShowProcessListHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ShowProcessListHandler.java
index af8b4863f85..f3981b9330d 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ShowProcessListHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/ShowProcessListHandler.java
@@ -24,12 +24,11 @@ import
org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.global.GlobalDataChangedEventHandler;
import
org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.process.ClusterProcessPersistCoordinator;
import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
+import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
import
org.apache.shardingsphere.mode.node.path.node.compute.process.ShowProcessListTriggerNodePath;
import java.util.Arrays;
import java.util.Collection;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
/**
* Show process list handler.
@@ -48,25 +47,17 @@ public final class ShowProcessListHandler implements
GlobalDataChangedEventHandl
@Override
public void handle(final ContextManager contextManager, final
DataChangedEvent event) {
- Matcher matcher = getShowProcessListTriggerMatcher(event);
- if (matcher.find()) {
- handle(contextManager, event, matcher);
+ if (!NodePathSearcher.isMatchedPath(event.getKey(),
ShowProcessListTriggerNodePath.createProcessIdSearchCriteria())) {
+ return;
}
- }
-
- private void handle(final ContextManager contextManager, final
DataChangedEvent event, final Matcher matcher) {
- String instanceId = matcher.group(1);
- String taskId = matcher.group(2);
+ String instanceId = NodePathSearcher.find(event.getKey(),
ShowProcessListTriggerNodePath.createInstanceIdSearchCriteria()).orElse("");
+ String processId = NodePathSearcher.find(event.getKey(),
ShowProcessListTriggerNodePath.createProcessIdSearchCriteria()).orElse("");
if (Type.ADDED == event.getType()) {
if
(instanceId.equals(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getId()))
{
- new
ClusterProcessPersistCoordinator(contextManager.getPersistServiceFacade().getRepository()).reportLocalProcesses(instanceId,
taskId);
+ new
ClusterProcessPersistCoordinator(contextManager.getPersistServiceFacade().getRepository()).reportLocalProcesses(instanceId,
processId);
}
} else if (Type.DELETED == event.getType()) {
- ProcessOperationLockRegistry.getInstance().notify(taskId);
+ ProcessOperationLockRegistry.getInstance().notify(processId);
}
}
-
- private Matcher getShowProcessListTriggerMatcher(final DataChangedEvent
event) {
- return Pattern.compile(NodePathGenerator.toPath(new
ShowProcessListTriggerNodePath(null), false) + "/([\\S]+):([\\S]+)$",
Pattern.CASE_INSENSITIVE).matcher(event.getKey());
- }
}