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

Reply via email to