This is an automated email from the ASF dual-hosted git repository. zhonghongsheng 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 a7d9ad3 Release lock supports different nodes (#16482) a7d9ad3 is described below commit a7d9ad3d02324a7db963b8a1d716069444030467 Author: gin <jacky7...@163.com> AuthorDate: Wed Mar 30 11:18:09 2022 +0800 Release lock supports different nodes (#16482) --- .../infra/lock/ShardingSphereGlobalLock.java | 7 +++++++ .../coordinator/future/lock/DistributeLockContext.java | 8 ++++++++ .../future/lock/ShardingSphereDistributeGlobalLock.java | 17 ++++++++++++----- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereGlobalLock.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereGlobalLock.java index b8c5ce2..ac2b240 100644 --- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereGlobalLock.java +++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereGlobalLock.java @@ -44,4 +44,11 @@ public interface ShardingSphereGlobalLock extends ShardingSphereLock { * @param instanceId instance id */ void addLockedInstance(String instanceId); + + /** + * Release locked state. + * + * @param lockName lock name + */ + void releaseLockedState(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/future/lock/DistributeLockContext.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/lock/DistributeLockContext.java index fdbc3e7..4033762 100644 --- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/lock/DistributeLockContext.java +++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/lock/DistributeLockContext.java @@ -54,6 +54,9 @@ public final class DistributeLockContext implements LockContext { @Override public synchronized Optional<ShardingSphereLock> getSchemaLock(final String schemaName) { + if (null == schemaName) { + return Optional.empty(); + } ShardingSphereGlobalLock result = globalLocks.get(schemaName); if (null == result) { result = crateGlobalLock(instanceContext.getInstance().getInstanceDefinition().getInstanceId().getId()); @@ -130,6 +133,11 @@ public final class DistributeLockContext implements LockContext { String schema = event.getSchema(); String ownerInstanceId = event.getOwnerInstanceId(); if (isSameInstanceId(ownerInstanceId)) { + ShardingSphereGlobalLock shardingSphereGlobalLock = globalLocks.get(schema); + if (null == shardingSphereGlobalLock) { + return; + } + shardingSphereGlobalLock.releaseLockedState(schema); globalLocks.remove(schema); return; } 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/future/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/future/lock/ShardingSphereDistributeGlobalLock.java index 3b4d136..0b58847 100644 --- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/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/future/lock/ShardingSphereDistributeGlobalLock.java @@ -158,11 +158,6 @@ public final class ShardingSphereDistributeGlobalLock implements ShardingSphereG } @Override - public void addLockedInstance(final String lockedInstanceId) { - lockedInstances.add(ownerInstanceId); - } - - @Override public void ackLock(final String lockName, final String lockedInstanceId) { lockService.ackLock(GlobalLockNode.generateSchemaAckLockName(lockName, lockedInstanceId), lockedInstanceId); lockedInstances.add(lockedInstanceId); @@ -174,4 +169,16 @@ public final class ShardingSphereDistributeGlobalLock implements ShardingSphereG lockedInstances.remove(lockedInstanceId); synchronizedLockState.compareAndSet(LockState.LOCKED, LockState.UNLOCKED); } + + @Override + public void addLockedInstance(final String lockedInstanceId) { + lockedInstances.add(ownerInstanceId); + } + + @Override + public void releaseLockedState(final String lockName) { + if (isLocked(lockName)) { + synchronizedLockState.compareAndSet(LockState.LOCKED, LockState.UNLOCKED); + } + } }