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 11e1c25ed27 Optimize lock name definition (#19052)
11e1c25ed27 is described below

commit 11e1c25ed2700e733cf72fa14eee6efd10686684
Author: gin <[email protected]>
AuthorDate: Tue Jul 12 16:23:15 2022 +0800

    Optimize lock name definition (#19052)
    
    * Optimize lock definition remove lock level
    
    * Optimize lock state context
    
    * Simplify abstract lock context
    
    * Optimize arg naming
    
    * Fix CI
---
 .../shardingsphere/infra/lock/LockContext.java     | 16 +++---
 .../lock/{LockLevel.java => LockDefinition.java}   | 18 +++++-
 .../infra/lock/LockNameDefinition.java             | 12 ++--
 .../core/api/impl/RuleAlteredJobAPIImpl.java       | 16 +++---
 .../mode/manager/lock/AbstractLockContext.java     | 67 ++++++++--------------
 .../lock/ShardingSphereLockJudgeEngine.java        |  4 +-
 ...Definition.java => DatabaseLockDefinition.java} |  9 +--
 .../definition/DatabaseLockNameDefinition.java     | 13 ++---
 ...tionFactory.java => LockDefinitionFactory.java} | 15 +++--
 .../coordinator/lock/DistributedLockContext.java   | 18 +++---
 .../ShardingSphereDistributedDatabaseLock.java     | 19 +++---
 .../event/DatabaseAckLockReleasedEvent.java        |  5 +-
 .../database/event/DatabaseAckLockedEvent.java     |  5 +-
 .../database/event/DatabaseLockReleasedEvent.java  |  7 ++-
 .../lock/database/event/DatabaseLockedEvent.java   |  7 ++-
 .../ShardingSphereDistributedLockManager.java      | 38 ++++++------
 .../lock/manager/ShardingSphereLockManager.java    | 20 +++----
 .../lock/manager/state/LockStateContext.java       | 15 ++---
 .../state/ShardingSphereLockStateContext.java      | 30 ++++++----
 .../lock/DistributedLockContextTest.java           |  6 +-
 .../watcher/DatabaseLockChangedWatcherTest.java    |  8 +--
 ...dingSphereDistributedGlobalLockManagerTest.java | 15 +++--
 .../manager/memory/lock/MemoryLockContext.java     | 18 +++---
 .../standalone/lock/StandaloneLockContext.java     | 18 +++---
 .../communication/DatabaseCommunicationEngine.java |  4 +-
 ...va => UnsupportedUpdateOperationException.java} |  6 +-
 .../text/distsql/DistSQLBackendHandlerFactory.java |  8 +--
 .../frontend/mysql/err/MySQLErrPacketFactory.java  |  6 +-
 .../postgresql/err/PostgreSQLErrPacketFactory.java |  6 +-
 29 files changed, 224 insertions(+), 205 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockContext.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockContext.java
index 5184e7edcd5..c9f330b67bd 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockContext.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockContext.java
@@ -43,32 +43,32 @@ public interface LockContext {
     /**
      * Try lock.
      *
-     * @param lockNameDefinition lock name definition
+     * @param lockDefinition lock definition
      * @return is locked or not
      */
-    boolean tryLock(LockNameDefinition lockNameDefinition);
+    boolean tryLock(LockDefinition lockDefinition);
     
     /**
      * Try Lock.
      *
-     * @param lockNameDefinition lock name definition
+     * @param lockDefinition lock definition
      * @param timeoutMilliseconds timeout milliseconds
      * @return is locked or not
      */
-    boolean tryLock(LockNameDefinition lockNameDefinition, long 
timeoutMilliseconds);
+    boolean tryLock(LockDefinition lockDefinition, long timeoutMilliseconds);
     
     /**
      * Release lock.
      *
-     * @param lockNameDefinition lock name definition
+     * @param lockDefinition lock definition
      */
-    void releaseLock(LockNameDefinition lockNameDefinition);
+    void releaseLock(LockDefinition lockDefinition);
     
     /**
      *  Is locked.
      *
-     * @param lockNameDefinition lock name definition
+     * @param lockDefinition lock definition
      * @return is locked or not
      */
-    boolean isLocked(LockNameDefinition lockNameDefinition);
+    boolean isLocked(LockDefinition lockDefinition);
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockLevel.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockDefinition.java
similarity index 74%
rename from 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockLevel.java
rename to 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockDefinition.java
index 47eba392212..edd26835d19 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockLevel.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockDefinition.java
@@ -18,9 +18,21 @@
 package org.apache.shardingsphere.infra.lock;
 
 /**
- * Lock level.
+ * Lock definition.
  */
-public enum LockLevel {
+public interface LockDefinition {
     
-    DATABASE, SCHEMA, TABLE
+    /**
+     * Get lock mode.
+     *
+     * @return lock mode
+     */
+    LockMode getLockMode();
+    
+    /**
+     * Get lock name definition.
+     *
+     * @return lock name definition
+     */
+    LockNameDefinition getLockNameDefinition();
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
index f06210fbeb6..86039d559f5 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
@@ -23,16 +23,16 @@ package org.apache.shardingsphere.infra.lock;
 public interface LockNameDefinition {
     
     /**
-     * Get lock mode.
+     * Get lock name.
      *
-     * @return lock mode
+     * @return lock name
      */
-    LockMode getLockMode();
+    String getLockName();
     
     /**
-     * Get lock level.
+     * Get database name.
      *
-     * @return lock level
+     * @return database name
      */
-    LockLevel getLockLevel();
+    String getDatabaseName();
 }
diff --git 
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/RuleAlteredJobAPIImpl.java
 
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/RuleAlteredJobAPIImpl.java
index 66971f402a5..12bce83b1df 100644
--- 
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/RuleAlteredJobAPIImpl.java
+++ 
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/RuleAlteredJobAPIImpl.java
@@ -47,10 +47,10 @@ import 
org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobBriefInfo;
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.infra.lock.LockContext;
-import org.apache.shardingsphere.infra.lock.LockNameDefinition;
+import org.apache.shardingsphere.infra.lock.LockDefinition;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.ScalingTaskFinishedEvent;
-import 
org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.LockDefinitionFactory;
 import 
org.apache.shardingsphere.scaling.core.job.environment.ScalingEnvironmentManager;
 
 import java.sql.SQLException;
@@ -178,12 +178,12 @@ public final class RuleAlteredJobAPIImpl extends 
AbstractPipelineJobAPIImpl impl
     public void stopClusterWriteDB(final RuleAlteredJobConfiguration 
jobConfig) {
         String databaseName = jobConfig.getDatabaseName();
         LockContext lockContext = 
PipelineContext.getContextManager().getInstanceContext().getLockContext();
-        LockNameDefinition lockNameDefinition = 
LockNameDefinitionFactory.newDatabaseDefinition(databaseName);
-        if (lockContext.isLocked(lockNameDefinition)) {
+        LockDefinition lockDefinition = 
LockDefinitionFactory.newDatabaseLockDefinition(databaseName);
+        if (lockContext.isLocked(lockDefinition)) {
             log.info("stopClusterWriteDB, already stopped");
             return;
         }
-        if (lockContext.tryLock(lockNameDefinition)) {
+        if (lockContext.tryLock(lockDefinition)) {
             log.info("stopClusterWriteDB, tryLockSuccess=true");
             return;
         }
@@ -204,10 +204,10 @@ public final class RuleAlteredJobAPIImpl extends 
AbstractPipelineJobAPIImpl impl
     public void restoreClusterWriteDB(final RuleAlteredJobConfiguration 
jobConfig) {
         String databaseName = jobConfig.getDatabaseName();
         LockContext lockContext = 
PipelineContext.getContextManager().getInstanceContext().getLockContext();
-        LockNameDefinition lockNameDefinition = 
LockNameDefinitionFactory.newDatabaseDefinition(databaseName);
-        if (lockContext.isLocked(lockNameDefinition)) {
+        LockDefinition lockDefinition = 
LockDefinitionFactory.newDatabaseLockDefinition(databaseName);
+        if (lockContext.isLocked(lockDefinition)) {
             log.info("restoreClusterWriteDB, before releaseLock, 
databaseName={}, jobId={}", databaseName, jobConfig.getJobId());
-            lockContext.releaseLock(lockNameDefinition);
+            lockContext.releaseLock(lockDefinition);
             return;
         }
         log.info("restoreClusterWriteDB, isLocked false, databaseName={}", 
databaseName);
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockContext.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockContext.java
index 2fe250f9aee..84039765253 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockContext.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockContext.java
@@ -18,9 +18,8 @@
 package org.apache.shardingsphere.mode.manager.lock;
 
 import org.apache.shardingsphere.infra.lock.LockContext;
-import org.apache.shardingsphere.infra.lock.LockLevel;
-import org.apache.shardingsphere.infra.lock.LockNameDefinition;
-import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+import org.apache.shardingsphere.infra.lock.LockDefinition;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
 
 /**
  * Abstract lock context.
@@ -28,63 +27,43 @@ import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDe
 public abstract class AbstractLockContext implements LockContext {
     
     @Override
-    public boolean tryLock(final LockNameDefinition lockNameDefinition) {
-        LockLevel lockLevel = lockNameDefinition.getLockLevel();
-        switch (lockLevel) {
-            case DATABASE:
-                return tryLock((DatabaseLockNameDefinition) 
lockNameDefinition);
-            case SCHEMA:
-            case TABLE:
-            default:
-                throw new UnsupportedOperationException();
+    public boolean tryLock(final LockDefinition lockDefinition) {
+        if (lockDefinition instanceof DatabaseLockDefinition) {
+            return tryLock((DatabaseLockDefinition) lockDefinition);
         }
+        throw new UnsupportedOperationException();
     }
     
-    protected abstract boolean tryLock(DatabaseLockNameDefinition 
lockNameDefinition);
+    protected abstract boolean tryLock(DatabaseLockDefinition lockDefinition);
     
     @Override
-    public boolean tryLock(final LockNameDefinition lockNameDefinition, final 
long timeoutMilliseconds) {
-        LockLevel lockLevel = lockNameDefinition.getLockLevel();
-        switch (lockLevel) {
-            case DATABASE:
-                return tryLock((DatabaseLockNameDefinition) 
lockNameDefinition, timeoutMilliseconds);
-            case SCHEMA:
-            case TABLE:
-            default:
-                throw new UnsupportedOperationException();
+    public boolean tryLock(final LockDefinition lockDefinition, final long 
timeoutMilliseconds) {
+        if (lockDefinition instanceof DatabaseLockDefinition) {
+            return tryLock((DatabaseLockDefinition) lockDefinition, 
timeoutMilliseconds);
         }
+        throw new UnsupportedOperationException();
     }
     
-    protected abstract boolean tryLock(DatabaseLockNameDefinition 
lockNameDefinition, long timeoutMilliseconds);
+    protected abstract boolean tryLock(DatabaseLockDefinition lockDefinition, 
long timeoutMilliseconds);
     
     @Override
-    public void releaseLock(final LockNameDefinition lockNameDefinition) {
-        LockLevel lockLevel = lockNameDefinition.getLockLevel();
-        switch (lockLevel) {
-            case DATABASE:
-                releaseLock((DatabaseLockNameDefinition) lockNameDefinition);
-                break;
-            case SCHEMA:
-            case TABLE:
-            default:
-                throw new UnsupportedOperationException();
+    public void releaseLock(final LockDefinition lockDefinition) {
+        if (lockDefinition instanceof DatabaseLockDefinition) {
+            releaseLock((DatabaseLockDefinition) lockDefinition);
+            return;
         }
+        throw new UnsupportedOperationException();
     }
     
-    protected abstract void releaseLock(DatabaseLockNameDefinition 
lockNameDefinition);
+    protected abstract void releaseLock(DatabaseLockDefinition lockDefinition);
     
     @Override
-    public boolean isLocked(final LockNameDefinition lockNameDefinition) {
-        LockLevel lockLevel = lockNameDefinition.getLockLevel();
-        switch (lockLevel) {
-            case DATABASE:
-                return isLocked((DatabaseLockNameDefinition) 
lockNameDefinition);
-            case SCHEMA:
-            case TABLE:
-            default:
-                throw new UnsupportedOperationException();
+    public boolean isLocked(final LockDefinition lockDefinition) {
+        if (lockDefinition instanceof DatabaseLockDefinition) {
+            return isLocked((DatabaseLockDefinition) lockDefinition);
         }
+        throw new UnsupportedOperationException();
     }
     
-    protected abstract boolean isLocked(DatabaseLockNameDefinition 
lockNameDefinition);
+    protected abstract boolean isLocked(DatabaseLockDefinition lockDefinition);
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java
index 23d1321955d..235af9c82a2 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.mode.manager.lock;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import 
org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.LockDefinitionFactory;
 
 /**
  * Lock judge engine for ShardingSphere.
@@ -37,7 +37,7 @@ public final class ShardingSphereLockJudgeEngine extends 
AbstractLockJudgeEngine
     @Override
     public boolean isLocked(final String databaseName, final 
SQLStatementContext<?> sqlStatementContext) {
         if (isWriteStatement(sqlStatementContext.getSqlStatement())) {
-            return 
getLockContext().isLocked(LockNameDefinitionFactory.newDatabaseDefinition(databaseName));
+            return 
getLockContext().isLocked(LockDefinitionFactory.newDatabaseLockDefinition(databaseName));
         }
         return false;
     }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockDefinition.java
similarity index 79%
copy from 
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
copy to 
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockDefinition.java
index 3e446f34ab3..deed8bfac69 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockDefinition.java
@@ -19,20 +19,17 @@ package 
org.apache.shardingsphere.mode.manager.lock.definition;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.lock.LockLevel;
 import org.apache.shardingsphere.infra.lock.LockMode;
-import org.apache.shardingsphere.infra.lock.LockNameDefinition;
+import org.apache.shardingsphere.infra.lock.LockDefinition;
 
 /**
  * Database lock name definition.
  */
 @RequiredArgsConstructor
 @Getter
-public final class DatabaseLockNameDefinition implements LockNameDefinition {
-    
-    private final String databaseName;
+public final class DatabaseLockDefinition implements LockDefinition {
     
     private final LockMode lockMode;
     
-    private final LockLevel lockLevel;
+    private final DatabaseLockNameDefinition lockNameDefinition;
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
index 3e446f34ab3..921eb7f9462 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
@@ -18,21 +18,20 @@
 package org.apache.shardingsphere.mode.manager.lock.definition;
 
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.lock.LockLevel;
-import org.apache.shardingsphere.infra.lock.LockMode;
 import org.apache.shardingsphere.infra.lock.LockNameDefinition;
 
 /**
  * Database lock name definition.
  */
-@RequiredArgsConstructor
 @Getter
 public final class DatabaseLockNameDefinition implements LockNameDefinition {
     
-    private final String databaseName;
+    private final String lockName;
     
-    private final LockMode lockMode;
+    private final String databaseName;
     
-    private final LockLevel lockLevel;
+    public DatabaseLockNameDefinition(final String databaseName) {
+        lockName = databaseName;
+        this.databaseName = databaseName;
+    }
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockNameDefinitionFactory.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockDefinitionFactory.java
similarity index 72%
rename from 
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockNameDefinitionFactory.java
rename to 
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockDefinitionFactory.java
index b3f0d931762..38a4df328ea 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockNameDefinitionFactory.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockDefinitionFactory.java
@@ -19,23 +19,22 @@ package 
org.apache.shardingsphere.mode.manager.lock.definition;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.lock.LockLevel;
 import org.apache.shardingsphere.infra.lock.LockMode;
-import org.apache.shardingsphere.infra.lock.LockNameDefinition;
+import org.apache.shardingsphere.infra.lock.LockDefinition;
 
 /**
- * Lock name definition factory.
+ * Lock definition factory.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class LockNameDefinitionFactory {
+public final class LockDefinitionFactory {
     
     /**
-     * New database definition.
+     * New database lock definition.
      *
      * @param databaseName database name
-     * @return database lock name definition
+     * @return database lock definition
      */
-    public static LockNameDefinition newDatabaseDefinition(final String 
databaseName) {
-        return new DatabaseLockNameDefinition(databaseName, LockMode.READ, 
LockLevel.DATABASE);
+    public static LockDefinition newDatabaseLockDefinition(final String 
databaseName) {
+        return new DatabaseLockDefinition(LockMode.READ, new 
DatabaseLockNameDefinition(databaseName));
     }
 }
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 10add65e07e..f7ed155258b 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
@@ -25,7 +25,7 @@ import 
org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.internal.ShardingSphereInternalLockHolder;
 import org.apache.shardingsphere.mode.manager.lock.AbstractLockContext;
-import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.spi.type.required.RequiredSPIRegistry;
@@ -60,22 +60,22 @@ public final class DistributedLockContext extends 
AbstractLockContext {
     }
     
     @Override
-    protected boolean tryLock(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        return lockManager.tryLock(lockNameDefinition);
+    protected boolean tryLock(final DatabaseLockDefinition lockDefinition) {
+        return lockManager.tryLock(lockDefinition);
     }
     
     @Override
-    protected boolean tryLock(final DatabaseLockNameDefinition 
lockNameDefinition, final long timeoutMilliseconds) {
-        return lockManager.tryLock(lockNameDefinition, timeoutMilliseconds);
+    protected boolean tryLock(final DatabaseLockDefinition lockDefinition, 
final long timeoutMilliseconds) {
+        return lockManager.tryLock(lockDefinition, timeoutMilliseconds);
     }
     
     @Override
-    protected void releaseLock(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        lockManager.releaseLock(lockNameDefinition);
+    protected void releaseLock(final DatabaseLockDefinition lockDefinition) {
+        lockManager.releaseLock(lockDefinition);
     }
     
     @Override
-    protected boolean isLocked(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        return lockManager.isLocked(lockNameDefinition);
+    protected boolean isLocked(final DatabaseLockDefinition lockDefinition) {
+        return lockManager.isLocked(lockDefinition);
     }
 }
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 84e87761f83..d5f310568e5 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
@@ -31,6 +31,7 @@ import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.s
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
 
 import java.util.Optional;
 
@@ -64,7 +65,7 @@ public final class ShardingSphereDistributedDatabaseLock 
implements ShardingSphe
     
     private boolean innerTryLock(final String lockName, final long 
timeoutMillis) {
         if 
(lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(lockName)).tryLock(timeoutMillis))
 {
-            lockStateContext.register(lockName);
+            lockStateContext.register(new 
DatabaseLockNameDefinition(lockName));
             return true;
         }
         return false;
@@ -79,13 +80,13 @@ public final class ShardingSphereDistributedDatabaseLock 
implements ShardingSphe
         Optional<ExclusiveInternalLock> interMutexLock = 
getInterMutexLock(lockName);
         if (interMutexLock.isPresent()) {
             interMutexLock.get().unlock();
-            lockStateContext.unregister(lockName);
+            lockStateContext.unregister(new 
DatabaseLockNameDefinition(lockName));
         }
     }
     
     @Override
     public boolean isLocked(final String lockName) {
-        return 
getInterMutexLock(lockName).map(ExclusiveInternalLock::isLocked).orElse(false);
+        return lockStateContext.isLocked(new 
DatabaseLockNameDefinition(lockName));
     }
     
     /**
@@ -95,11 +96,11 @@ public final class ShardingSphereDistributedDatabaseLock 
implements ShardingSphe
      */
     @Subscribe
     public synchronized void locked(final DatabaseLockedEvent event) {
-        String database = event.getDatabase();
+        String database = event.getLockNameDefinition().getDatabaseName();
         String lockedInstanceId = lockHolder.getCurrentInstanceId();
         ExclusiveInternalLock exclusiveLock = 
lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(database));
         exclusiveLock.ackLock(lockNodeService.generateAckLockName(database, 
lockedInstanceId), lockedInstanceId);
-        lockStateContext.register(database);
+        lockStateContext.register(event.getLockNameDefinition());
     }
     
     /**
@@ -109,12 +110,12 @@ public final class ShardingSphereDistributedDatabaseLock 
implements ShardingSphe
      */
     @Subscribe
     public synchronized void lockReleased(final DatabaseLockReleasedEvent 
event) {
-        String database = event.getDatabase();
+        String database = event.getLockNameDefinition().getDatabaseName();
         String lockedInstanceId = lockHolder.getCurrentInstanceId();
         Optional<ExclusiveInternalLock> interMutexLock = 
getInterMutexLock(database);
         if (interMutexLock.isPresent()) {
             
interMutexLock.get().releaseAckLock(lockNodeService.generateAckLockName(database,
 lockedInstanceId), lockedInstanceId);
-            lockStateContext.unregister(database);
+            lockStateContext.unregister(event.getLockNameDefinition());
         }
     }
     
@@ -125,7 +126,7 @@ public final class ShardingSphereDistributedDatabaseLock 
implements ShardingSphe
      */
     @Subscribe
     public synchronized void ackLocked(final DatabaseAckLockedEvent event) {
-        getInterMutexLock(event.getDatabase()).ifPresent(mutexLock -> 
mutexLock.addLockedInstance(event.getLockedInstance()));
+        
getInterMutexLock(event.getLockNameDefinition().getDatabaseName()).ifPresent(mutexLock
 -> mutexLock.addLockedInstance(event.getLockedInstance()));
     }
     
     /**
@@ -135,6 +136,6 @@ public final class ShardingSphereDistributedDatabaseLock 
implements ShardingSphe
      */
     @Subscribe
     public synchronized void ackLockReleased(final 
DatabaseAckLockReleasedEvent event) {
-        getInterMutexLock(event.getDatabase()).ifPresent(mutexLock -> 
mutexLock.removeLockedInstance(event.getLockedInstance()));
+        
getInterMutexLock(event.getLockNameDefinition().getDatabaseName()).ifPresent(mutexLock
 -> mutexLock.removeLockedInstance(event.getLockedInstance()));
     }
 }
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/event/DatabaseAckLockReleasedEvent.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/event/DatabaseAckLockReleasedEvent.java
index 96579a0f67d..480f0618eeb 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/event/DatabaseAckLockReleasedEvent.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/event/DatabaseAckLockReleasedEvent.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database
 import lombok.Getter;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
 
 /**
  * Database ack released Lock event.
@@ -27,13 +28,13 @@ import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.Gover
 @Getter
 public final class DatabaseAckLockReleasedEvent implements GovernanceEvent {
     
-    private final String database;
+    private final DatabaseLockNameDefinition lockNameDefinition;
     
     private final String lockedInstance;
     
     public DatabaseAckLockReleasedEvent(final String ackLockedName) {
         String[] databaseInstance = 
LockNodeUtil.parseAckLockName(ackLockedName);
-        this.database = databaseInstance[0];
+        lockNameDefinition = new 
DatabaseLockNameDefinition(databaseInstance[0]);
         this.lockedInstance = databaseInstance[1];
     }
 }
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/event/DatabaseAckLockedEvent.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/event/DatabaseAckLockedEvent.java
index ed7b97eb0f0..e5c8524b92f 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/event/DatabaseAckLockedEvent.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/event/DatabaseAckLockedEvent.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database
 import lombok.Getter;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
 
 /**
  * Database ack locked event.
@@ -27,13 +28,13 @@ import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.Gover
 @Getter
 public final class DatabaseAckLockedEvent implements GovernanceEvent {
     
-    private final String database;
+    private final DatabaseLockNameDefinition lockNameDefinition;
     
     private final String lockedInstance;
     
     public DatabaseAckLockedEvent(final String ackLockedName) {
         String[] databaseInstance = 
LockNodeUtil.parseAckLockName(ackLockedName);
-        this.database = databaseInstance[0];
+        lockNameDefinition = new 
DatabaseLockNameDefinition(databaseInstance[0]);
         this.lockedInstance = databaseInstance[1];
     }
 }
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/event/DatabaseLockReleasedEvent.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/event/DatabaseLockReleasedEvent.java
index 88d0b045f6f..f60e49a7e4b 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/event/DatabaseLockReleasedEvent.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/event/DatabaseLockReleasedEvent.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
 
 /**
  * Database lock released event.
@@ -28,5 +29,9 @@ import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.Gover
 @Getter
 public final class DatabaseLockReleasedEvent implements GovernanceEvent {
     
-    private final String database;
+    private final DatabaseLockNameDefinition lockNameDefinition;
+    
+    public DatabaseLockReleasedEvent(final String lockedName) {
+        this.lockNameDefinition = new DatabaseLockNameDefinition(lockedName);
+    }
 }
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/event/DatabaseLockedEvent.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/event/DatabaseLockedEvent.java
index 4c6171a0f8d..dd75beb73bd 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/event/DatabaseLockedEvent.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/event/DatabaseLockedEvent.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
 
 /**
  * Database locked event.
@@ -28,5 +29,9 @@ import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.Gover
 @Getter
 public final class DatabaseLockedEvent implements GovernanceEvent {
     
-    private final String database;
+    private final DatabaseLockNameDefinition lockNameDefinition;
+    
+    public DatabaseLockedEvent(final String lockedName) {
+        this.lockNameDefinition = new DatabaseLockNameDefinition(lockedName);
+    }
 }
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/ShardingSphereDistributedLockManager.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
index 24477f8113b..9f72375aeb0 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/ShardingSphereDistributedLockManager.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
@@ -21,14 +21,17 @@ import com.google.common.base.Preconditions;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.infra.eventbus.EventBusContext;
 import org.apache.shardingsphere.infra.lock.LockMode;
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
 import org.apache.shardingsphere.infra.lock.LockScope;
 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.ShardingSphereDistributedGlobalLock;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.ShardingSphereDistributedStandardLock;
+import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContextFactory;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.internal.ShardingSphereInternalLockHolder;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
 import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
 
 /**
@@ -37,6 +40,8 @@ import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDe
 @Slf4j
 public final class ShardingSphereDistributedLockManager implements 
ShardingSphereLockManager {
     
+    private LockStateContext lockStateContext;
+    
     private ShardingSphereLock standardDistributedLock;
     
     private ShardingSphereLock globalDistributedLock;
@@ -45,9 +50,10 @@ public final class ShardingSphereDistributedLockManager 
implements ShardingSpher
     
     @Override
     public void init(final ShardingSphereInternalLockHolder lockHolder, final 
EventBusContext eventBusContext) {
+        lockStateContext = LockStateContextFactory.getLockStateContext();
         standardDistributedLock = new 
ShardingSphereDistributedStandardLock(lockHolder);
         globalDistributedLock = new 
ShardingSphereDistributedGlobalLock(lockHolder, eventBusContext);
-        databaseLock = new ShardingSphereDistributedDatabaseLock(lockHolder, 
LockStateContextFactory.getLockStateContext(), eventBusContext);
+        databaseLock = new ShardingSphereDistributedDatabaseLock(lockHolder, 
lockStateContext, eventBusContext);
     }
     
     @Override
@@ -63,23 +69,23 @@ public final class ShardingSphereDistributedLockManager 
implements ShardingSpher
     }
     
     @Override
-    public boolean tryLock(final DatabaseLockNameDefinition 
lockNameDefinition) {
+    public boolean tryLock(final DatabaseLockDefinition lockNameDefinition) {
         Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database 
arg lock name definition can not be null.");
         return tryLock(lockNameDefinition, TimeoutMilliseconds.MAX_TRY_LOCK);
     }
     
     @Override
-    public boolean tryLock(final DatabaseLockNameDefinition 
lockNameDefinition, final long timeoutMilliseconds) {
-        Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database 
arg lock name definition can not be null.");
-        return innerTryLock(lockNameDefinition.getDatabaseName(), 
lockNameDefinition.getLockMode(), timeoutMilliseconds);
+    public boolean tryLock(final DatabaseLockDefinition lockDefinition, final 
long timeoutMilliseconds) {
+        Preconditions.checkNotNull(lockDefinition, "Try Lock for database arg 
lock definition can not be null.");
+        return innerTryLock(lockDefinition.getLockMode(), 
lockDefinition.getLockNameDefinition(), timeoutMilliseconds);
     }
     
-    private synchronized boolean innerTryLock(final String databaseName, final 
LockMode lockMode, final long timeoutMilliseconds) {
-        Preconditions.checkNotNull(databaseName, "Try Lock for database arg 
database name can not be null.");
+    private synchronized boolean innerTryLock(final LockMode lockMode, final 
DatabaseLockNameDefinition lockNameDefinition, final long timeoutMilliseconds) {
+        Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database 
arg database name can not be null.");
         Preconditions.checkNotNull(lockMode, "Try Lock for database args lock 
mode can not be null.");
         switch (lockMode) {
             case READ:
-                return innerDatabaseTryLock(databaseName, timeoutMilliseconds);
+                return 
innerDatabaseTryLock(lockNameDefinition.getDatabaseName(), timeoutMilliseconds);
             case WRITE:
             default:
                 throw new UnsupportedOperationException();
@@ -96,18 +102,18 @@ public final class ShardingSphereDistributedLockManager 
implements ShardingSpher
     }
     
     @Override
-    public void releaseLock(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database 
arg lock name definition can not be null.");
-        String databaseName = lockNameDefinition.getDatabaseName();
+    public void releaseLock(final DatabaseLockDefinition lockDefinition) {
+        Preconditions.checkNotNull(lockDefinition, "Try Lock for database arg 
lock definition can not be null.");
+        String databaseName = 
lockDefinition.getLockNameDefinition().getDatabaseName();
         Preconditions.checkNotNull(databaseName, "Release lock write args 
database name can not be null.");
         databaseLock.releaseLock(databaseName);
     }
     
     @Override
-    public boolean isLocked(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database 
arg lock name definition can not be null.");
-        String databaseName = lockNameDefinition.getDatabaseName();
-        Preconditions.checkNotNull(databaseName, "Is locked database args 
database name can not be null.");
-        return databaseLock.isLocked(databaseName);
+    public boolean isLocked(final DatabaseLockDefinition lockDefinition) {
+        Preconditions.checkNotNull(lockDefinition, "Try Lock for database arg 
lock definition can not be null.");
+        LockNameDefinition lockNameDefinition = 
lockDefinition.getLockNameDefinition();
+        Preconditions.checkNotNull(lockNameDefinition, "Is locked database 
args lock name definition can not be null.");
+        return lockStateContext.isLocked(lockNameDefinition);
     }
 }
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/ShardingSphereLockManager.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/ShardingSphereLockManager.java
index db9106930e4..cc52ac4a73a 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/ShardingSphereLockManager.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/ShardingSphereLockManager.java
@@ -21,7 +21,7 @@ import 
org.apache.shardingsphere.infra.eventbus.EventBusContext;
 import org.apache.shardingsphere.infra.lock.LockScope;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.internal.ShardingSphereInternalLockHolder;
-import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
 import org.apache.shardingsphere.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.spi.type.required.RequiredSPI;
 
@@ -50,32 +50,32 @@ public interface ShardingSphereLockManager extends 
RequiredSPI {
     /**
      * Try lock for database.
      *
-     * @param lockNameDefinition lock name definition
+     * @param lockDefinition lock definition
      * @return is locked or not
      */
-    boolean tryLock(DatabaseLockNameDefinition lockNameDefinition);
+    boolean tryLock(DatabaseLockDefinition lockDefinition);
     
     /**
-     * Try lock write for database.
+     * Try lock for database.
      *
-     * @param lockNameDefinition lock name definition
+     * @param lockDefinition lock definition
      * @param timeoutMilliseconds timeout milliseconds
      * @return is locked or not
      */
-    boolean tryLock(DatabaseLockNameDefinition lockNameDefinition, long 
timeoutMilliseconds);
+    boolean tryLock(DatabaseLockDefinition lockDefinition, long 
timeoutMilliseconds);
     
     /**
      * Release lock for database.
      *
-     * @param lockNameDefinition lock name definition
+     * @param lockDefinition lock definition
      */
-    void releaseLock(DatabaseLockNameDefinition lockNameDefinition);
+    void releaseLock(DatabaseLockDefinition lockDefinition);
     
     /**
      * Is locked database.
      *
-     * @param lockNameDefinition lock name definition
+     * @param lockDefinition lock definition
      * @return is locked or not
      */
-    boolean isLocked(DatabaseLockNameDefinition lockNameDefinition);
+    boolean isLocked(DatabaseLockDefinition lockDefinition);
 }
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
index f45ce603e74..3956b769c14 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/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
@@ -17,6 +17,7 @@
 
 package 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
 
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
 import org.apache.shardingsphere.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.spi.type.required.RequiredSPI;
 
@@ -29,22 +30,22 @@ public interface LockStateContext extends RequiredSPI {
     /**
      * Register lock state.
      *
-     * @param databaseName database name
+     * @param lockName lock name definition
      */
-    void register(String databaseName);
+    void register(LockNameDefinition lockName);
     
     /**
-     * Un register lock state.
+     * Un-register lock state.
      *
-     * @param databaseName database name
+     * @param lockName lock name definition
      */
-    void unregister(String databaseName);
+    void unregister(LockNameDefinition lockName);
     
     /**
      * Is locked.
      *
-     * @param databaseName database name
+     * @param lockName lock name definition
      * @return is locked or not
      */
-    boolean isLocked(String databaseName);
+    boolean isLocked(LockNameDefinition 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/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
index b6337294570..fb2bd79c7f4 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/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
@@ -17,10 +17,10 @@
 
 package 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
 
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
+
 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;
@@ -34,13 +34,15 @@ public final class ShardingSphereLockStateContext 
implements LockStateContext {
     
     private final AtomicInteger lockCounter = new AtomicInteger(0);
     
-    private final Map<String, Set<String>> lockStates = new LinkedHashMap<>();
+    private final Map<String, Boolean> lockStates = new LinkedHashMap<>();
     
     @Override
-    public void register(final String databaseName) {
+    public void register(final LockNameDefinition lockName) {
         lock.writeLock().lock();
         try {
-            if (lockStates.computeIfAbsent(databaseName, locks -> new 
LinkedHashSet<>()).add("@all")) {
+            Boolean isLocked = lockStates.get(lockName.getLockName());
+            if (null == isLocked || !isLocked) {
+                lockStates.put(lockName.getLockName(), true);
                 lockCounter.incrementAndGet();
             }
         } finally {
@@ -49,10 +51,12 @@ public final class ShardingSphereLockStateContext 
implements LockStateContext {
     }
     
     @Override
-    public void unregister(final String databaseName) {
+    public void unregister(final LockNameDefinition lockName) {
         lock.writeLock().lock();
         try {
-            if (lockStates.get(databaseName).remove("@all")) {
+            Boolean isLocked = lockStates.get(lockName.getLockName());
+            if (null != isLocked && isLocked) {
+                lockStates.put(lockName.getLockName(), false);
                 lockCounter.decrementAndGet();
             }
         } finally {
@@ -61,16 +65,20 @@ public final class ShardingSphereLockStateContext 
implements LockStateContext {
     }
     
     @Override
-    public boolean isLocked(final String databaseName) {
-        if (0 == lockCounter.get()) {
+    public boolean isLocked(final LockNameDefinition lockName) {
+        if (isExistLock()) {
             return false;
         }
         lock.readLock().lock();
         try {
-            Set<String> locks = lockStates.get(databaseName);
-            return null != locks && !locks.isEmpty();
+            Boolean isLocked = lockStates.get(lockName.getLockName());
+            return null != isLocked && isLocked;
         } finally {
             lock.readLock().unlock();
         }
     }
+    
+    private boolean isExistLock() {
+        return 0 == lockCounter.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/DistributedLockContextTest.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/DistributedLockContextTest.java
index 25b6b805ccf..2c05ab0c60c 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/DistributedLockContextTest.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/DistributedLockContextTest.java
@@ -25,7 +25,7 @@ import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMeta
 import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
 import org.apache.shardingsphere.infra.lock.LockScope;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
-import 
org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.LockDefinitionFactory;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import org.junit.Test;
 
@@ -60,7 +60,7 @@ public final class DistributedLockContextTest {
         ComputeNodeInstance currentInstance = new ComputeNodeInstance(new 
ProxyInstanceMetaData("1", 3307));
         DistributedLockContext distributedLockContext = new 
DistributedLockContext(mock(ClusterPersistRepository.class));
         new InstanceContext(currentInstance, mock(WorkerIdGenerator.class), 
mock(ModeConfiguration.class), distributedLockContext, eventBusContext);
-        
distributedLockContext.releaseLock(LockNameDefinitionFactory.newDatabaseDefinition("database"));
+        
distributedLockContext.releaseLock(LockDefinitionFactory.newDatabaseLockDefinition("database"));
     }
     
     @Test
@@ -68,6 +68,6 @@ public final class DistributedLockContextTest {
         ComputeNodeInstance currentInstance = new ComputeNodeInstance(new 
ProxyInstanceMetaData("1", 3307));
         DistributedLockContext distributedLockContext = new 
DistributedLockContext(mock(ClusterPersistRepository.class));
         new InstanceContext(currentInstance, mock(WorkerIdGenerator.class), 
mock(ModeConfiguration.class), distributedLockContext, eventBusContext);
-        
assertFalse(distributedLockContext.isLocked(LockNameDefinitionFactory.newDatabaseDefinition("database")));
+        
assertFalse(distributedLockContext.isLocked(LockDefinitionFactory.newDatabaseLockDefinition("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/database/watcher/DatabaseLockChangedWatcherTest.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/watcher/DatabaseLockChangedWatcherTest.java
index 893645226e9..07ace734bd1 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/watcher/DatabaseLockChangedWatcherTest.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/watcher/DatabaseLockChangedWatcherTest.java
@@ -62,12 +62,12 @@ public final class DatabaseLockChangedWatcherTest {
         Optional<GovernanceEvent> addGovernanceEvent = 
watcher.createGovernanceEvent(addDataChangedEvent);
         assertTrue(addGovernanceEvent.isPresent());
         assertThat(addGovernanceEvent.get(), 
instanceOf(DatabaseLockedEvent.class));
-        assertThat(((DatabaseLockedEvent) 
addGovernanceEvent.get()).getDatabase(), is("sharding_db"));
+        assertThat(((DatabaseLockedEvent) 
addGovernanceEvent.get()).getLockNameDefinition().getDatabaseName(), 
is("sharding_db"));
         DataChangedEvent deleteDataChangedEvent = new 
DataChangedEvent(eventKey, "127.0.0.1@3307", DataChangedEvent.Type.DELETED);
         Optional<GovernanceEvent> deleteGovernanceEvent = 
watcher.createGovernanceEvent(deleteDataChangedEvent);
         assertTrue(deleteGovernanceEvent.isPresent());
         assertThat(deleteGovernanceEvent.get(), 
instanceOf(DatabaseLockReleasedEvent.class));
-        assertThat(((DatabaseLockReleasedEvent) 
deleteGovernanceEvent.get()).getDatabase(), is("sharding_db"));
+        assertThat(((DatabaseLockReleasedEvent) 
deleteGovernanceEvent.get()).getLockNameDefinition().getDatabaseName(), 
is("sharding_db"));
         DataChangedEvent updateDataChangedEvent = new 
DataChangedEvent(eventKey, "127.0.0.1@3307", DataChangedEvent.Type.UPDATED);
         Optional<GovernanceEvent> updateGovernanceEvent = 
watcher.createGovernanceEvent(updateDataChangedEvent);
         assertFalse(updateGovernanceEvent.isPresent());
@@ -83,13 +83,13 @@ public final class DatabaseLockChangedWatcherTest {
         Optional<GovernanceEvent> addGovernanceEvent = 
watcher.createGovernanceEvent(addDataChangedEvent);
         assertTrue(addGovernanceEvent.isPresent());
         assertThat(addGovernanceEvent.get(), 
instanceOf(DatabaseAckLockedEvent.class));
-        assertThat(((DatabaseAckLockedEvent) 
addGovernanceEvent.get()).getDatabase(), is("sharding_db"));
+        assertThat(((DatabaseAckLockedEvent) 
addGovernanceEvent.get()).getLockNameDefinition().getDatabaseName(), 
is("sharding_db"));
         assertThat(((DatabaseAckLockedEvent) 
addGovernanceEvent.get()).getLockedInstance(), is("127.0.0.1@3307"));
         DataChangedEvent deleteDataChangedEvent = new 
DataChangedEvent(eventKey, "127.0.0.1@3307", DataChangedEvent.Type.DELETED);
         Optional<GovernanceEvent> deleteGovernanceEvent = 
watcher.createGovernanceEvent(deleteDataChangedEvent);
         assertTrue(deleteGovernanceEvent.isPresent());
         assertThat(deleteGovernanceEvent.get(), 
instanceOf(DatabaseAckLockReleasedEvent.class));
-        assertThat(((DatabaseAckLockReleasedEvent) 
deleteGovernanceEvent.get()).getDatabase(), is("sharding_db"));
+        assertThat(((DatabaseAckLockReleasedEvent) 
deleteGovernanceEvent.get()).getLockNameDefinition().getDatabaseName(), 
is("sharding_db"));
         assertThat(((DatabaseAckLockReleasedEvent) 
deleteGovernanceEvent.get()).getLockedInstance(), is("127.0.0.1@3307"));
         DataChangedEvent updateDataChangedEvent = new 
DataChangedEvent(eventKey, "127.0.0.1@3307", DataChangedEvent.Type.UPDATED);
         Optional<GovernanceEvent> updateGovernanceEvent = 
watcher.createGovernanceEvent(updateDataChangedEvent);
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/ShardingSphereDistributedGlobalLockManagerTest.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/ShardingSphereDistributedGlobalLockManager
 [...]
index e8c5da371fe..7d262938814 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/ShardingSphereDistributedGlobalLockManagerTest.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/ShardingSphereDistributedGlobalLockManagerTest.java
@@ -17,12 +17,13 @@
 
 package 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager;
 
-import org.apache.shardingsphere.infra.lock.LockLevel;
 import org.apache.shardingsphere.infra.lock.LockMode;
 import org.apache.shardingsphere.infra.lock.LockScope;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.ShardingSphereDistributedDatabaseLock;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.ShardingSphereDistributedGlobalLock;
+import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.ShardingSphereLockStateContext;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
 import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
 import org.junit.Before;
 import org.junit.Test;
@@ -41,6 +42,10 @@ public final class 
ShardingSphereDistributedGlobalLockManagerTest {
     
     @Before
     public void init() throws ReflectiveOperationException {
+        ShardingSphereLockStateContext lockStateContext = new 
ShardingSphereLockStateContext();
+        Field lockStateContextField = 
shardingSphereDistributedLockManager.getClass().getDeclaredField("lockStateContext");
+        lockStateContextField.setAccessible(true);
+        lockStateContextField.set(shardingSphereDistributedLockManager, 
lockStateContext);
         ShardingSphereDistributedGlobalLock distributedLock = 
mock(ShardingSphereDistributedGlobalLock.class);
         Field distributedLockField = 
shardingSphereDistributedLockManager.getClass().getDeclaredField("globalDistributedLock");
         distributedLockField.setAccessible(true);
@@ -59,21 +64,21 @@ public final class 
ShardingSphereDistributedGlobalLockManagerTest {
     
     @Test
     public void assertTryReadLock() {
-        assertTrue(shardingSphereDistributedLockManager.tryLock(new 
DatabaseLockNameDefinition("databaseName", LockMode.READ, LockLevel.DATABASE), 
3000L));
+        assertTrue(shardingSphereDistributedLockManager.tryLock(new 
DatabaseLockDefinition(LockMode.READ, new 
DatabaseLockNameDefinition("databaseName")), 3000L));
     }
     
     @Test(expected = UnsupportedOperationException.class)
     public void assertTryWriteLock() {
-        shardingSphereDistributedLockManager.tryLock(new 
DatabaseLockNameDefinition("databaseName", LockMode.WRITE, LockLevel.DATABASE), 
3000L);
+        shardingSphereDistributedLockManager.tryLock(new 
DatabaseLockDefinition(LockMode.WRITE, new 
DatabaseLockNameDefinition("databaseName")), 3000L);
     }
     
     @Test
     public void assertReleaseLock() {
-        shardingSphereDistributedLockManager.releaseLock(new 
DatabaseLockNameDefinition("databaseName", LockMode.READ, LockLevel.DATABASE));
+        shardingSphereDistributedLockManager.releaseLock(new 
DatabaseLockDefinition(LockMode.READ, new 
DatabaseLockNameDefinition("databaseName")));
     }
     
     @Test
     public void assertIsLocked() {
-        assertFalse(shardingSphereDistributedLockManager.isLocked(new 
DatabaseLockNameDefinition("databaseName", LockMode.READ, LockLevel.DATABASE)));
+        assertFalse(shardingSphereDistributedLockManager.isLocked(new 
DatabaseLockDefinition(LockMode.READ, new 
DatabaseLockNameDefinition("databaseName"))));
     }
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java
index 632d63eea44..6872e673ba8 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.mode.manager.memory.lock;
 import org.apache.shardingsphere.infra.lock.LockScope;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import org.apache.shardingsphere.mode.manager.lock.AbstractLockContext;
-import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
 
 /**
  * Memory lock context.
@@ -35,22 +35,22 @@ public final class MemoryLockContext extends 
AbstractLockContext {
     }
     
     @Override
-    protected boolean tryLock(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        return memoryLock.tryLock(lockNameDefinition.getDatabaseName());
+    protected boolean tryLock(final DatabaseLockDefinition lockDefinition) {
+        return 
memoryLock.tryLock(lockDefinition.getLockNameDefinition().getDatabaseName());
     }
     
     @Override
-    protected boolean tryLock(final DatabaseLockNameDefinition 
lockNameDefinition, final long timeoutMilliseconds) {
-        return memoryLock.tryLock(lockNameDefinition.getDatabaseName(), 
timeoutMilliseconds);
+    protected boolean tryLock(final DatabaseLockDefinition lockDefinition, 
final long timeoutMilliseconds) {
+        return 
memoryLock.tryLock(lockDefinition.getLockNameDefinition().getDatabaseName(), 
timeoutMilliseconds);
     }
     
     @Override
-    protected void releaseLock(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        memoryLock.releaseLock(lockNameDefinition.getDatabaseName());
+    protected void releaseLock(final DatabaseLockDefinition lockDefinition) {
+        
memoryLock.releaseLock(lockDefinition.getLockNameDefinition().getDatabaseName());
     }
     
     @Override
-    protected boolean isLocked(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        return memoryLock.isLocked(lockNameDefinition.getDatabaseName());
+    protected boolean isLocked(final DatabaseLockDefinition lockDefinition) {
+        return 
memoryLock.isLocked(lockDefinition.getLockNameDefinition().getDatabaseName());
     }
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java
index a0e0678f82e..3336e66ad6b 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java
@@ -20,7 +20,7 @@ package 
org.apache.shardingsphere.mode.manager.standalone.lock;
 import org.apache.shardingsphere.infra.lock.LockScope;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import org.apache.shardingsphere.mode.manager.lock.AbstractLockContext;
-import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
 
 /**
  * Standalone lock context.
@@ -35,22 +35,22 @@ public final class StandaloneLockContext extends 
AbstractLockContext {
     }
     
     @Override
-    protected boolean tryLock(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        return standaloneLock.tryLock(lockNameDefinition.getDatabaseName());
+    protected boolean tryLock(final DatabaseLockDefinition lockDefinition) {
+        return 
standaloneLock.tryLock(lockDefinition.getLockNameDefinition().getDatabaseName());
     }
     
     @Override
-    protected boolean tryLock(final DatabaseLockNameDefinition 
lockNameDefinition, final long timeoutMilliseconds) {
-        return standaloneLock.tryLock(lockNameDefinition.getDatabaseName(), 
timeoutMilliseconds);
+    protected boolean tryLock(final DatabaseLockDefinition lockDefinition, 
final long timeoutMilliseconds) {
+        return 
standaloneLock.tryLock(lockDefinition.getLockNameDefinition().getDatabaseName(),
 timeoutMilliseconds);
     }
     
     @Override
-    protected void releaseLock(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        standaloneLock.releaseLock(lockNameDefinition.getDatabaseName());
+    protected void releaseLock(final DatabaseLockDefinition lockDefinition) {
+        
standaloneLock.releaseLock(lockDefinition.getLockNameDefinition().getDatabaseName());
     }
     
     @Override
-    protected boolean isLocked(final DatabaseLockNameDefinition 
lockNameDefinition) {
-        return standaloneLock.isLocked(lockNameDefinition.getDatabaseName());
+    protected boolean isLocked(final DatabaseLockDefinition lockDefinition) {
+        return 
standaloneLock.isLocked(lockDefinition.getLockNameDefinition().getDatabaseName());
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index 7349d048844..0d2d22723a2 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -38,7 +38,7 @@ import 
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRul
 import org.apache.shardingsphere.mode.manager.lock.LockJudgeEngine;
 import org.apache.shardingsphere.mode.manager.lock.LockJudgeEngineBuilder;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import 
org.apache.shardingsphere.proxy.backend.exception.DatabaseLockedException;
+import 
org.apache.shardingsphere.proxy.backend.exception.UnsupportedUpdateOperationException;
 import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
 import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import 
org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
@@ -198,7 +198,7 @@ public abstract class DatabaseCommunicationEngine<T> {
     
     protected void checkLockedDatabase(final ExecutionContext 
executionContext) {
         if 
(lockJudgeEngine.isLocked(backendConnection.getConnectionSession().getDatabaseName(),
 executionContext.getSqlStatementContext())) {
-            throw new 
DatabaseLockedException(backendConnection.getConnectionSession().getDatabaseName());
+            throw new 
UnsupportedUpdateOperationException(backendConnection.getConnectionSession().getDatabaseName());
         }
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/DatabaseLockedException.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedUpdateOperationException.java
similarity index 85%
rename from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/DatabaseLockedException.java
rename to 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedUpdateOperationException.java
index f9e7c21f5d5..2f49f27550e 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/DatabaseLockedException.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedUpdateOperationException.java
@@ -21,11 +21,11 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
 /**
- * database locked exception.
+ * Unsupported update operation exception.
  */
 @RequiredArgsConstructor
 @Getter
-public final class DatabaseLockedException extends BackendException {
+public final class UnsupportedUpdateOperationException extends 
BackendException {
     
     private static final long serialVersionUID = -5409739222950362541L;
     
@@ -33,7 +33,7 @@ public final class DatabaseLockedException extends 
BackendException {
     
     private final String errorMessage;
     
-    public DatabaseLockedException(final String databaseName) {
+    public UnsupportedUpdateOperationException(final String databaseName) {
         this(databaseName, String.format("The database %s is read-only", 
databaseName));
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
index 096e5afbbf8..3eab778d257 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
@@ -25,9 +25,9 @@ import 
org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableRALStatem
 import org.apache.shardingsphere.distsql.parser.statement.rdl.RDLStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
 import org.apache.shardingsphere.infra.lock.LockContext;
-import 
org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
+import 
org.apache.shardingsphere.mode.manager.lock.definition.LockDefinitionFactory;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import 
org.apache.shardingsphere.proxy.backend.exception.DatabaseLockedException;
+import 
org.apache.shardingsphere.proxy.backend.exception.UnsupportedUpdateOperationException;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.RALBackendHandlerFactory;
@@ -73,8 +73,8 @@ public final class DistSQLBackendHandlerFactory {
             return;
         }
         LockContext lockContext = 
ProxyContext.getInstance().getContextManager().getInstanceContext().getLockContext();
-        if 
(lockContext.isLocked(LockNameDefinitionFactory.newDatabaseDefinition(databaseName)))
 {
-            throw new DatabaseLockedException(databaseName);
+        if 
(lockContext.isLocked(LockDefinitionFactory.newDatabaseLockDefinition(databaseName)))
 {
+            throw new UnsupportedUpdateOperationException(databaseName);
         }
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
index c9080eb6efe..1b431f600c9 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
@@ -29,7 +29,7 @@ import 
org.apache.shardingsphere.infra.exception.DatabaseNotExistedException;
 import org.apache.shardingsphere.proxy.backend.exception.CircuitBreakException;
 import 
org.apache.shardingsphere.proxy.backend.exception.DBCreateExistsException;
 import 
org.apache.shardingsphere.proxy.backend.exception.DBDropNotExistsException;
-import 
org.apache.shardingsphere.proxy.backend.exception.DatabaseLockedException;
+import 
org.apache.shardingsphere.proxy.backend.exception.UnsupportedUpdateOperationException;
 import 
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException;
 import 
org.apache.shardingsphere.proxy.backend.exception.ResourceNotExistedException;
 import 
org.apache.shardingsphere.proxy.backend.exception.RuleNotExistedException;
@@ -112,8 +112,8 @@ public final class MySQLErrPacketFactory {
         if (cause instanceof RuleNotExistedException || cause instanceof 
ResourceNotExistedException) {
             return new MySQLErrPacket(1, 
MySQLServerErrorCode.ER_SP_DOES_NOT_EXIST);
         }
-        if (cause instanceof DatabaseLockedException) {
-            DatabaseLockedException exception = (DatabaseLockedException) 
cause;
+        if (cause instanceof UnsupportedUpdateOperationException) {
+            UnsupportedUpdateOperationException exception = 
(UnsupportedUpdateOperationException) cause;
             return new MySQLErrPacket(1, 
CommonErrorCode.DATABASE_WRITE_LOCKED, exception.getDatabaseName());
         }
         if (cause instanceof TableLockWaitTimeoutException) {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/err/PostgreSQLErrPacketFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/err/PostgreSQLErrPacketFactory.java
index a31720a3e34..88adb3ce263 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/err/PostgreSQLErrPacketFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/err/PostgreSQLErrPacketFactory.java
@@ -25,7 +25,7 @@ import 
org.apache.shardingsphere.db.protocol.postgresql.constant.PostgreSQLMessa
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLErrorResponsePacket;
 import 
org.apache.shardingsphere.proxy.backend.exception.DBCreateExistsException;
 import 
org.apache.shardingsphere.proxy.backend.exception.InTransactionException;
-import 
org.apache.shardingsphere.proxy.backend.exception.DatabaseLockedException;
+import 
org.apache.shardingsphere.proxy.backend.exception.UnsupportedUpdateOperationException;
 import 
org.apache.shardingsphere.proxy.frontend.postgresql.authentication.exception.InvalidAuthorizationSpecificationException;
 import 
org.apache.shardingsphere.proxy.frontend.postgresql.authentication.exception.PostgreSQLAuthenticationException;
 import 
org.apache.shardingsphere.proxy.frontend.postgresql.authentication.exception.PostgreSQLProtocolViolationException;
@@ -78,8 +78,8 @@ public final class PostgreSQLErrPacketFactory {
             return 
PostgreSQLErrorResponsePacket.newBuilder(PostgreSQLMessageSeverityLevel.ERROR, 
PostgreSQLErrorCode.DUPLICATE_DATABASE,
                     
String.format(PostgreSQLErrorCode.DUPLICATE_DATABASE.getConditionName(), 
((DBCreateExistsException) cause).getDatabaseName())).build();
         }
-        if (cause instanceof DatabaseLockedException) {
-            DatabaseLockedException exception = (DatabaseLockedException) 
cause;
+        if (cause instanceof UnsupportedUpdateOperationException) {
+            UnsupportedUpdateOperationException exception = 
(UnsupportedUpdateOperationException) cause;
             return 
PostgreSQLErrorResponsePacket.newBuilder(PostgreSQLMessageSeverityLevel.ERROR, 
PostgreSQLErrorCode.MODIFYING_SQL_DATA_NOT_PERMITTED, 
exception.getErrorMessage()).build();
         }
         // TODO PostgreSQL need consider FrontendConnectionLimitException

Reply via email to