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 9ef4014a76d Optimize unLock of LockPersistService in cluster mode 
(#20836)
9ef4014a76d is described below

commit 9ef4014a76d27b13bc512172d7a755a80ed45de7
Author: gin <[email protected]>
AuthorDate: Wed Sep 7 13:32:58 2022 +0800

    Optimize unLock of LockPersistService in cluster mode (#20836)
    
    * Optimize unLock of LockPersistService in cluster mode
    
    * Fixed
---
 .../spring/namespace/fixture/FixtureClusterPersistRepository.java  | 4 ++++
 .../main/java/org/apache/shardingsphere/mode/lock/LockKeyUtil.java | 4 +++-
 .../manager/cluster/coordinator/ClusterLockPersistService.java     | 3 +--
 .../coordinator/fixture/ClusterPersistRepositoryFixture.java       | 4 ++++
 .../process/ProcessListClusterPersistRepositoryFixture.java        | 4 ++++
 .../mode/repository/cluster/ClusterPersistRepository.java          | 7 +++++++
 .../mode/repository/cluster/etcd/EtcdRepository.java               | 5 +++++
 .../repository/cluster/zookeeper/CuratorZookeeperRepository.java   | 5 +++++
 .../cluster/zookeeper/lock/ZookeeperInternalLockHolder.java        | 4 ++--
 .../proxy/fixture/ClusterPersistRepositoryFixture.java             | 4 ++++
 .../driver/fixture/TestClusterPersistRepository.java               | 4 ++++
 11 files changed, 43 insertions(+), 5 deletions(-)

diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/fixture/FixtureClusterPersistRepository.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/fixture/FixtureClusterPersistRepository.java
index 8965a88b945..c8d2271b656 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/fixture/FixtureClusterPersistRepository.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/fixture/FixtureClusterPersistRepository.java
@@ -73,6 +73,10 @@ public final class FixtureClusterPersistRepository 
implements ClusterPersistRepo
         return false;
     }
     
+    @Override
+    public void deleteLock(final String lockKey) {
+    }
+    
     @Override
     public void close() {
         registryData.clear();
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/lock/LockKeyUtil.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/lock/LockKeyUtil.java
index a2cc9b7ef61..361fe74c495 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/lock/LockKeyUtil.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/lock/LockKeyUtil.java
@@ -30,6 +30,8 @@ public final class LockKeyUtil {
     
     private static final String LOCKS_NODE_EXCLUSIVE = "exclusive";
     
+    private static final String LOCKS_LEASES_NODE = "leases";
+    
     /**
      * Generate exclusive lock key.
      *
@@ -47,6 +49,6 @@ public final class LockKeyUtil {
      * @return locks name
      */
     public static String generateLockKeyLeases(final String lockKey) {
-        return lockKey + "/leases";
+        return lockKey + PATH_DELIMITER + LOCKS_LEASES_NODE;
     }
 }
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/ClusterLockPersistService.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterLockPersistService.java
index 6f7dd10dd6a..0038991cb28 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterLockPersistService.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterLockPersistService.java
@@ -20,7 +20,6 @@ package 
org.apache.shardingsphere.mode.manager.cluster.coordinator;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.lock.LockDefinition;
 import org.apache.shardingsphere.mode.lock.LockPersistService;
-import org.apache.shardingsphere.mode.lock.LockKeyUtil;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 
 /**
@@ -38,6 +37,6 @@ public final class ClusterLockPersistService implements 
LockPersistService {
     
     @Override
     public void unlock(final LockDefinition lockDefinition) {
-        
repository.delete(LockKeyUtil.generateLockKeyLeases(lockDefinition.getLockKey()));
+        repository.deleteLock(lockDefinition.getLockKey());
     }
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/fixture/ClusterPersistRepositoryFixture.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/fixture/ClusterPersistRepositoryFixture.java
index 60a4434143b..f75a1d1f8fe 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/fixture/ClusterPersistRepositoryFixture.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/fixture/ClusterPersistRepositoryFixture.java
@@ -65,6 +65,10 @@ public final class ClusterPersistRepositoryFixture 
implements ClusterPersistRepo
         return false;
     }
     
+    @Override
+    public void deleteLock(final String lockKey) {
+    }
+    
     @Override
     public void close() {
     }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/ProcessListClusterPersistRepositoryFixture.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/ProcessListClusterPersistRepositoryFix
 [...]
index 397b22a33e4..316e430290f 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/ProcessListClusterPersistRepositoryFixture.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/ProcessListClusterPersistRepositoryFixture.java
@@ -72,6 +72,10 @@ public final class 
ProcessListClusterPersistRepositoryFixture implements Cluster
         return false;
     }
     
+    @Override
+    public void deleteLock(final String lockKey) {
+    }
+    
     @Override
     public void close() {
         REGISTRY_DATA.clear();
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/ClusterPersistRepository.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/ClusterPer
 [...]
index 1c34f3ff762..fdb705a1358 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/ClusterPersistRepository.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/ClusterPersistRepository.java
@@ -57,6 +57,13 @@ public interface ClusterPersistRepository extends 
PersistRepository {
      */
     boolean persistLock(String lockKey, long timeoutMillis);
     
+    /**
+     * Delete lock.
+     *
+     * @param lockKey lock key
+     */
+    void deleteLock(String lockKey);
+    
     /**
      * Watch key or path of governance server.
      *
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/EtcdRepository.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mo
 [...]
index 2b1c0d09514..80e1e0b7d07 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/EtcdRepository.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/EtcdRepository.java
@@ -148,6 +148,11 @@ public final class EtcdRepository implements 
ClusterPersistRepository {
         return 
etcdInternalLockHolder.getInternalLock(lockKey).tryLock(timeoutMillis);
     }
     
+    @Override
+    public void deleteLock(final String lockKey) {
+        etcdInternalLockHolder.getInternalLock(lockKey).unlock();
+    }
+    
     @Override
     public void close() {
         client.close();
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepository.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-prov
 [...]
index 49b62d1b7ba..1bed75c04fe 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepository.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepository.java
@@ -276,6 +276,11 @@ public final class CuratorZookeeperRepository implements 
ClusterPersistRepositor
         return 
internalLockHolder.getInternalLock(lockKey).tryLock(timeoutMillis);
     }
     
+    @Override
+    public void deleteLock(final String lockKey) {
+        internalLockHolder.getInternalLock(lockKey).unlock();
+    }
+    
     @Override
     public void close() {
         caches.values().forEach(CuratorCache::close);
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/lock/ZookeeperInternalLockHolder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repositor
 [...]
index 387e5aed748..acd982fd301 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/lock/ZookeeperInternalLockHolder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-repository/shardingsphere-cluster-mode-repository-provider/shardingsphere-cluster-mode-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/lock/ZookeeperInternalLockHolder.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.mode.repository.cluster.zookeeper.lock;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.curator.framework.CuratorFramework;
-import org.apache.curator.framework.recipes.locks.InterProcessSemaphoreMutex;
+import org.apache.curator.framework.recipes.locks.InterProcessMutex;
 import org.apache.shardingsphere.mode.repository.cluster.lock.InternalLock;
 import 
org.apache.shardingsphere.mode.repository.cluster.lock.InternalLockHolder;
 
@@ -41,7 +41,7 @@ public final class ZookeeperInternalLockHolder implements 
InternalLockHolder {
     public synchronized InternalLock getInternalLock(final String lockKey) {
         ZookeeperInternalLock result = locks.get(lockKey);
         if (Objects.isNull(result)) {
-            result = new ZookeeperInternalLock(new 
InterProcessSemaphoreMutex(client, lockKey));
+            result = new ZookeeperInternalLock(new InterProcessMutex(client, 
lockKey));
             locks.put(lockKey, result);
         }
         return result;
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/ClusterPersistRepositoryFixture.java
 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/ClusterPersistRepositoryFixture.java
index 02f07bf1991..36e49a6d25b 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/ClusterPersistRepositoryFixture.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/ClusterPersistRepositoryFixture.java
@@ -71,6 +71,10 @@ public final class ClusterPersistRepositoryFixture 
implements ClusterPersistRepo
         return false;
     }
     
+    @Override
+    public void deleteLock(final String lockKey) {
+    }
+    
     @Override
     public void close() {
         REGISTRY_DATA.clear();
diff --git 
a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/java/org/apache/shardingsphere/driver/fixture/TestClusterPersistRepository.java
 
b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/java/org/apache/shardingsphere/driver/fixture/TestClusterPersistRepository.java
index 09bb93cc64b..6f92392097c 100644
--- 
a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/java/org/apache/shardingsphere/driver/fixture/TestClusterPersistRepository.java
+++ 
b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/java/org/apache/shardingsphere/driver/fixture/TestClusterPersistRepository.java
@@ -73,6 +73,10 @@ public final class TestClusterPersistRepository implements 
ClusterPersistReposit
         return false;
     }
     
+    @Override
+    public void deleteLock(final String lockKey) {
+    }
+    
     @Override
     public void close() {
         registryData.clear();

Reply via email to