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/12 10:09:46 UTC

[shardingsphere] branch master updated: Optimize lock path for zookeeper (#16764)

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 56e8169c352 Optimize lock path for zookeeper (#16764)
56e8169c352 is described below

commit 56e8169c352d964c6e34659acc111ae8e924c2a8
Author: gin <ja...@163.com>
AuthorDate: Tue Apr 12 18:09:29 2022 +0800

    Optimize lock path for zookeeper (#16764)
---
 .../coordinator/lock/DistributeLockContext.java    |  2 +-
 .../lock/ShardingSphereDistributeGlobalLock.java   |  8 +-
 .../cluster/coordinator/lock/service/LockNode.java | 94 +++++++++++-----------
 .../lock/service/LockRegistryService.java          | 14 ++--
 .../lock/watcher/GlobalAckChangedWatcher.java      |  5 +-
 .../lock/watcher/GlobalLocksChangedWatcher.java    |  4 +-
 .../coordinator/lock/service/LockNodeTest.java     | 47 ++++++-----
 .../lock/service/LockRegistryServiceTest.java      | 14 ++--
 .../lock/watcher/GlobalAckChangedWatcherTest.java  |  4 +-
 .../watcher/GlobalLocksChangedWatcherTest.java     |  4 +-
 10 files changed, 103 insertions(+), 93 deletions(-)

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/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/lock/DistributeLockContext.java
index 22f2b9fbbfc..be4e643ecd9 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/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/lock/DistributeLockContext.java
@@ -65,7 +65,7 @@ public final class DistributeLockContext implements LockContext {
     }
     
     private void synchronizeGlobalLock() {
-        Collection<String> allGlobalLock = lockRegistryService.getAllGlobalLock();
+        Collection<String> allGlobalLock = lockRegistryService.getAllGlobalSchemaLocks();
         if (allGlobalLock.isEmpty()) {
             lockRegistryService.initGlobalLockRoot();
             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/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 a4cc84cfd1d..ef8d4af6ced 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
@@ -93,7 +93,7 @@ public final class ShardingSphereDistributeGlobalLock implements ShardingSphereG
         }
         long count = 0;
         do {
-            if (lockService.tryGlobalLock(LockNode.generateSchemaLockName(lockName, ownerInstanceId))) {
+            if (lockService.tryGlobalLock(LockNode.generateGlobalSchemaLocksName(lockName, ownerInstanceId))) {
                 if (isAckOK(timeout - count)) {
                     boolean result = synchronizedLockState.compareAndSet(LockState.UNLOCKED, LockState.LOCKED);
                     log.info("innerTryLock, result={}, lockName={}, lockState={}, globalLock.hashCode={}", result, lockName, synchronizedLockState.get(), hashCode());
@@ -134,7 +134,7 @@ public final class ShardingSphereDistributeGlobalLock implements ShardingSphereG
             log.info("releaseLock, state is not locked, ignore, lockName={}", lockName);
             return;
         }
-        lockService.releaseGlobalLock(LockNode.generateSchemaLockName(lockName, ownerInstanceId));
+        lockService.releaseGlobalLock(LockNode.generateGlobalSchemaLocksName(lockName, ownerInstanceId));
         String currentInstanceId = getCurrentInstanceId();
         if (isOwnerInstanceId(currentInstanceId)) {
             lockedInstances.remove(ownerInstanceId);
@@ -169,13 +169,13 @@ public final class ShardingSphereDistributeGlobalLock implements ShardingSphereG
     
     @Override
     public void ackLock(final String lockName, final String lockedInstanceId) {
-        lockService.ackLock(LockNode.generateSchemaAckLockName(lockName, lockedInstanceId), lockedInstanceId);
+        lockService.ackLock(LockNode.generateGlobalSchemaAckLockName(lockName, lockedInstanceId), lockedInstanceId);
         lockedInstances.add(lockedInstanceId);
     }
     
     @Override
     public void releaseAckLock(final String lockName, final String lockedInstanceId) {
-        lockService.releaseAckLock(LockNode.generateSchemaAckLockName(lockName, lockedInstanceId));
+        lockService.releaseAckLock(LockNode.generateGlobalSchemaAckLockName(lockName, lockedInstanceId));
         lockedInstances.remove(lockedInstanceId);
         synchronizedLockState.compareAndSet(LockState.LOCKED, LockState.UNLOCKED);
     }
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/service/LockNode.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/service/LockNode.java
index b1c50563c28..503bcf64674 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/service/LockNode.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/service/LockNode.java
@@ -34,104 +34,108 @@ public final class LockNode {
     
     private static final String LOCK_ROOT = "lock";
     
-    private static final String LOCK_SCOPE = "global";
+    private static final String LOCK_SCOPE_STANDARD = "standard";
+    
+    private static final String LOCK_SCOPE_GLOBAL = "global";
+    
+    private static final String LOCK_LEVEL_SCHEMA = "schema";
     
     private static final String LOCKS_NODE = "locks";
     
     private static final String LOCKED_ACK_NODE = "ack";
     
     /**
-     * Get lock root node path.
+     * Get standard locks node path.
      *
-     * @return lock root node path
+     * @return standard locks node path
      */
-    public static String getLockRootNodePath() {
-        return Joiner.on("/").join("", LOCK_ROOT, LOCKS_NODE);
+    public static String getStandardLocksNodePath() {
+        return Joiner.on("/").join("", LOCK_ROOT, LOCK_SCOPE_STANDARD, LOCKS_NODE);
     }
     
     /**
-     * Get lock node path.
+     * Get global schema locks node path.
      *
-     * @param lockName lock name
-     * @return lock node path
+     * @return global schema lock node path
      */
-    public static String getLockNodePath(final String lockName) {
-        return Joiner.on("/").join("", LOCK_ROOT, LOCKS_NODE, lockName);
+    public static String getGlobalSchemaLocksNodePath() {
+        return Joiner.on("/").join("", LOCK_ROOT, LOCK_SCOPE_GLOBAL, LOCK_LEVEL_SCHEMA, LOCKS_NODE);
     }
     
     /**
-     * Get locks node path.
+     * Get global schema locked ack node path.
      *
-     * @return locks node path
+     * @return global schema locked ack node path
      */
-    public static String getGlobalLocksNodePath() {
-        return Joiner.on("/").join("", LOCK_ROOT, LOCK_SCOPE, LOCKS_NODE);
+    public static String getGlobalSchemaLockedAckNodePath() {
+        return Joiner.on("/").join("", LOCK_ROOT, LOCK_SCOPE_GLOBAL, LOCK_LEVEL_SCHEMA, LOCKED_ACK_NODE);
     }
     
     /**
-     * Get ack node path.
+     * Generate standard lock name.
      *
-     * @return ack node path
+     * @param lockName lock name
+     * @return standard lock name
      */
-    public static String getGlobalAckNodePath() {
-        return Joiner.on("/").join("", LOCK_ROOT, LOCK_SCOPE, LOCKED_ACK_NODE);
+    public static String generateStandardLockName(final String lockName) {
+        return getStandardLocksNodePath() + "/" + lockName;
     }
     
     /**
-     * Generate schema lock name.
+     * Generate global schema locks name.
      *
      * @param schema schema
      * @param instanceId instance id
-     * @return schema lock name
+     * @return global schema locks name
      */
-    public static String generateSchemaLockName(final String schema, final String instanceId) {
-        return getGlobalLocksNodePath() + "/" + LockNodeUtil.generateSchemaLockName(schema, instanceId);
+    public static String generateGlobalSchemaLocksName(final String schema, final String instanceId) {
+        return getGlobalSchemaLocksNodePath() + "/" + LockNodeUtil.generateSchemaLockName(schema, instanceId);
     }
     
     /**
-     * Generate schema ack lock name.
+     * Generate global schema ack lock name.
      *
      * @param schema schema
      * @param lockedInstanceId locked instance id
-     * @return schema ack lock name
+     * @return global schema ack lock name
      */
-    public static String generateSchemaAckLockName(final String schema, final String lockedInstanceId) {
-        return getGlobalAckNodePath() + "/" + LockNodeUtil.generateSchemaLockName(schema, lockedInstanceId);
+    public static String generateGlobalSchemaAckLockName(final String schema, final String lockedInstanceId) {
+        return getGlobalSchemaLockedAckNodePath() + "/" + LockNodeUtil.generateSchemaLockName(schema, lockedInstanceId);
     }
     
     /**
-     * Get lock name by lock node path.
+     * Generate global schema Lock released node path.
      *
-     * @param lockNodePath lock node path
-     * @return lock name
+     * @param schema schema
+     * @param instanceId instance id
+     * @return global schema Lock released name
      */
-    public static Optional<String> getLockName(final String lockNodePath) {
-        Pattern pattern = Pattern.compile(getLockRootNodePath() + "/" + "(.+)/(.+)$", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(lockNodePath);
-        return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
+    public static String generateGlobalSchemaLockReleasedNodePath(final String schema, final String instanceId) {
+        return getGlobalSchemaLocksNodePath() + "/" + LockNodeUtil.generateSchemaLockName(schema, instanceId) + "/leases";
     }
     
     /**
-     * Get locked key name by locks node path.
+     * Parse global schema Locks node path.
      *
-     * @param locksNodePath locks node path
-     * @return schema name
+     * @param nodePath locks node path
+     * @return global schema locked node path
      */
-    public static Optional<String> getLockedName(final String locksNodePath) {
-        Pattern pattern = Pattern.compile(getGlobalLocksNodePath() + "/(.+)$", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(locksNodePath);
+    public static Optional<String> parseGlobalSchemaLocksNodePath(final String nodePath) {
+        // TODO "(.+)/leases/(.+)$"
+        Pattern pattern = Pattern.compile(getGlobalSchemaLocksNodePath() + "/(.+)$", Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(nodePath);
         return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
     }
     
     /**
-     * Get ack locked key name by ack node path.
+     * Parse global schema locked ack node path.
      *
-     * @param ackNodePath ack node path
-     * @return locked instance id
+     * @param nodePath locked ack node path
+     * @return global schema locked ack node path
      */
-    public static Optional<String> getAckLockedName(final String ackNodePath) {
-        Pattern pattern = Pattern.compile(getGlobalAckNodePath() + "/(.+)$", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(ackNodePath);
+    public static Optional<String> parseGlobalSchemaLockedAckNodePath(final String nodePath) {
+        Pattern pattern = Pattern.compile(getGlobalSchemaLockedAckNodePath() + "/(.+)$", Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(nodePath);
         return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
     }
 }
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/service/LockRegistryService.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/service/LockRegistryService.java
index 2b03322d075..f72c9fd101d 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/service/LockRegistryService.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/service/LockRegistryService.java
@@ -38,9 +38,9 @@ public final class LockRegistryService {
      * Init global lock root patch.
      */
     public void initGlobalLockRoot() {
-        repository.persist(LockNode.getLockRootNodePath(), "");
-        repository.persist(LockNode.getGlobalLocksNodePath(), "");
-        repository.persist(LockNode.getGlobalAckNodePath(), "");
+        repository.persist(LockNode.getStandardLocksNodePath(), "");
+        repository.persist(LockNode.getGlobalSchemaLocksNodePath(), "");
+        repository.persist(LockNode.getGlobalSchemaLockedAckNodePath(), "");
     }
     
     /**
@@ -48,8 +48,8 @@ public final class LockRegistryService {
      *
      * @return all global locks
      */
-    public Collection<String> getAllGlobalLock() {
-        return repository.getChildrenKeys(LockNode.getGlobalLocksNodePath());
+    public Collection<String> getAllGlobalSchemaLocks() {
+        return repository.getChildrenKeys(LockNode.getGlobalSchemaLocksNodePath());
     }
     
     /**
@@ -103,7 +103,7 @@ public final class LockRegistryService {
      * @return true if get the lock, false if not
      */
     public boolean tryLock(final String lockName, final long timeoutMilliseconds) {
-        return repository.tryLock(LockNode.getLockNodePath(lockName), timeoutMilliseconds, TimeUnit.MILLISECONDS);
+        return repository.tryLock(LockNode.generateStandardLockName(lockName), timeoutMilliseconds, TimeUnit.MILLISECONDS);
     }
     
     /**
@@ -112,6 +112,6 @@ public final class LockRegistryService {
      * @param lockName lock name
      */
     public void releaseLock(final String lockName) {
-        repository.releaseLock(LockNode.getLockNodePath(lockName));
+        repository.releaseLock(LockNode.generateStandardLockName(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/lock/watcher/GlobalAckChangedWatcher.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/watcher/GlobalAckChangedWatcher.java
index 9b77fb1eaf6..04699cf1470 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/watcher/GlobalAckChangedWatcher.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/watcher/GlobalAckChangedWatcher.java
@@ -37,7 +37,7 @@ public final class GlobalAckChangedWatcher implements GovernanceWatcher<Governan
     
     @Override
     public Collection<String> getWatchingKeys() {
-        return Collections.singleton(LockNode.getGlobalAckNodePath());
+        return Collections.singleton(LockNode.getGlobalSchemaLockedAckNodePath());
     }
     
     @Override
@@ -47,8 +47,7 @@ public final class GlobalAckChangedWatcher implements GovernanceWatcher<Governan
     
     @Override
     public Optional<GovernanceEvent> createGovernanceEvent(final DataChangedEvent event) {
-        String key = event.getKey();
-        Optional<String> ackLockedName = LockNode.getAckLockedName(key);
+        Optional<String> ackLockedName = LockNode.parseGlobalSchemaLockedAckNodePath(event.getKey());
         if (ackLockedName.isPresent()) {
             return handleGlobalAckEvent(event.getType(), ackLockedName.get());
         }
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/watcher/GlobalLocksChangedWatcher.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/watcher/GlobalLocksChangedWatcher.java
index 33b9791704b..7641ed26c53 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/watcher/GlobalLocksChangedWatcher.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/watcher/GlobalLocksChangedWatcher.java
@@ -37,7 +37,7 @@ public final class GlobalLocksChangedWatcher implements GovernanceWatcher<Govern
     
     @Override
     public Collection<String> getWatchingKeys() {
-        return Collections.singleton(LockNode.getGlobalLocksNodePath());
+        return Collections.singleton(LockNode.getGlobalSchemaLocksNodePath());
     }
     
     @Override
@@ -47,7 +47,7 @@ public final class GlobalLocksChangedWatcher implements GovernanceWatcher<Govern
     
     @Override
     public Optional<GovernanceEvent> createGovernanceEvent(final DataChangedEvent event) {
-        Optional<String> lockedName = LockNode.getLockedName(event.getKey());
+        Optional<String> lockedName = LockNode.parseGlobalSchemaLocksNodePath(event.getKey());
         if (lockedName.isPresent()) {
             return handleGlobalLocksEvent(event.getType(), lockedName.get());
         }
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/lock/service/LockNodeTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeTest.java
index be8fa720bed..9670e236e59 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeTest.java
@@ -28,46 +28,53 @@ import static org.junit.Assert.assertTrue;
 public final class LockNodeTest {
     
     @Test
-    public void assertGetLockNodePath() {
-        assertThat(LockNode.getLockNodePath("test"), is("/lock/locks/test"));
+    public void assertGetStandardLockedNodePath() {
+        assertThat(LockNode.getStandardLocksNodePath(), is("/lock/standard/locks"));
     }
     
     @Test
-    public void assertGetLockName() {
-        assertThat(LockNode.getLockName("/lock/locks/sharding_db.test/_c_c2d-lock-00000").orElse(null), is("sharding_db.test"));
+    public void assertGetGlobalSchemaLocksNodePath() {
+        assertThat(LockNode.getGlobalSchemaLocksNodePath(), is("/lock/global/schema/locks"));
     }
     
     @Test
-    public void assertGetLockedKey() {
-        Optional<String> lockName = LockNode.getLockedName("key/lock/global/locks/schema-127.0.0.1@3307");
-        assertTrue(lockName.isPresent());
-        assertThat(lockName.get(), is("schema-127.0.0.1@3307"));
+    public void assertGetGlobalSchemaLockedAckNodePath() {
+        assertThat(LockNode.getGlobalSchemaLockedAckNodePath(), is("/lock/global/schema/ack"));
     }
     
     @Test
-    public void assertGetAckLockedKey() {
-        Optional<String> lockName = LockNode.getAckLockedName("/lock/global/ack/schema-127.0.0.1@3308");
-        assertTrue(lockName.isPresent());
-        assertThat(lockName.get(), is("schema-127.0.0.1@3308"));
+    public void assertGenerateStandardLockName() {
+        assertThat(LockNode.generateStandardLockName("lockName"), is("/lock/standard/locks/lockName"));
     }
     
     @Test
-    public void assertGetGlobalLocksNodePath() {
-        assertThat(LockNode.getGlobalLocksNodePath(), is("/lock/global/locks"));
+    public void assertGenerateGlobalSchemaLocksName() {
+        assertThat(LockNode.generateGlobalSchemaLocksName("schema", "127.0.0.1@3307"), is("/lock/global/schema/locks/schema-127.0.0.1@3307"));
     }
     
     @Test
-    public void assertGenerateSchemaAckLockName() {
-        assertThat(LockNode.generateSchemaAckLockName("schema", "lockedInstanceId"), is("/lock/global/ack/schema-lockedInstanceId"));
+    public void assertGenerateGlobalSchemaAckLockName() {
+        assertThat(LockNode.generateGlobalSchemaAckLockName("schema", "127.0.0.1@3307"), is("/lock/global/schema/ack/schema-127.0.0.1@3307"));
     }
     
     @Test
-    public void assertGetGlobalAckNodePath() {
-        assertThat(LockNode.getGlobalAckNodePath(), is("/lock/global/ack"));
+    public void assertGenerateGlobalSchemaLockReleasedNodePath() {
+        assertThat(LockNode.generateGlobalSchemaLockReleasedNodePath("schema", "127.0.0.1@3307"), is("/lock/global/schema/locks/schema-127.0.0.1@3307/leases"));
     }
     
     @Test
-    public void assertGenerateSchemaLockName() {
-        assertThat(LockNode.generateSchemaLockName("schema", "instanceId"), is("/lock/global/locks/schema-instanceId"));
+    public void assertParseGlobalSchemaLocksNodePath() {
+        String nodePath = "/lock/global/schema/locks/schema-127.0.0.1@3307";
+        Optional<String> globalSchemaLocksNodePath = LockNode.parseGlobalSchemaLocksNodePath(nodePath);
+        assertTrue(globalSchemaLocksNodePath.isPresent());
+        assertThat(globalSchemaLocksNodePath.get(), is("schema-127.0.0.1@3307"));
+    }
+    
+    @Test
+    public void assertParseGlobalSchemaLockedAckNodePath() {
+        String nodePath = "/lock/global/schema/ack/schema-127.0.0.1@3307";
+        Optional<String> globalSchemaLockedAckNodePath = LockNode.parseGlobalSchemaLockedAckNodePath(nodePath);
+        assertTrue(globalSchemaLockedAckNodePath.isPresent());
+        assertThat(globalSchemaLockedAckNodePath.get(), is("schema-127.0.0.1@3307"));
     }
 }
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/lock/service/LockRegistryServiceTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockRegistryServiceTest.java
index aa70715106c..3c182fef594 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockRegistryServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockRegistryServiceTest.java
@@ -48,38 +48,38 @@ public final class LockRegistryServiceTest {
     @Test
     public void assertTryLock() {
         lockRegistryService.tryLock("test", 50L);
-        verify(clusterPersistRepository).tryLock(LockNode.getLockNodePath("test"), 50L, TimeUnit.MILLISECONDS);
+        verify(clusterPersistRepository).tryLock(LockNode.generateStandardLockName("test"), 50L, TimeUnit.MILLISECONDS);
     }
     
     @Test
     public void assertReleaseLock() {
         lockRegistryService.releaseLock("test");
-        verify(clusterPersistRepository).releaseLock(LockNode.getLockNodePath("test"));
+        verify(clusterPersistRepository).releaseLock(LockNode.generateStandardLockName("test"));
     }
     
     @Test
     public void assertGetAllGlobalLock() {
-        lockRegistryService.getAllGlobalLock();
-        verify(clusterPersistRepository).getChildrenKeys(LockNode.getGlobalLocksNodePath());
+        lockRegistryService.getAllGlobalSchemaLocks();
+        verify(clusterPersistRepository).getChildrenKeys(LockNode.getGlobalSchemaLocksNodePath());
     }
     
     @Test
     public void assertReleaseGlobalLock() {
-        String schemaLockName = LockNode.generateSchemaLockName("schema", "127.0.0.1@3307");
+        String schemaLockName = LockNode.generateGlobalSchemaLocksName("schema", "127.0.0.1@3307");
         lockRegistryService.releaseGlobalLock(schemaLockName);
         verify(clusterPersistRepository).delete(schemaLockName);
     }
     
     @Test
     public void assertAckLock() {
-        String schemaAckLock = LockNode.generateSchemaAckLockName("schema", "127.0.0.1@3307");
+        String schemaAckLock = LockNode.generateGlobalSchemaAckLockName("schema", "127.0.0.1@3307");
         lockRegistryService.ackLock(schemaAckLock, "127.0.0.1@3307");
         verify(clusterPersistRepository).persistEphemeral(schemaAckLock, "127.0.0.1@3307");
     }
     
     @Test
     public void assertReleaseAckLock() {
-        String schemaAckLock = LockNode.generateSchemaAckLockName("schema", "127.0.0.1@3307");
+        String schemaAckLock = LockNode.generateGlobalSchemaAckLockName("schema", "127.0.0.1@3307");
         lockRegistryService.releaseAckLock(schemaAckLock);
         verify(clusterPersistRepository).delete(schemaAckLock);
     }
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/lock/watcher/GlobalAckChangedWatcherTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/watcher/GlobalAckChangedWatcherTest.java
index d1b3d6ea80a..f3388594086 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/watcher/GlobalAckChangedWatcherTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/watcher/GlobalAckChangedWatcherTest.java
@@ -33,13 +33,13 @@ public final class GlobalAckChangedWatcherTest {
     
     @Test
     public void assertCreateGovernanceEvent() {
-        DataChangedEvent addDataChangedEvent = new DataChangedEvent("/lock/global/ack/schema-127.0.0.1@3307", "127.0.0.1@3307", DataChangedEvent.Type.ADDED);
+        DataChangedEvent addDataChangedEvent = new DataChangedEvent("/lock/global/schema/ack/schema-127.0.0.1@3307", "127.0.0.1@3307", DataChangedEvent.Type.ADDED);
         Optional<GovernanceEvent> add = new GlobalAckChangedWatcher().createGovernanceEvent(addDataChangedEvent);
         assertTrue(add.isPresent());
         GovernanceEvent addEvent = add.get();
         assertTrue(addEvent instanceof AckLockedEvent);
         assertThat(((AckLockedEvent) addEvent).getLockName(), is("schema-127.0.0.1@3307"));
-        DataChangedEvent deleteDataChangedEvent = new DataChangedEvent("/lock/global/ack/schema-127.0.0.1@3307", "127.0.0.1@3307", DataChangedEvent.Type.DELETED);
+        DataChangedEvent deleteDataChangedEvent = new DataChangedEvent("/lock/global/schema/ack/schema-127.0.0.1@3307", "127.0.0.1@3307", DataChangedEvent.Type.DELETED);
         Optional<GovernanceEvent> delete = new GlobalAckChangedWatcher().createGovernanceEvent(deleteDataChangedEvent);
         assertTrue(delete.isPresent());
         GovernanceEvent deleteEvent = delete.get();
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/lock/watcher/GlobalLocksChangedWatcherTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/watcher/GlobalLocksChangedWatcherTest.java
index 298cc4a93dd..bff355232ff 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/watcher/GlobalLocksChangedWatcherTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/watcher/GlobalLocksChangedWatcherTest.java
@@ -33,13 +33,13 @@ public final class GlobalLocksChangedWatcherTest {
     
     @Test
     public void assertCreateGovernanceEvent() {
-        DataChangedEvent addDataChangedEvent = new DataChangedEvent("/lock/global/locks/schema-127.0.0.1@3307", "127.0.0.1@3307", DataChangedEvent.Type.ADDED);
+        DataChangedEvent addDataChangedEvent = new DataChangedEvent("/lock/global/schema/locks/schema-127.0.0.1@3307", "127.0.0.1@3307", DataChangedEvent.Type.ADDED);
         Optional<GovernanceEvent> add = new GlobalLocksChangedWatcher().createGovernanceEvent(addDataChangedEvent);
         assertTrue(add.isPresent());
         GovernanceEvent addEvent = add.get();
         assertTrue(addEvent instanceof LockedEvent);
         assertThat(((LockedEvent) addEvent).getLockName(), is("schema-127.0.0.1@3307"));
-        DataChangedEvent deleteDataChangedEvent = new DataChangedEvent("/lock/global/locks/schema-127.0.0.1@3307", "127.0.0.1@3307", DataChangedEvent.Type.DELETED);
+        DataChangedEvent deleteDataChangedEvent = new DataChangedEvent("/lock/global/schema/locks/schema-127.0.0.1@3307", "127.0.0.1@3307", DataChangedEvent.Type.DELETED);
         Optional<GovernanceEvent> delete = new GlobalLocksChangedWatcher().createGovernanceEvent(deleteDataChangedEvent);
         assertTrue(delete.isPresent());
         GovernanceEvent deleteEvent = delete.get();