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