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