This is an automated email from the ASF dual-hosted git repository.

menghaoran 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 37688743357 Remove sequence lock in distribute lock manager (#17940)
37688743357 is described below

commit 376887433572a9b409ddc6f1d8ad396cce600028
Author: gin <jacky7...@163.com>
AuthorDate: Wed May 25 17:49:27 2022 +0800

    Remove sequence lock in distribute lock manager (#17940)
---
 .../coordinator/lock/manager/DistributeLockManager.java | 17 ++---------------
 .../cluster/coordinator/lock/mutex/InterMutexLock.java  | 15 ++++++++++++++-
 .../lock/mutex/ShardingSphereDistributeMutexLock.java   | 15 +--------------
 .../lock/mutex/ShardingSphereInterMutexLockHolder.java  |  3 ++-
 4 files changed, 19 insertions(+), 31 deletions(-)

diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributeLockManager.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributeLockManager.java
index 24b3550d22a..c477d7f2c02 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributeLockManager.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributeLockManager.java
@@ -21,7 +21,6 @@ import com.google.common.base.Preconditions;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.ShardingSphereDistributeDatabaseLock;
-import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.InterReentrantMutexLock;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.ShardingSphereDistributeMutexLock;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.ShardingSphereInterMutexLockHolder;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
@@ -32,15 +31,12 @@ import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.Time
 @Slf4j
 public final class DistributeLockManager implements ShardingSphereLockManager {
     
-    private InterReentrantMutexLock sequencedLock;
-    
     private ShardingSphereDistributeMutexLock mutexLock;
     
     private ShardingSphereDistributeDatabaseLock databaseLock;
     
     @Override
     public void init(final ShardingSphereInterMutexLockHolder lockHolder) {
-        sequencedLock = 
lockHolder.getInterReentrantMutexLock("/lock/sequence");
         mutexLock = new ShardingSphereDistributeMutexLock(lockHolder);
         databaseLock = new ShardingSphereDistributeDatabaseLock(lockHolder);
     }
@@ -62,17 +58,8 @@ public final class DistributeLockManager implements 
ShardingSphereLockManager {
     
     private synchronized boolean innerDatabaseTryLock(final String 
databaseName, final long timeoutMilliseconds) {
         Preconditions.checkNotNull(databaseName, "Try Lock write for database 
args database name can not be null.");
-        if (!sequencedLock.tryLock(TimeoutMilliseconds.DEFAULT_REGISTRY)) {
-            log.debug("Distribute database lock acquire sequenced failed, 
database name: {}", databaseName);
-            return false;
-        }
-        try {
-            log.debug("Distribute database lock acquire sequenced success, 
database name: {}", databaseName);
-            return databaseLock.tryLock(databaseName, timeoutMilliseconds - 
TimeoutMilliseconds.DEFAULT_REGISTRY);
-        } finally {
-            sequencedLock.unlock();
-            log.debug("Distribute database lock release sequenced success, 
database name: {}", databaseName);
-        }
+        log.debug("Distribute database lock acquire sequenced success, 
database name: {}", databaseName);
+        return databaseLock.tryLock(databaseName, timeoutMilliseconds - 
TimeoutMilliseconds.DEFAULT_REGISTRY);
     }
     
     @Override
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/InterMutexLock.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/InterMutexLock.java
index a15ced4dae5..986953ba78a 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/InterMutexLock.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/InterMutexLock.java
@@ -40,6 +40,8 @@ public final class InterMutexLock implements MutexLock, 
LockAckAble {
     
     private final String lockName;
     
+    private final MutexLock sequence;
+    
     private final LockRegistryService lockService;
     
     private final ComputeNodeInstance currentInstance;
@@ -59,7 +61,18 @@ public final class InterMutexLock implements MutexLock, 
LockAckAble {
     
     @Override
     public boolean tryLock(final long timeoutMillis) {
-        return innerTryLock(lockName, Math.max(timeoutMillis, 
TimeoutMilliseconds.MIN_TRY_LOCK));
+        if (!sequence.tryLock(TimeoutMilliseconds.DEFAULT_REGISTRY)) {
+            log.debug("Inter mutex sequence lock acquire sequenced failed, 
lock name: {}", lockName);
+            return false;
+        }
+        try {
+            long timeoutMilliseconds = Math.max(timeoutMillis, 
TimeoutMilliseconds.MIN_TRY_LOCK);
+            log.debug("Inter mutex sequence lock acquire sequenced success, 
lock name: {}, timeout milliseconds: {}ms", lockName, timeoutMilliseconds);
+            return innerTryLock(lockName, timeoutMilliseconds);
+        } finally {
+            sequence.unlock();
+            log.debug("Inter mutex sequence lock release sequenced success, 
database name: {}", lockName);
+        }
     }
     
     private boolean innerTryLock(final String lockName, final long timeout) {
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereDistributeMutexLock.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereDistributeMutexLock.java
index 740c6d6a565..485b0a568fd 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereDistributeMutexLock.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereDistributeMutexLock.java
@@ -40,13 +40,10 @@ public final class ShardingSphereDistributeMutexLock 
implements ShardingSphereLo
     
     private final LockNodeService lockNodeService = 
LockNodeServiceFactory.getInstance().getLockNodeService(LockNodeType.MUTEX);
     
-    private final MutexLock sequenced;
-    
     private final ShardingSphereInterMutexLockHolder lockHolder;
     
     public ShardingSphereDistributeMutexLock(final 
ShardingSphereInterMutexLockHolder lockHolder) {
         this.lockHolder = lockHolder;
-        this.sequenced = 
lockHolder.getInterReentrantMutexLock(lockNodeService.getSequenceNodePath());
         ShardingSphereEventBus.getInstance().register(this);
         syncMutexLockStatus();
     }
@@ -66,17 +63,7 @@ public final class ShardingSphereDistributeMutexLock 
implements ShardingSphereLo
     }
     
     private boolean innerTryLock(final String lockName, final long 
timeoutMillis) {
-        if (!sequenced.tryLock(TimeoutMilliseconds.DEFAULT_REGISTRY)) {
-            log.debug("Distribute mutex lock acquire sequenced failed, lock 
name: {}", lockName);
-            return false;
-        }
-        try {
-            log.debug("Distribute mutex lock acquire sequenced success, lock 
name: {}", lockName);
-            return 
lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(lockName)).tryLock(timeoutMillis);
-        } finally {
-            sequenced.unlock();
-            log.debug("Distribute mutex lock release sequenced success, lock 
name: {}", lockName);
-        }
+        return 
lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(lockName)).tryLock(timeoutMillis);
     }
     
     private Optional<InterMutexLock> getInterMutexLock(final String lockName) {
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereInterMutexLockHolder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereInterMutexLockHolder.java
index 6319e081777..5462dafd294 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereInterMutexLockHolder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereInterMutexLockHolder.java
@@ -69,7 +69,8 @@ public final class ShardingSphereInterMutexLockHolder {
     }
     
     private InterMutexLock createInterMutexLock(final String locksName) {
-        return new InterMutexLock(locksName, mutexLockRegistryService, 
currentInstance, computeNodeInstances);
+        InterReentrantMutexLock interReentrantMutexLock = 
getInterReentrantMutexLock(locksName + "/sequence");
+        return new InterMutexLock(locksName, interReentrantMutexLock, 
mutexLockRegistryService, currentInstance, computeNodeInstances);
     }
     
     /**

Reply via email to