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 f9348e91950 Refactor ExclusiveOperatorContext (#36778)
f9348e91950 is described below

commit f9348e9195070dfeaa80c8a837a438aac704a023
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Oct 3 13:02:36 2025 +0800

    Refactor ExclusiveOperatorContext (#36778)
    
    * Refactor ExclusiveOperatorContext
    
    * Refactor ExclusiveOperatorContext
    
    * Refactor ExclusiveOperatorContext
---
 .../mode/exclusive/ExclusiveOperatorContext.java      |  8 ++++----
 .../mode/exclusive/ExclusiveOperatorEngine.java       | 19 ++++++++++---------
 .../{ => callback}/ExclusiveOperationCallback.java    |  2 +-
 .../ExclusiveOperationVoidCallback.java               |  2 +-
 .../exclusive/ClusterExclusiveOperatorContext.java    | 12 ++++--------
 .../exclusive/StandaloneExclusiveOperatorContext.java |  9 ++-------
 6 files changed, 22 insertions(+), 30 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperatorContext.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperatorContext.java
index 823a18a9239..670f25dea76 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperatorContext.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperatorContext.java
@@ -25,16 +25,16 @@ public interface ExclusiveOperatorContext {
     /**
      * Start exclusive operation.
      *
-     * @param operation exclusive operation
+     * @param operationKey operation key
      * @param timeoutMillis timeout milliseconds
      * @return is started or not
      */
-    boolean start(ExclusiveOperation operation, long timeoutMillis);
+    boolean start(String operationKey, long timeoutMillis);
     
     /**
      * Stop exclusive operation.
      *
-     * @param operation exclusive operation
+     * @param operationKey operation key
      */
-    void stop(ExclusiveOperation operation);
+    void stop(String operationKey);
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperatorEngine.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperatorEngine.java
index b5748966fa1..decc05bbb2c 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperatorEngine.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperatorEngine.java
@@ -18,6 +18,10 @@
 package org.apache.shardingsphere.mode.exclusive;
 
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.mode.exclusive.callback.ExclusiveOperationCallback;
+import 
org.apache.shardingsphere.mode.exclusive.callback.ExclusiveOperationVoidCallback;
+import 
org.apache.shardingsphere.mode.node.path.engine.generator.NodePathGenerator;
+import 
org.apache.shardingsphere.mode.node.path.type.exclusive.ExclusiveOperationNodePath;
 
 import java.sql.SQLException;
 
@@ -27,7 +31,7 @@ import java.sql.SQLException;
 @RequiredArgsConstructor
 public final class ExclusiveOperatorEngine {
     
-    private final ExclusiveOperatorContext exclusiveOperatorContext;
+    private final ExclusiveOperatorContext context;
     
     /**
      * Operate with exclusive operation and void callback.
@@ -38,14 +42,10 @@ public final class ExclusiveOperatorEngine {
      * @throws SQLException SQL exception
      */
     public void operate(final ExclusiveOperation operation, final long 
timeoutMillis, final ExclusiveOperationVoidCallback voidCallback) throws 
SQLException {
-        operateWithResult(operation, timeoutMillis, 
asVoidCallback(voidCallback));
-    }
-    
-    private ExclusiveOperationCallback<Void> asVoidCallback(final 
ExclusiveOperationVoidCallback voidCallback) {
-        return () -> {
+        operateWithResult(operation, timeoutMillis, 
(ExclusiveOperationCallback<Void>) () -> {
             voidCallback.execute();
             return null;
-        };
+        });
     }
     
     /**
@@ -59,11 +59,12 @@ public final class ExclusiveOperatorEngine {
      * @throws SQLException SQL exception
      */
     public <T> T operateWithResult(final ExclusiveOperation operation, final 
long timeoutMillis, final ExclusiveOperationCallback<T> callback) throws 
SQLException {
-        if (exclusiveOperatorContext.start(operation, timeoutMillis)) {
+        String operationKey = NodePathGenerator.toPath(new 
ExclusiveOperationNodePath(operation.getName()));
+        if (context.start(operationKey, timeoutMillis)) {
             try {
                 return callback.execute();
             } finally {
-                exclusiveOperatorContext.stop(operation);
+                context.stop(operationKey);
             }
         }
         return null;
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperationCallback.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/callback/ExclusiveOperationCallback.java
similarity index 95%
rename from 
mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperationCallback.java
rename to 
mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/callback/ExclusiveOperationCallback.java
index 392b0979403..a151ab7a1d6 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperationCallback.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/callback/ExclusiveOperationCallback.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.exclusive;
+package org.apache.shardingsphere.mode.exclusive.callback;
 
 import java.sql.SQLException;
 
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperationVoidCallback.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/callback/ExclusiveOperationVoidCallback.java
similarity index 94%
rename from 
mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperationVoidCallback.java
rename to 
mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/callback/ExclusiveOperationVoidCallback.java
index ac3860612a9..c672425b15f 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/ExclusiveOperationVoidCallback.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exclusive/callback/ExclusiveOperationVoidCallback.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.exclusive;
+package org.apache.shardingsphere.mode.exclusive.callback;
 
 import java.sql.SQLException;
 
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/exclusive/ClusterExclusiveOperatorContext.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/exclusive/ClusterExclusiveOperatorContext.java
index 8faa9425682..d2e86d07bf4 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/exclusive/ClusterExclusiveOperatorContext.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/exclusive/ClusterExclusiveOperatorContext.java
@@ -18,10 +18,7 @@
 package org.apache.shardingsphere.mode.manager.cluster.exclusive;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.mode.exclusive.ExclusiveOperation;
 import org.apache.shardingsphere.mode.exclusive.ExclusiveOperatorContext;
-import 
org.apache.shardingsphere.mode.node.path.engine.generator.NodePathGenerator;
-import 
org.apache.shardingsphere.mode.node.path.type.exclusive.ExclusiveOperationNodePath;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import 
org.apache.shardingsphere.mode.repository.cluster.core.lock.DistributedLockHolder;
 
@@ -34,13 +31,12 @@ public final class ClusterExclusiveOperatorContext 
implements ExclusiveOperatorC
     private final ClusterPersistRepository repository;
     
     @Override
-    public boolean start(final ExclusiveOperation operation, final long 
timeoutMillis) {
-        return 
DistributedLockHolder.getDistributedLock(NodePathGenerator.toPath(new 
ExclusiveOperationNodePath(operation.getName())),
-                repository).tryLock(timeoutMillis);
+    public boolean start(final String operationKey, final long timeoutMillis) {
+        return DistributedLockHolder.getDistributedLock(operationKey, 
repository).tryLock(timeoutMillis);
     }
     
     @Override
-    public void stop(final ExclusiveOperation operation) {
-        DistributedLockHolder.getDistributedLock(NodePathGenerator.toPath(new 
ExclusiveOperationNodePath(operation.getName())), repository).unlock();
+    public void stop(final String operationKey) {
+        DistributedLockHolder.getDistributedLock(operationKey, 
repository).unlock();
     }
 }
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/exclusive/StandaloneExclusiveOperatorContext.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/exclusive/StandaloneExclusiveOperatorContext.java
index 299f120eece..680f3aa685e 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/exclusive/StandaloneExclusiveOperatorContext.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/exclusive/StandaloneExclusiveOperatorContext.java
@@ -17,10 +17,7 @@
 
 package org.apache.shardingsphere.mode.manager.standalone.exclusive;
 
-import org.apache.shardingsphere.mode.exclusive.ExclusiveOperation;
 import org.apache.shardingsphere.mode.exclusive.ExclusiveOperatorContext;
-import 
org.apache.shardingsphere.mode.node.path.engine.generator.NodePathGenerator;
-import 
org.apache.shardingsphere.mode.node.path.type.exclusive.ExclusiveOperationNodePath;
 import org.apache.shardingsphere.mode.retry.RetryExecutor;
 
 import java.util.Collection;
@@ -34,14 +31,12 @@ public final class StandaloneExclusiveOperatorContext 
implements ExclusiveOperat
     private final Collection<String> exclusiveOperationKeys = new 
CopyOnWriteArraySet<>();
     
     @Override
-    public boolean start(final ExclusiveOperation operation, final long 
timeoutMillis) {
-        String operationKey = NodePathGenerator.toPath(new 
ExclusiveOperationNodePath(operation.getName()));
+    public boolean start(final String operationKey, final long timeoutMillis) {
         return new RetryExecutor(timeoutMillis, 50L).execute(arg -> 
exclusiveOperationKeys.add(operationKey), null);
     }
     
     @Override
-    public void stop(final ExclusiveOperation operation) {
-        String operationKey = NodePathGenerator.toPath(new 
ExclusiveOperationNodePath(operation.getName()));
+    public void stop(final String operationKey) {
         exclusiveOperationKeys.remove(operationKey);
     }
 }

Reply via email to