You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/04/21 09:57:46 UTC

[shardingsphere] branch master updated: Remove default time out for lock (#16984)

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

zhaojinchao 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 4b75a849012 Remove default time out for lock (#16984)
4b75a849012 is described below

commit 4b75a849012cb709050aa01514cf686c7830977d
Author: gin <ja...@163.com>
AuthorDate: Thu Apr 21 17:57:27 2022 +0800

    Remove default time out for lock (#16984)
---
 .../infra/lock/ShardingSphereLock.java             | 11 ++-------
 .../lock/ShardingSphereDistributeGlobalLock.java   | 28 ++++++++++++----------
 .../lock/ShardingSphereNonReentrantLock.java       |  5 ----
 .../lock/ShardingSphereNonReentrantLock.java       |  5 ----
 4 files changed, 17 insertions(+), 32 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereLock.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereLock.java
index 373d9ec7c8c..0d127cc7b1b 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereLock.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereLock.java
@@ -34,10 +34,10 @@ public interface ShardingSphereLock {
      * Try to lock with time out.
      * 
      * @param lockName lock name
-     * @param timeout the maximum time in milliseconds to acquire lock
+     * @param timeoutMillis the maximum time in milliseconds to acquire lock
      * @return true if get the lock, false if not
      */
-    boolean tryLock(String lockName, long timeout);
+    boolean tryLock(String lockName, long timeoutMillis);
     
     /**
      * Release lock.
@@ -53,11 +53,4 @@ public interface ShardingSphereLock {
      * @return true if locked, false if not
      */
     boolean isLocked(String lockName);
-    
-    /**
-     * Get default lock time out milliseconds.
-     * 
-     * @return default lock time out milliseconds
-     */
-    long getDefaultTimeOut();
 }
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/ShardingSphereDistributeGlobalLock.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/ShardingSphereDistributeGlobalLock.java
index 5912a011e25..138e99afea4 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/ShardingSphereDistributeGlobalLock.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/ShardingSphereDistributeGlobalLock.java
@@ -41,9 +41,11 @@ public final class ShardingSphereDistributeGlobalLock implements ShardingSphereG
     
     private static final int CHECK_ACK_INTERVAL_MILLISECONDS = 1000;
     
-    private static final long DEFAULT_TRY_LOCK_TIMEOUT_MILLISECONDS = 3 * 60 * 1000;
+    private static final long MAX_TRY_LOCK_TIMEOUT_MILLISECONDS = 3 * 60 * 1000;
     
-    private static final long DEFAULT_REGISTRY_TIMEOUT_MILLISECONDS = 2 * 100;
+    private static final long MIN_TRY_LOCK_TIMEOUT_MILLISECONDS = 200;
+    
+    private static final long DEFAULT_REGISTRY_TIMEOUT_MILLISECONDS = 50;
     
     private final LockRegistryService lockService;
     
@@ -59,18 +61,23 @@ public final class ShardingSphereDistributeGlobalLock implements ShardingSphereG
     
     @Override
     public boolean tryLock(final String lockName) {
-        return innerTryLock(lockName, DEFAULT_TRY_LOCK_TIMEOUT_MILLISECONDS);
+        return innerTryLock(lockName, MAX_TRY_LOCK_TIMEOUT_MILLISECONDS);
     }
     
     @Override
-    public boolean tryLock(final String lockName, final long timeout) {
-        return innerTryLock(lockName, timeout);
+    public boolean tryLock(final String lockName, final long timeoutMillis) {
+        return innerTryLock(lockName, timeoutMillis);
     }
     
-    private boolean innerTryLock(final String lockName, final long timeout) {
+    private synchronized boolean innerTryLock(final String lockName, final long timeout) {
+        long actualTimeout = Math.max(timeout, MIN_TRY_LOCK_TIMEOUT_MILLISECONDS);
+        boolean isAcquired = acquireToken();
+        if (!isAcquired) {
+            return false;
+        }
         try {
-            if (acquireToken() && synchronizedLockState.compareAndSet(LockState.UNLOCKED, LockState.LOCKING) && isOwner.compareAndSet(false, true)) {
-                return acquire(lockName, timeout) ? synchronizedLockState.compareAndSet(LockState.LOCKING, LockState.LOCKED)
+            if (synchronizedLockState.compareAndSet(LockState.UNLOCKED, LockState.LOCKING) && isOwner.compareAndSet(false, true)) {
+                return acquire(lockName, actualTimeout) ? synchronizedLockState.compareAndSet(LockState.LOCKING, LockState.LOCKED)
                         : isOwner.compareAndSet(true, false) && synchronizedLockState.compareAndSet(LockState.LOCKING, LockState.UNLOCKED);
             }
             log.debug("innerTryLock locking, lockName={}", lockName);
@@ -167,11 +174,6 @@ public final class ShardingSphereDistributeGlobalLock implements ShardingSphereG
         return true;
     }
     
-    @Override
-    public long getDefaultTimeOut() {
-        return DEFAULT_TRY_LOCK_TIMEOUT_MILLISECONDS;
-    }
-    
     @Override
     public void ackLock(final String lockName, final String lockedInstanceId) {
         if (!isOwner.get() && LockState.UNLOCKED == synchronizedLockState.get()) {
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/ShardingSphereNonReentrantLock.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/ShardingSphereNonReentrantLock.java
index 594b4e00893..ee865e11e46 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/ShardingSphereNonReentrantLock.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/ShardingSphereNonReentrantLock.java
@@ -72,9 +72,4 @@ public final class ShardingSphereNonReentrantLock implements ShardingSphereLock
     public boolean isLocked(final String lockName) {
         return locked;
     }
-    
-    @Override
-    public long getDefaultTimeOut() {
-        return DEFAULT_TRY_LOCK_TIMEOUT_MILLISECONDS;
-    }
 }
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/ShardingSphereNonReentrantLock.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/ShardingSphereNonReentrantLock.java
index 7225c8911d4..b7f919891d7 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/ShardingSphereNonReentrantLock.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/ShardingSphereNonReentrantLock.java
@@ -72,9 +72,4 @@ public final class ShardingSphereNonReentrantLock implements ShardingSphereLock
     public boolean isLocked(final String lockName) {
         return locked;
     }
-    
-    @Override
-    public long getDefaultTimeOut() {
-        return DEFAULT_TRY_LOCK_TIMEOUT_MILLISECONDS;
-    }
 }