You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2022/06/08 13:51:27 UTC

[shardingsphere] branch master updated: Add LockStateContext for distributed lock (#18245)

This is an automated email from the ASF dual-hosted git repository.

menghaoran 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 8758e3fd651 Add LockStateContext for distributed lock (#18245)
8758e3fd651 is described below

commit 8758e3fd651e149cb1d132c3548701c5b15a2526
Author: gin <ja...@163.com>
AuthorDate: Wed Jun 8 21:51:20 2022 +0800

    Add LockStateContext for distributed lock (#18245)
---
 .../cluster/coordinator/RegistryCenter.java        |  2 +-
 .../lock/AbstractDistributedLockNodeService.java   | 59 --------------
 .../coordinator/lock/DistributedLockContext.java   |  5 ++
 .../cluster/coordinator/lock/LockNodeService.java  | 50 +++++++++---
 .../ShardingSphereDistributedDatabaseLock.java     | 29 +++++--
 .../database/node/DatabaseLockNodeService.java     | 11 +--
 .../watcher/DatabaseLockChangedWatcher.java        |  2 +-
 .../distributed/ShardingSphereDistributedLock.java | 24 +++---
 .../node/DistributedLockNodeService.java           | 11 +--
 .../watcher/DistributedLockChangedWatcher.java     |  5 +-
 ...a => ShardingSphereDistributedLockManager.java} | 19 +++--
 .../lock/manager/state/LockStateContext.java       | 91 ++++++++++++++++++++++
 .../manager/state/LockStateContextFactory.java}    | 33 ++++----
 .../state/ShardingSphereLockStateContext.java      | 76 ++++++++++++++++++
 .../coordinator/lock/mutex/InterMutexLock.java     |  2 +-
 .../mutex/ShardingSphereInterMutexLockHolder.java  | 68 +++++++++-------
 .../lock/{ => service}/LockNodeServiceFactory.java |  3 +-
 .../lock/{ => service}/LockRegistryService.java    |  2 +-
 .../lock/service/MutexLockRegistryService.java     |  1 -
 .../coordinator/lock/util/LockNodeUtil.java        | 10 +++
 ...rdinator.lock.manager.ShardingSphereLockManager |  2 +-
 ...oordinator.lock.manager.state.LockStateContext} |  2 +-
 .../database/node/DatabaseLockNodeServiceTest.java |  5 --
 .../node/DistributedLockNodeServiceTest.java       |  5 --
 ... ShardingSphereDistributedLockManagerTest.java} | 22 +++---
 .../{ => service}/LockNodeServiceFactoryTest.java  |  6 +-
 .../LockNodeServiceTest.java}                      | 13 +++-
 .../lock/service/MutexLockRegistryServiceTest.java |  1 -
 .../coordinator/lock/util/LockNodeUtilTest.java    | 10 ++-
 29 files changed, 377 insertions(+), 192 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/RegistryCenter.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/RegistryCenter.java
index 3d4b07c61d4..30b027b300a 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/RegistryCenter.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/RegistryCenter.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.mode.manager.cluster.coordinator;
 
 import lombok.Getter;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockRegistryService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.MutexLockRegistryService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceWatcherFactory;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.cache.subscriber.ScalingRegistrySubscriber;
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/AbstractDistributedLockNodeService.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/AbstractDistributedLockNodeService.java
deleted file mode 100644
index 8eb668f2386..00000000000
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/AbstractDistributedLockNodeService.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
-
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Abstract distributed lock node service.
- */
-public abstract class AbstractDistributedLockNodeService implements LockNodeService {
-    
-    @Override
-    public String getLocksNodePath() {
-        return PATH_DELIMITER + LOCK_ROOT + PATH_DELIMITER + getLockTypeName() + PATH_DELIMITER + LOCKS_NODE;
-    }
-    
-    @Override
-    public String generateLocksName(final String locksName) {
-        return getLocksNodePath() + "/" + locksName;
-    }
-    
-    @Override
-    public String generateAckLockName(final String lockName, final String lockedInstanceId) {
-        return getLocksNodePath() + "/" + lockName + "/" + LOCKED_ACK_NODE + "/" + lockedInstanceId;
-    }
-    
-    @Override
-    public Optional<String> parseLocksNodePath(final String nodePath) {
-        Pattern pattern = Pattern.compile(getLocksNodePath() + "/" + "(.+)/leases/(.+)$", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(nodePath);
-        return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
-    }
-    
-    @Override
-    public Optional<String> parseLocksAckNodePath(final String nodePath) {
-        Pattern pattern = Pattern.compile(getLocksNodePath() + "/" + "(.+)/ack/(.+)$", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(nodePath);
-        return matcher.find() ? Optional.of(matcher.group(1) + "#@#" + matcher.group(2)) : Optional.empty();
-    }
-    
-    protected abstract String getLockTypeName();
-}
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/DistributedLockContext.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/DistributedLockContext.java
index 87399fd5862..7af5951853b 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/DistributedLockContext.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/DistributedLockContext.java
@@ -93,4 +93,9 @@ public final class DistributedLockContext implements LockContext {
     public boolean isLocked(final String databaseName) {
         return lockManager.isLocked(databaseName);
     }
+    
+    @Override
+    public boolean isLocked(final String databaseName, final String schemaName) {
+        return lockManager.isLocked(databaseName, schemaName);
+    }
 }
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/LockNodeService.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/LockNodeService.java
index 6be188982f7..b25f69eb9c0 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/LockNodeService.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/LockNodeService.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
 
 import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * Lock node service.
@@ -34,19 +36,14 @@ public interface LockNodeService {
     
     String LOCKED_ACK_NODE = "ack";
     
-    /**
-     * Get sequence node path.
-     *
-     * @return sequence node path
-     */
-    String getSequenceNodePath();
-    
     /**
      * Get locks node path.
      *
      * @return locks node path
      */
-    String getLocksNodePath();
+    default String getLocksNodePath() {
+        return PATH_DELIMITER + LOCK_ROOT + PATH_DELIMITER + getLockTypeName() + PATH_DELIMITER + LOCKS_NODE;
+    }
     
     /**
      * Generate locks name.
@@ -54,7 +51,19 @@ public interface LockNodeService {
      * @param locksName locks name
      * @return locks name
      */
-    String generateLocksName(String locksName);
+    default String generateLocksName(String locksName) {
+        return getLocksNodePath() + "/" + locksName;
+    }
+    
+    /**
+     * Generate freeze lock name.
+     *
+     * @param lockName lock name
+     * @return freeze lock name
+     */
+    default String generateFreezeLockName(String lockName) {
+        return getLocksNodePath() + "/" + lockName + "/freeze";
+    }
     
     /**
      * Generate ack lock name.
@@ -63,7 +72,9 @@ public interface LockNodeService {
      * @param lockedInstanceId locked instance id
      * @return ack lock name
      */
-    String generateAckLockName(String lockName, String lockedInstanceId);
+    default String generateAckLockName(String lockName, String lockedInstanceId) {
+        return getLocksNodePath() + "/" + lockName + "/" + LOCKED_ACK_NODE + "/" + lockedInstanceId;
+    }
     
     /**
      * Parse Locks node path.
@@ -71,7 +82,11 @@ public interface LockNodeService {
      * @param nodePath locks node path
      * @return locked node path
      */
-    Optional<String> parseLocksNodePath(String nodePath);
+    default Optional<String> parseLocksNodePath(String nodePath) {
+        Pattern pattern = Pattern.compile(getLocksNodePath() + "/" + "(.+)/leases/(.+)$", Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(nodePath);
+        return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
+    }
     
     /**
      * Parse locks ack node path.
@@ -79,7 +94,11 @@ public interface LockNodeService {
      * @param nodePath node path
      * @return locks ack node path
      */
-    Optional<String> parseLocksAckNodePath(String nodePath);
+    default Optional<String> parseLocksAckNodePath(String nodePath) {
+        Pattern pattern = Pattern.compile(getLocksNodePath() + "/" + "(.+)/ack/(.+)$", Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(nodePath);
+        return matcher.find() ? Optional.of(matcher.group(1) + "#@#" + matcher.group(2)) : Optional.empty();
+    }
     
     /**
      * Get type.
@@ -87,4 +106,11 @@ public interface LockNodeService {
      * @return lock node type
      */
     LockNodeType getType();
+    
+    /**
+     * Get lock type name.
+     *
+     * @return type name
+     */
+    String getLockTypeName();
 }
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/database/ShardingSphereDistributedDatabaseLock.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/database/ShardingSphereDistributedDatabaseLock.java
index 00e8e927cd7..a7d70f1edac 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/database/ShardingSphereDistributedDatabaseLock.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/database/ShardingSphereDistributedDatabaseLock.java
@@ -21,7 +21,8 @@ import com.google.common.eventbus.Subscribe;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeServiceFactory;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseAckLockReleasedEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseAckLockedEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseLockReleasedEvent;
@@ -42,10 +43,13 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
     
     private final ShardingSphereInterMutexLockHolder lockHolder;
     
-    public ShardingSphereDistributedDatabaseLock(final ShardingSphereInterMutexLockHolder lockHolder) {
+    private final LockStateContext lockStateContext;
+    
+    public ShardingSphereDistributedDatabaseLock(final ShardingSphereInterMutexLockHolder lockHolder, final LockStateContext lockStateContext) {
         this.lockHolder = lockHolder;
+        this.lockStateContext = lockStateContext;
         ShardingSphereEventBus.getInstance().register(this);
-        lockHolder.synchronizeMutexLock(lockNodeService);
+        lockHolder.synchronizeLock(lockNodeService);
     }
     
     @Override
@@ -59,7 +63,11 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
     }
     
     private boolean innerTryLock(final String lockName, final long timeoutMillis) {
-        return lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(lockName)).tryLock(timeoutMillis);
+        if (lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(lockName)).tryLock(timeoutMillis)) {
+            lockStateContext.register(lockName);
+            return true;
+        }
+        return false;
     }
     
     private Optional<InterMutexLock> getInterMutexLock(final String lockName) {
@@ -68,7 +76,11 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
     
     @Override
     public void releaseLock(final String lockName) {
-        getInterMutexLock(lockName).ifPresent(InterMutexLock::unlock);
+        Optional<InterMutexLock> interMutexLock = getInterMutexLock(lockName);
+        if (interMutexLock.isPresent()) {
+            interMutexLock.get().unlock();
+            lockStateContext.unregister(lockName);
+        }
     }
     
     @Override
@@ -87,6 +99,7 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
         String lockedInstanceId = lockHolder.getCurrentInstanceId();
         InterMutexLock interMutexLock = lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(database));
         interMutexLock.ackLock(lockNodeService.generateAckLockName(database, lockedInstanceId), lockedInstanceId);
+        lockStateContext.register(database);
     }
     
     /**
@@ -98,7 +111,11 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
     public synchronized void lockReleased(final DatabaseLockReleasedEvent event) {
         String database = event.getDatabase();
         String lockedInstanceId = lockHolder.getCurrentInstanceId();
-        getInterMutexLock(database).ifPresent(mutexLock -> mutexLock.releaseAckLock(lockNodeService.generateAckLockName(database, lockedInstanceId), lockedInstanceId));
+        Optional<InterMutexLock> interMutexLock = getInterMutexLock(database);
+        if (interMutexLock.isPresent()) {
+            interMutexLock.get().releaseAckLock(lockNodeService.generateAckLockName(database, lockedInstanceId), lockedInstanceId);
+            lockStateContext.unregister(database);
+        }
     }
     
     /**
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/database/node/DatabaseLockNodeService.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/database/node/DatabaseLockNodeService.java
index b16904ba6c8..24afa280b8d 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/database/node/DatabaseLockNodeService.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/database/node/DatabaseLockNodeService.java
@@ -17,21 +17,16 @@
 
 package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.node;
 
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.AbstractDistributedLockNodeService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
 
 /**
  * Database lock node service.
  */
-public final class DatabaseLockNodeService extends AbstractDistributedLockNodeService {
+public final class DatabaseLockNodeService implements LockNodeService {
     
     @Override
-    public String getSequenceNodePath() {
-        return PATH_DELIMITER + LOCK_ROOT + PATH_DELIMITER + getLockTypeName() + PATH_DELIMITER + "sequence";
-    }
-    
-    @Override
-    protected String getLockTypeName() {
+    public String getLockTypeName() {
         return "database";
     }
     
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/database/watcher/DatabaseLockChangedWatcher.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/database/watcher/DatabaseLockChangedWatcher.java
index f2f8df1b679..ccc33f3c0c3 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/database/watcher/DatabaseLockChangedWatcher.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/database/watcher/DatabaseLockChangedWatcher.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.watcher;
 
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeServiceFactory;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseAckLockReleasedEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseAckLockedEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseLockReleasedEvent;
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/distributed/ShardingSphereDistributedLock.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/distributed/ShardingSphereDistributedLock.java
index 053fd620464..02fed75e65c 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/distributed/ShardingSphereDistributedLock.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/distributed/ShardingSphereDistributedLock.java
@@ -22,7 +22,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeServiceFactory;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.InterMutexLock;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.ShardingSphereInterMutexLockHolder;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.event.DistributedAckLockReleasedEvent;
@@ -47,11 +47,11 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
     public ShardingSphereDistributedLock(final ShardingSphereInterMutexLockHolder lockHolder) {
         this.lockHolder = lockHolder;
         ShardingSphereEventBus.getInstance().register(this);
-        syncMutexLockStatus();
+        syncDistributedLockStatus();
     }
     
-    private void syncMutexLockStatus() {
-        lockHolder.synchronizeMutexLock(lockNodeService);
+    private void syncDistributedLockStatus() {
+        lockHolder.synchronizeLock(lockNodeService);
     }
     
     @Override
@@ -83,9 +83,9 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
     }
     
     /**
-     * Mutex locked.
+     * Distributed locked.
      *
-     * @param event mutex locked event
+     * @param event distributed locked event
      */
     @Subscribe
     public synchronized void locked(final DistributedLockedEvent event) {
@@ -96,9 +96,9 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
     }
     
     /**
-     * Mutex lock released.
+     * Distributed lock released.
      *
-     * @param event mutex lock released event
+     * @param event distributed lock released event
      */
     @Subscribe
     public synchronized void lockReleased(final DistributedLockReleasedEvent event) {
@@ -108,9 +108,9 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
     }
     
     /**
-     * Mutex ack locked.
+     * Distributed ack locked.
      *
-     * @param event mutex ack locked event
+     * @param event distributed ack locked event
      */
     @Subscribe
     public synchronized void ackLocked(final DistributedAckLockedEvent event) {
@@ -118,9 +118,9 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
     }
     
     /**
-     * Mutex ack lock released.
+     * Distributed ack lock released.
      *
-     * @param event mutex ack lock released event
+     * @param event distributed ack lock released event
      */
     @Subscribe
     public synchronized void ackLockReleased(final DistributedAckLockReleasedEvent event) {
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/distributed/node/DistributedLockNodeService.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/distributed/node/DistributedLockNodeService.java
index 20c1f4212dc..0f0c10600eb 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/distributed/node/DistributedLockNodeService.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/distributed/node/DistributedLockNodeService.java
@@ -17,21 +17,16 @@
 
 package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.node;
 
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.AbstractDistributedLockNodeService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
 
 /**
  * Distributed lock node service.
  */
-public final class DistributedLockNodeService extends AbstractDistributedLockNodeService {
+public final class DistributedLockNodeService implements LockNodeService {
     
     @Override
-    public String getSequenceNodePath() {
-        return PATH_DELIMITER + LOCK_ROOT + PATH_DELIMITER + getLockTypeName() + PATH_DELIMITER + "sequence";
-    }
-    
-    @Override
-    protected String getLockTypeName() {
+    public String getLockTypeName() {
         return "distributed";
     }
     
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/distributed/watcher/DistributedLockChangedWatcher.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/distributed/watcher/DistributedLockChangedWatcher.java
index 43bcca30126..541c6e7f9b6 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/distributed/watcher/DistributedLockChangedWatcher.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/distributed/watcher/DistributedLockChangedWatcher.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.watcher;
 
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeServiceFactory;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.event.DistributedAckLockReleasedEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.event.DistributedAckLockedEvent;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.event.DistributedLockReleasedEvent;
@@ -34,6 +34,9 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Optional;
 
+/**
+ * Distributed lock changed watcher.
+ */
 public final class DistributedLockChangedWatcher implements GovernanceWatcher<GovernanceEvent> {
     
     private final LockNodeService lockNode = LockNodeServiceFactory.getInstance().getLockNodeService(LockNodeType.DISTRIBUTED);
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/manager/DistributedLockManager.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/manager/ShardingSphereDistributedLockManager.java
similarity index 82%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributedLockManager.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManager.java
index 049c2fdd096..012dc6ece1f 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/manager/DistributedLockManager.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/manager/ShardingSphereDistributedLockManager.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.infra.lock.LockMode;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.ShardingSphereDistributedDatabaseLock;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.ShardingSphereDistributedLock;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContextFactory;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.ShardingSphereInterMutexLockHolder;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
 
@@ -30,16 +31,16 @@ import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.Time
  * Distribute lock manager.
  */
 @Slf4j
-public final class DistributedLockManager implements ShardingSphereLockManager {
+public final class ShardingSphereDistributedLockManager implements ShardingSphereLockManager {
     
-    private ShardingSphereDistributedLock distributedLock;
+    private ShardingSphereLock distributedLock;
     
-    private ShardingSphereDistributedDatabaseLock databaseLock;
+    private ShardingSphereLock databaseLock;
     
     @Override
     public void init(final ShardingSphereInterMutexLockHolder lockHolder) {
         distributedLock = new ShardingSphereDistributedLock(lockHolder);
-        databaseLock = new ShardingSphereDistributedDatabaseLock(lockHolder);
+        databaseLock = new ShardingSphereDistributedDatabaseLock(lockHolder, LockStateContextFactory.getLockStateContext());
     }
     
     @Override
@@ -58,6 +59,7 @@ public final class DistributedLockManager implements ShardingSphereLockManager {
     }
     
     private synchronized boolean innerTryLock(final String databaseName, final LockMode lockMode, final long timeoutMilliseconds) {
+        Preconditions.checkNotNull(databaseName, "Try Lock write for database args database name can not be null.");
         switch (lockMode) {
             case READ:
                 return innerDatabaseTryLock(databaseName, timeoutMilliseconds);
@@ -68,9 +70,12 @@ public final class DistributedLockManager implements ShardingSphereLockManager {
     }
     
     private boolean innerDatabaseTryLock(final String databaseName, final long timeoutMilliseconds) {
-        Preconditions.checkNotNull(databaseName, "Try Lock write for database args database name can not be null.");
-        log.debug("Distribute database lock acquire sequenced success, database name: {}", databaseName);
-        return databaseLock.tryLock(databaseName, timeoutMilliseconds - TimeoutMilliseconds.DEFAULT_REGISTRY);
+        if (databaseLock.tryLock(databaseName, timeoutMilliseconds - TimeoutMilliseconds.DEFAULT_REGISTRY)) {
+            log.debug("Distribute database lock acquire sequenced success, database name: {}", databaseName);
+            return true;
+        }
+        log.debug("Distribute database lock acquire sequenced failed, database name: {}", databaseName);
+        return false;
     }
     
     @Override
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/manager/state/LockStateContext.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/manager/state/LockStateContext.java
new file mode 100644
index 00000000000..f41a69b3d7d
--- /dev/null
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/LockStateContext.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
+
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.ShardingSphereInterMutexLockHolder;
+import org.apache.shardingsphere.spi.annotation.SingletonSPI;
+import org.apache.shardingsphere.spi.type.required.RequiredSPI;
+
+/**
+ * Lock state context.
+ */
+@SingletonSPI
+public interface LockStateContext extends RequiredSPI {
+    
+    /**
+     * Init lock state context.
+     *
+     * @param lockHolder lock holder
+     */
+    default void init(ShardingSphereInterMutexLockHolder lockHolder) {
+        throw new UnsupportedOperationException();
+    }
+    
+    /**
+     * Register lock state.
+     *
+     * @param databaseName database name
+     */
+    void register(String databaseName);
+    
+    /**
+     * Register lock state.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     */
+    default void register(String databaseName, String schemaName) {
+        throw new UnsupportedOperationException();
+    }
+    
+    /**
+     * Un register lock state.
+     *
+     * @param databaseName database name
+     */
+    void unregister(String databaseName);
+    
+    /**
+     * Un-register lock state.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     */
+    default void unregister(String databaseName, String schemaName) {
+        throw new UnsupportedOperationException();
+    }
+    
+    /**
+     * Is locked.
+     *
+     * @param databaseName database name
+     * @return is locked or not
+     */
+    boolean isLocked(String databaseName);
+    
+    /**
+     * Is locked.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @return is locked or not
+     */
+    default boolean isLocked(String databaseName, String schemaName) {
+        throw new UnsupportedOperationException();
+    }
+}
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/distributed/node/DistributedLockNodeServiceTest.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/manager/state/LockStateContextFactory.java
similarity index 57%
copy from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeServiceTest.java
copy to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/LockStateContextFactory.java
index 1c9cf9aac58..4ff543de147 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/distributed/node/DistributedLockNodeServiceTest.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/manager/state/LockStateContextFactory.java
@@ -15,24 +15,29 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.node;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
 
-import org.junit.Test;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.spi.type.required.RequiredSPIRegistry;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public final class DistributedLockNodeServiceTest {
-    
-    private static final DistributedLockNodeService SERVICE = new DistributedLockNodeService();
+/**
+ * Lock state context factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class LockStateContextFactory {
     
-    @Test
-    public void assertGetSequenceNodePath() {
-        assertThat(SERVICE.getSequenceNodePath(), is("/lock/distributed/sequence"));
+    static {
+        ShardingSphereServiceLoader.register(LockStateContext.class);
     }
     
-    @Test
-    public void assertGetLockLevel() {
-        assertThat(SERVICE.getLockTypeName(), is("distributed"));
+    /**
+     * Get lock state context.
+     *
+     * @return lock state context
+     */
+    public static LockStateContext getLockStateContext() {
+        return RequiredSPIRegistry.getRegisteredService(LockStateContext.class);
     }
 }
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/manager/state/ShardingSphereLockStateContext.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/manager/state/ShardingSphereLockStateContext.java
new file mode 100644
index 00000000000..b6337294570
--- /dev/null
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/ShardingSphereLockStateContext.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
+
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Lock state context.
+ */
+public final class ShardingSphereLockStateContext implements LockStateContext {
+    
+    private final ReadWriteLock lock = new ReentrantReadWriteLock();
+    
+    private final AtomicInteger lockCounter = new AtomicInteger(0);
+    
+    private final Map<String, Set<String>> lockStates = new LinkedHashMap<>();
+    
+    @Override
+    public void register(final String databaseName) {
+        lock.writeLock().lock();
+        try {
+            if (lockStates.computeIfAbsent(databaseName, locks -> new LinkedHashSet<>()).add("@all")) {
+                lockCounter.incrementAndGet();
+            }
+        } finally {
+            lock.writeLock().unlock();
+        }
+    }
+    
+    @Override
+    public void unregister(final String databaseName) {
+        lock.writeLock().lock();
+        try {
+            if (lockStates.get(databaseName).remove("@all")) {
+                lockCounter.decrementAndGet();
+            }
+        } finally {
+            lock.writeLock().unlock();
+        }
+    }
+    
+    @Override
+    public boolean isLocked(final String databaseName) {
+        if (0 == lockCounter.get()) {
+            return false;
+        }
+        lock.readLock().lock();
+        try {
+            Set<String> locks = lockStates.get(databaseName);
+            return null != locks && !locks.isEmpty();
+        } finally {
+            lock.readLock().unlock();
+        }
+    }
+}
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/mutex/InterMutexLock.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/mutex/InterMutexLock.java
index 38c6b18b8ab..229fa30c561 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/mutex/InterMutexLock.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/mutex/InterMutexLock.java
@@ -21,7 +21,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import org.apache.shardingsphere.infra.lock.LockState;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockRegistryService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
 
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/mutex/ShardingSphereInterMutexLockHolder.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/mutex/ShardingSphereInterMutexLockHolder.java
index bb1a868de99..a589aad21d0 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/mutex/ShardingSphereInterMutexLockHolder.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/mutex/ShardingSphereInterMutexLockHolder.java
@@ -19,9 +19,10 @@ package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex;
 
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockRegistryService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.MutexLockRegistryService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
 import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 
 import java.util.Collection;
@@ -34,23 +35,21 @@ import java.util.Optional;
  */
 public final class ShardingSphereInterMutexLockHolder {
     
-    private final Map<String, InterMutexLock> interMutexLocks = new LinkedHashMap<>();
+    private final Map<String, MutexLock> mutexLocks = new LinkedHashMap<>();
     
-    private final Map<String, InterReentrantMutexLock> interReentrantMutexLocks = new LinkedHashMap<>();
-    
-    private final ClusterPersistRepository repository;
-    
-    private final LockRegistryService mutexLockRegistryService;
+    private final ClusterPersistRepository clusterRepository;
     
     private final ComputeNodeInstance currentInstance;
     
     private final Collection<ComputeNodeInstance> computeNodeInstances;
     
+    private final LockRegistryService mutexLockRegistryService;
+    
     public ShardingSphereInterMutexLockHolder(final ClusterPersistRepository repository, final ComputeNodeInstance instance, final Collection<ComputeNodeInstance> nodeInstances) {
-        this.repository = repository;
-        mutexLockRegistryService = new MutexLockRegistryService(repository);
+        clusterRepository = repository;
         currentInstance = instance;
         computeNodeInstances = nodeInstances;
+        mutexLockRegistryService = new MutexLockRegistryService(clusterRepository);
     }
     
     /**
@@ -60,19 +59,23 @@ public final class ShardingSphereInterMutexLockHolder {
      * @return inter mutex lock
      */
     public synchronized InterMutexLock getOrCreateInterMutexLock(final String locksName) {
-        InterMutexLock result = interMutexLocks.get(locksName);
+        MutexLock result = mutexLocks.get(locksName);
         if (null == result) {
             result = createInterMutexLock(locksName);
-            interMutexLocks.put(locksName, result);
+            mutexLocks.put(locksName, result);
         }
-        return result;
+        return (InterMutexLock) result;
     }
     
     private InterMutexLock createInterMutexLock(final String locksName) {
-        InterReentrantMutexLock interReentrantMutexLock = getInterReentrantMutexLock(locksName + "/sequence");
+        InterReentrantMutexLock interReentrantMutexLock = createInterReentrantMutexLock(LockNodeUtil.generateLockSequenceNodePath(locksName));
         return new InterMutexLock(locksName, interReentrantMutexLock, mutexLockRegistryService, currentInstance, computeNodeInstances);
     }
     
+    private InterReentrantMutexLock createInterReentrantMutexLock(final String lockNodePath) {
+        return new InterReentrantMutexLock(clusterRepository.getInternalReentrantMutexLock(lockNodePath));
+    }
+    
     /**
      * Get inter mutex Lock.
      *
@@ -80,44 +83,57 @@ public final class ShardingSphereInterMutexLockHolder {
      * @return inter mutex lock
      */
     public Optional<InterMutexLock> getInterMutexLock(final String locksName) {
-        if (interMutexLocks.isEmpty()) {
+        if (mutexLocks.isEmpty()) {
             return Optional.empty();
         }
-        return Optional.ofNullable(interMutexLocks.get(locksName));
+        return Optional.ofNullable((InterMutexLock) mutexLocks.get(locksName));
     }
     
     /**
-     * Get inter reentrant mutex lock.
+     * Get or create inter reentrant mutex lock.
      *
      * @param locksName locks name
      * @return inter reentrant mutex lock
      */
-    public InterReentrantMutexLock getInterReentrantMutexLock(final String locksName) {
-        InterReentrantMutexLock result = interReentrantMutexLocks.get(locksName);
+    public synchronized InterReentrantMutexLock getOrCreateInterReentrantMutexLock(final String locksName) {
+        MutexLock result = mutexLocks.get(locksName);
         if (null == result) {
-            result = new InterReentrantMutexLock(repository.getInternalReentrantMutexLock(locksName));
-            interReentrantMutexLocks.put(locksName, result);
+            result = createInterReentrantMutexLock(locksName);
+            mutexLocks.put(locksName, result);
+        }
+        return (InterReentrantMutexLock) result;
+    }
+    
+    /**
+     * Get inter reentrant mutex Lock.
+     *
+     * @param locksName locks name
+     * @return inter mutex lock
+     */
+    public Optional<InterReentrantMutexLock> getInterReentrantMutexLock(final String locksName) {
+        if (mutexLocks.isEmpty()) {
+            return Optional.empty();
         }
-        return result;
+        return Optional.ofNullable((InterReentrantMutexLock) mutexLocks.get(locksName));
     }
     
     /**
-     * Synchronize mutex lock.
+     * Synchronize lock.
      *
      * @param lockNodeService lock node service
      */
-    public void synchronizeMutexLock(final LockNodeService lockNodeService) {
-        Collection<String> allGlobalLock = repository.getChildrenKeys(lockNodeService.getLocksNodePath());
+    public void synchronizeLock(final LockNodeService lockNodeService) {
+        Collection<String> allGlobalLock = clusterRepository.getChildrenKeys(lockNodeService.getLocksNodePath());
         if (allGlobalLock.isEmpty()) {
             if (LockNodeType.DISTRIBUTED == lockNodeService.getType()) {
                 return;
             }
-            repository.persist(lockNodeService.getLocksNodePath(), "");
+            clusterRepository.persist(lockNodeService.getLocksNodePath(), "");
             return;
         }
         for (String each : allGlobalLock) {
             Optional<String> generalLock = lockNodeService.parseLocksNodePath(each);
-            generalLock.ifPresent(optional -> interMutexLocks.put(optional, createInterMutexLock(optional)));
+            generalLock.ifPresent(optional -> mutexLocks.put(optional, createInterMutexLock(optional)));
         }
     }
     
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/LockNodeServiceFactory.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/LockNodeServiceFactory.java
similarity index 95%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeServiceFactory.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceFactory.java
index cf26d982837..6cd3d569e68 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/LockNodeServiceFactory.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/LockNodeServiceFactory.java
@@ -15,8 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
 
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
 import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
 
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/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
similarity index 99%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockRegistryService.java
rename to 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 b024bd1359c..71f2f7d1469 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/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
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
 
 import java.util.Collection;
 
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/MutexLockRegistryService.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/MutexLockRegistryService.java
index 9bc47988937..c3ae161c99a 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/MutexLockRegistryService.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/MutexLockRegistryService.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
 import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 
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/util/LockNodeUtil.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/util/LockNodeUtil.java
index 73fb752e45c..378f484c656 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/util/LockNodeUtil.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/util/LockNodeUtil.java
@@ -38,6 +38,16 @@ public final class LockNodeUtil {
         return lockName + "/leases";
     }
     
+    /**
+     * Generate Lock sequence node path.
+     *
+     * @param lockName lock name
+     * @return lock leases
+     */
+    public static String generateLockSequenceNodePath(final String lockName) {
+        return lockName + "/sequence";
+    }
+    
     /**
      * generate ack path name.
      *
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
index cef0a9c6f82..3de4a915271 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.DistributedLockManager
+org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereDistributedLockManager
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext
similarity index 94%
copy from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
copy to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext
index cef0a9c6f82..c1450fb446a 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.DistributedLockManager
+org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.ShardingSphereLockStateContext
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/database/node/DatabaseLockNodeServiceTest.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/database/node/DatabaseLockNodeServiceTest.java
index b7f24c91b09..21d219c6251 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/database/node/DatabaseLockNodeServiceTest.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/database/node/DatabaseLockNodeServiceTest.java
@@ -26,11 +26,6 @@ public final class DatabaseLockNodeServiceTest {
     
     private static final DatabaseLockNodeService SERVICE = new DatabaseLockNodeService();
     
-    @Test
-    public void assertGetSequenceNodePath() {
-        assertThat(SERVICE.getSequenceNodePath(), is("/lock/database/sequence"));
-    }
-    
     @Test
     public void assertGetLockLevel() {
         assertThat(SERVICE.getLockTypeName(), is("database"));
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/distributed/node/DistributedLockNodeServiceTest.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/distributed/node/DistributedLockNodeServiceTest.java
index 1c9cf9aac58..70003c4cb01 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/distributed/node/DistributedLockNodeServiceTest.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/distributed/node/DistributedLockNodeServiceTest.java
@@ -26,11 +26,6 @@ public final class DistributedLockNodeServiceTest {
     
     private static final DistributedLockNodeService SERVICE = new DistributedLockNodeService();
     
-    @Test
-    public void assertGetSequenceNodePath() {
-        assertThat(SERVICE.getSequenceNodePath(), is("/lock/distributed/sequence"));
-    }
-    
     @Test
     public void assertGetLockLevel() {
         assertThat(SERVICE.getLockTypeName(), is("distributed"));
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/manager/DistributedLockManagerTest.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/manager/ShardingSphereDistributedLockManagerTest.java
similarity index 69%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributedLockManagerTest.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManagerTest.java
index 363344e9421..ad934f2f891 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/manager/DistributedLockManagerTest.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/manager/ShardingSphereDistributedLockManagerTest.java
@@ -32,45 +32,45 @@ import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public final class DistributedLockManagerTest {
+public final class ShardingSphereDistributedLockManagerTest {
     
-    private final DistributedLockManager distributedLockManager = new DistributedLockManager();
+    private final ShardingSphereDistributedLockManager shardingSphereDistributedLockManager = new ShardingSphereDistributedLockManager();
     
     @Before
     public void init() throws ReflectiveOperationException {
         ShardingSphereDistributedLock distributedLock = mock(ShardingSphereDistributedLock.class);
-        Field distributedLockField = distributedLockManager.getClass().getDeclaredField("distributedLock");
+        Field distributedLockField = shardingSphereDistributedLockManager.getClass().getDeclaredField("distributedLock");
         distributedLockField.setAccessible(true);
-        distributedLockField.set(distributedLockManager, distributedLock);
+        distributedLockField.set(shardingSphereDistributedLockManager, distributedLock);
         ShardingSphereDistributedDatabaseLock databaseLock = mock(ShardingSphereDistributedDatabaseLock.class);
         when(databaseLock.tryLock("databaseName", 3000L - TimeoutMilliseconds.DEFAULT_REGISTRY)).thenReturn(true);
-        Field databaseLockField = distributedLockManager.getClass().getDeclaredField("databaseLock");
+        Field databaseLockField = shardingSphereDistributedLockManager.getClass().getDeclaredField("databaseLock");
         databaseLockField.setAccessible(true);
-        databaseLockField.set(distributedLockManager, databaseLock);
+        databaseLockField.set(shardingSphereDistributedLockManager, databaseLock);
     }
     
     @Test
     public void assertGetDistributedLock() {
-        assertNotNull(distributedLockManager.getDistributedLock());
+        assertNotNull(shardingSphereDistributedLockManager.getDistributedLock());
     }
     
     @Test
     public void assertTryReadLock() {
-        assertTrue(distributedLockManager.tryLock("databaseName", LockMode.READ, 3000L));
+        assertTrue(shardingSphereDistributedLockManager.tryLock("databaseName", LockMode.READ, 3000L));
     }
     
     @Test(expected = UnsupportedOperationException.class)
     public void assertTryWriteLock() {
-        distributedLockManager.tryLock("databaseName", LockMode.WRITE, 3000L);
+        shardingSphereDistributedLockManager.tryLock("databaseName", LockMode.WRITE, 3000L);
     }
     
     @Test
     public void assertReleaseLock() {
-        distributedLockManager.releaseLock("databaseName");
+        shardingSphereDistributedLockManager.releaseLock("databaseName");
     }
     
     @Test
     public void assertIsLocked() {
-        assertFalse(distributedLockManager.isLocked("databaseName"));
+        assertFalse(shardingSphereDistributedLockManager.isLocked("databaseName"));
     }
 }
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/LockNodeServiceFactoryTest.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/LockNodeServiceFactoryTest.java
similarity index 89%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeServiceFactoryTest.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceFactoryTest.java
index fc7c1ac2b76..3ae70c7a769 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/LockNodeServiceFactoryTest.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/LockNodeServiceFactoryTest.java
@@ -15,15 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
 
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.node.DatabaseLockNodeService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.node.DistributedLockNodeService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
 
 public final class LockNodeServiceFactoryTest {
@@ -34,7 +34,5 @@ public final class LockNodeServiceFactoryTest {
         assertThat(distributedLockNodeService, instanceOf(DistributedLockNodeService.class));
         LockNodeService databaseLockNodeService = LockNodeServiceFactory.getInstance().getLockNodeService(LockNodeType.DATABASE);
         assertThat(databaseLockNodeService, instanceOf(DatabaseLockNodeService.class));
-        LockNodeService schemaLockNodeService = LockNodeServiceFactory.getInstance().getLockNodeService(LockNodeType.SCHEMA);
-        assertNull(schemaLockNodeService);
     }
 }
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/AbstractDistributedLockNodeServiceTest.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/LockNodeServiceTest.java
similarity index 84%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/AbstractDistributedLockNodeServiceTest.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceTest.java
index e6ba1f9fd65..64c8dd8cf6e 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/AbstractDistributedLockNodeServiceTest.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/LockNodeServiceTest.java
@@ -15,8 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
 
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.node.DistributedLockNodeService;
 import org.junit.Test;
 
@@ -26,9 +27,9 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
-public final class AbstractDistributedLockNodeServiceTest {
+public final class LockNodeServiceTest {
     
-    private static final AbstractDistributedLockNodeService SERVICE = new DistributedLockNodeService();
+    private static final LockNodeService SERVICE = new DistributedLockNodeService();
     
     @Test
     public void assertGetLocksNodePath() {
@@ -42,6 +43,12 @@ public final class AbstractDistributedLockNodeServiceTest {
         assertThat(locksName, is("/lock/distributed/locks/sharding_db"));
     }
     
+    @Test
+    public void assertGenerateFreezeLockName() {
+        String locksName = SERVICE.generateFreezeLockName("sharding_db");
+        assertThat(locksName, is("/lock/distributed/locks/sharding_db/freeze"));
+    }
+    
     @Test
     public void assertGenerateAckLockName() {
         String globalLockedAckNodePath = SERVICE.generateAckLockName("locksName", "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/MutexLockRegistryServiceTest.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/MutexLockRegistryServiceTest.java
index 23c00db9da2..107489b7e78 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/MutexLockRegistryServiceTest.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/MutexLockRegistryServiceTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
 
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
 import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
 import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import org.junit.Before;
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/util/LockNodeUtilTest.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/util/LockNodeUtilTest.java
index 26455787b26..b7d9191342e 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/util/LockNodeUtilTest.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/util/LockNodeUtilTest.java
@@ -26,8 +26,14 @@ public final class LockNodeUtilTest {
     
     @Test
     public void assertGenerateLockLeasesNodePath() {
-        String lockName = "/lock/mutex/locks/sharding_db";
-        assertThat(LockNodeUtil.generateLockLeasesNodePath(lockName), is("/lock/mutex/locks/sharding_db/leases"));
+        String lockName = "/lock/distributed/locks/sharding_db";
+        assertThat(LockNodeUtil.generateLockLeasesNodePath(lockName), is("/lock/distributed/locks/sharding_db/leases"));
+    }
+    
+    @Test
+    public void assertGenerateLockSequenceNodePath() {
+        String lockName = "/lock/distributed/locks/sharding_db";
+        assertThat(LockNodeUtil.generateLockSequenceNodePath(lockName), is("/lock/distributed/locks/sharding_db/sequence"));
     }
     
     @Test