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 2021/05/28 10:16:35 UTC

[shardingsphere] branch master updated: Refactor lock module (#10529)

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 56eab8abc Refactor lock module (#10529)
56eab8abc is described below

commit 56eab8abc0c06a09b9c762a236e085d7a6633989
Author: Liang Zhang <te...@163.com>
AuthorDate: Fri May 28 18:16:03 2021 +0800

    Refactor lock module (#10529)
    
    * Refactor LockAck
    
    * Static LockNode
    
    * Move LockRegistryService
    
    * Move LockRegistryService to lock package
    
    * Simplify LockAck
    
    * Merge lock.impl package
    
    * Remove useless javadoc
    
    * Rename ShardingSphereDistributeLock
---
 .../metadata/GovernanceMetaDataContexts.java       |  7 +--
 .../governance/core/GovernanceFacade.java          |  1 +
 ...Lock.java => ShardingSphereDistributeLock.java} | 53 ++++++----------------
 .../governance/core/lock/impl/LockAck.java         | 13 ++----
 .../core/lock/{node => impl}/LockNode.java         | 15 +++---
 .../state => lock/impl}/LockRegistryService.java   | 28 +++++-------
 .../governance/core/lock/node/LockAck.java         | 16 -------
 .../governance/core/registry/RegistryCenter.java   |  2 +-
 .../listener/impl/LockChangedListener.java         | 13 ++----
 ....java => ShardingSphereDistributeLockTest.java} | 30 ++++++------
 .../core/lock/{node => impl}/LockNodeTest.java     | 18 ++------
 .../impl}/LockRegistryServiceTest.java             |  8 ++--
 .../infra/lock/InnerLockReleasedEvent.java         |  6 +--
 13 files changed, 78 insertions(+), 132 deletions(-)

diff --git a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
index c07bfa2..03d9514 100644
--- a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
+++ b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
@@ -21,7 +21,7 @@ import com.google.common.collect.Maps;
 import com.google.common.eventbus.Subscribe;
 import org.apache.shardingsphere.governance.context.authority.listener.event.AuthorityChangedEvent;
 import org.apache.shardingsphere.governance.core.GovernanceFacade;
-import org.apache.shardingsphere.governance.core.lock.GovernanceLock;
+import org.apache.shardingsphere.governance.core.lock.ShardingSphereDistributeLock;
 import org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceChangeCompletedEvent;
 import org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceChangedEvent;
 import org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataChangedEvent;
@@ -109,8 +109,9 @@ public final class GovernanceMetaDataContexts implements MetaDataContexts {
     }
     
     private ShardingSphereLock createShardingSphereLock() {
-        return metaDataContexts.getProps().<Boolean>getValue(ConfigurationPropertyKey.LOCK_ENABLED) ? new GovernanceLock(governanceFacade.getRegistryCenter(),
-                metaDataContexts.getProps().<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS)) : null;
+        return metaDataContexts.getProps().<Boolean>getValue(ConfigurationPropertyKey.LOCK_ENABLED)
+                ? new ShardingSphereDistributeLock(governanceFacade.getRegistryCenterRepository(), metaDataContexts.getProps().<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS))
+                : null;
     }
     
     @Override
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/GovernanceFacade.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/GovernanceFacade.java
index c9b001a..00cc60c 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/GovernanceFacade.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/GovernanceFacade.java
@@ -39,6 +39,7 @@ public final class GovernanceFacade implements AutoCloseable {
     
     private boolean isOverwrite;
     
+    @Getter
     private RegistryCenterRepository registryCenterRepository;
     
     @Getter
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/ShardingSphereDistributeLock.java
similarity index 69%
rename from shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
rename to shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/ShardingSphereDistributeLock.java
index d86b9e5..bfaef8a 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/ShardingSphereDistributeLock.java
@@ -18,10 +18,11 @@
 package org.apache.shardingsphere.governance.core.lock;
 
 import com.google.common.eventbus.Subscribe;
+import org.apache.shardingsphere.governance.core.lock.impl.LockRegistryService;
 import org.apache.shardingsphere.governance.core.registry.listener.event.lock.LockNotificationEvent;
 import org.apache.shardingsphere.governance.core.registry.listener.event.lock.LockReleasedEvent;
 import org.apache.shardingsphere.governance.core.registry.listener.event.props.PropertiesChangedEvent;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
+import org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
@@ -32,62 +33,38 @@ import java.util.ArrayList;
 import java.util.Collection;
 
 /**
- * Governance lock.
+ * ShardingSphere distribute lock.
  */
-public final class GovernanceLock implements ShardingSphereLock {
+public final class ShardingSphereDistributeLock implements ShardingSphereLock {
     
-    private final RegistryCenter registryCenter;
+    private final LockRegistryService lockService;
     
     private long lockTimeoutMilliseconds;
     
     private final Collection<String> lockedResources = new ArrayList<>();
     
-    public GovernanceLock(final RegistryCenter registryCenter, final long lockTimeoutMilliseconds) {
-        this.registryCenter = registryCenter;
+    public ShardingSphereDistributeLock(final RegistryCenterRepository registryCenterRepository, final long lockTimeoutMilliseconds) {
+        lockService = new LockRegistryService(registryCenterRepository);
         this.lockTimeoutMilliseconds = lockTimeoutMilliseconds;
         ShardingSphereEventBus.getInstance().register(this);
     }
     
-    /**
-     * Try to get lock with default time out.
-     *
-     * @param lockName lock name
-     * @return true if get the lock, false if not
-     */
     @Override
     public boolean tryLock(final String lockName) {
-        return registryCenter.getLockService().tryLock(lockName, lockTimeoutMilliseconds) && registryCenter.getLockService().checkLockAck(lockName);
+        return lockService.tryLock(lockName, lockTimeoutMilliseconds) && lockService.checkLockAck(lockName);
     }
     
-    /**
-     * Try to get lock.
-     * 
-     * @param lockName lock name
-     * @param timeoutMilliseconds time out milliseconds to acquire lock
-     * @return true if get the lock, false if not
-     */
     @Override
     public boolean tryLock(final String lockName, final long timeoutMilliseconds) {
-        return registryCenter.getLockService().tryLock(lockName, timeoutMilliseconds) && registryCenter.getLockService().checkLockAck(lockName);
+        return lockService.tryLock(lockName, timeoutMilliseconds) && lockService.checkLockAck(lockName);
     }
     
-    /**
-     * Release lock.
-     * 
-     * @param lockName lock name
-     */
     @Override
     public void releaseLock(final String lockName) {
-        registryCenter.getLockService().releaseLock(lockName);
-        registryCenter.getLockService().checkUnlockAck(lockName);
+        lockService.releaseLock(lockName);
+        lockService.checkUnlockAck(lockName);
     }
     
-    /**
-     * Check if the lock is exist.
-     * 
-     * @param lockName lockName
-     * @return true if exist, false if not
-     */
     @Override
     public boolean isLocked(final String lockName) {
         return lockedResources.contains(lockName);
@@ -95,7 +72,7 @@ public final class GovernanceLock implements ShardingSphereLock {
     
     @Override
     public boolean isReleased(final String lockName) {
-        return registryCenter.getLockService().checkUnlockAck(lockName);
+        return lockService.checkUnlockAck(lockName);
     }
     
     @Override
@@ -122,7 +99,7 @@ public final class GovernanceLock implements ShardingSphereLock {
     @Subscribe
     public void renew(final LockNotificationEvent event) {
         lockedResources.add(event.getLockName());
-        registryCenter.getLockService().ackLock(event.getLockName());
+        lockService.ackLock(event.getLockName());
     }
     
     /**
@@ -132,7 +109,7 @@ public final class GovernanceLock implements ShardingSphereLock {
      */
     @Subscribe
     public void renew(final LockReleasedEvent event) {
-        registryCenter.getLockService().deleteLockAck(event.getLockName());
+        lockService.deleteLockAck(event.getLockName());
     }
     
     /**
@@ -148,7 +125,7 @@ public final class GovernanceLock implements ShardingSphereLock {
     private void releaseInnerLock(final String lockName) {
         if (lockedResources.contains(lockName)) {
             lockedResources.remove(lockName);
-            registryCenter.getLockService().ackUnlock(lockName);
+            lockService.ackUnlock(lockName);
         }
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/impl/LockAck.java
similarity index 77%
copy from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java
copy to shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/impl/LockAck.java
index 18f1190..1f69bb2 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/impl/LockAck.java
@@ -15,17 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.lock;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
+package org.apache.shardingsphere.governance.core.lock.impl;
 
 /**
- * Inner lock released event.
+ * Lock ack.
  */
-@AllArgsConstructor
-@Getter
-public final class InnerLockReleasedEvent {
+public enum LockAck {
     
-    private String lockName;
+    LOCKED, UNLOCKED
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/impl/LockNode.java
similarity index 82%
rename from shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java
rename to shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/impl/LockNode.java
index e4f098d..9a28e92 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/impl/LockNode.java
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.lock.node;
+package org.apache.shardingsphere.governance.core.lock.impl;
 
 import com.google.common.base.Joiner;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 
 import java.util.Optional;
 import java.util.regex.Matcher;
@@ -26,6 +28,7 @@ import java.util.regex.Pattern;
 /**
  * Lock node.
  */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class LockNode {
     
     private static final String LOCK_NODE_ROOT = "lock";
@@ -39,7 +42,7 @@ public final class LockNode {
      * 
      * @return lock root node path
      */
-    public String getLockRootNodePath() {
+    public static String getLockRootNodePath() {
         return Joiner.on("/").join("", LOCK_NODE_ROOT, LOCKS_NODE);
     }
     
@@ -49,7 +52,7 @@ public final class LockNode {
      * @param lockName lock name
      * @return lock node path
      */
-    public String getLockNodePath(final String lockName) {
+    public static String getLockNodePath(final String lockName) {
         return Joiner.on("/").join("", LOCK_NODE_ROOT, LOCKS_NODE, lockName);
     }
     
@@ -58,7 +61,7 @@ public final class LockNode {
      * 
      * @return locked ack root node path
      */
-    public String getLockedAckRootNodePah() {
+    public static String getLockedAckRootNodePah() {
         return Joiner.on("/").join("", LOCK_NODE_ROOT, LOCKED_ACK_NODE);
     }
     
@@ -68,7 +71,7 @@ public final class LockNode {
      * @param ackLockName ack lock name
      * @return locked ack node path
      */
-    public String getLockedAckNodePath(final String ackLockName) {
+    public static String getLockedAckNodePath(final String ackLockName) {
         return Joiner.on("/").join("", LOCK_NODE_ROOT, LOCKED_ACK_NODE, ackLockName);
     }
     
@@ -78,7 +81,7 @@ public final class LockNode {
      * @param lockNodePath lock node path
      * @return lock name
      */
-    public Optional<String> getLockName(final String lockNodePath) {
+    public static Optional<String> getLockName(final String lockNodePath) {
         Pattern pattern = Pattern.compile(getLockRootNodePath() + "/" + "(.+)/(.+)$", Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(lockNodePath);
         return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryService.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/impl/LockRegistryService.java
similarity index 79%
rename from shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryService.java
rename to shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/impl/LockRegistryService.java
index 8f4251c..a37bc07 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryService.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/impl/LockRegistryService.java
@@ -15,13 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.registry.service.state;
+package org.apache.shardingsphere.governance.core.lock.impl;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Strings;
-import org.apache.shardingsphere.governance.core.lock.node.LockAck;
-import org.apache.shardingsphere.governance.core.lock.node.LockNode;
 import org.apache.shardingsphere.governance.core.registry.instance.GovernanceInstance;
+import org.apache.shardingsphere.governance.core.registry.service.state.StatesNode;
 import org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 
 import java.util.Collection;
@@ -40,18 +39,15 @@ public final class LockRegistryService {
     
     private final RegistryCenterRepository repository;
     
-    private final LockNode lockNode;
-    
     public LockRegistryService(final RegistryCenterRepository repository) {
         instanceId = GovernanceInstance.getInstance().getId();
         this.repository = repository;
-        lockNode = new LockNode();
         initLockNode();
     }
     
     private void initLockNode() {
-        repository.persist(lockNode.getLockRootNodePath(), "");
-        repository.persist(lockNode.getLockedAckRootNodePah(), "");
+        repository.persist(LockNode.getLockRootNodePath(), "");
+        repository.persist(LockNode.getLockedAckRootNodePah(), "");
     }
     
     /**
@@ -62,7 +58,7 @@ public final class LockRegistryService {
      * @return true if get the lock, false if not
      */
     public boolean tryLock(final String lockName, final long timeoutMilliseconds) {
-        return repository.tryLock(lockNode.getLockNodePath(lockName), timeoutMilliseconds, TimeUnit.MILLISECONDS);
+        return repository.tryLock(LockNode.getLockNodePath(lockName), timeoutMilliseconds, TimeUnit.MILLISECONDS);
     }
     
     /**
@@ -71,7 +67,7 @@ public final class LockRegistryService {
      * @param lockName lock name
      */
     public void releaseLock(final String lockName) {
-        repository.releaseLock(lockNode.getLockNodePath(lockName));
+        repository.releaseLock(LockNode.getLockNodePath(lockName));
     }
     
     /**
@@ -80,7 +76,7 @@ public final class LockRegistryService {
      * @param lockName lock name
      */
     public void ackLock(final String lockName) {
-        repository.persistEphemeral(lockNode.getLockedAckNodePath(Joiner.on("-").join(instanceId, lockName)), LockAck.LOCKED.getValue());
+        repository.persistEphemeral(LockNode.getLockedAckNodePath(Joiner.on("-").join(instanceId, lockName)), LockAck.LOCKED.name());
     }
     
     /**
@@ -89,7 +85,7 @@ public final class LockRegistryService {
      * @param lockName lock name
      */
     public void ackUnlock(final String lockName) {
-        repository.persistEphemeral(lockNode.getLockedAckNodePath(Joiner.on("-").join(instanceId, lockName)), LockAck.UNLOCKED.getValue());
+        repository.persistEphemeral(LockNode.getLockedAckNodePath(Joiner.on("-").join(instanceId, lockName)), LockAck.UNLOCKED.name());
     }
     
     /**
@@ -98,7 +94,7 @@ public final class LockRegistryService {
      * @param lockName lock name
      */
     public void deleteLockAck(final String lockName) {
-        repository.delete(lockNode.getLockedAckNodePath(Joiner.on("-").join(instanceId, lockName)));
+        repository.delete(LockNode.getLockedAckNodePath(Joiner.on("-").join(instanceId, lockName)));
     }
     
     /**
@@ -108,7 +104,7 @@ public final class LockRegistryService {
      * @return true if all instances ack lock, false if not
      */
     public boolean checkLockAck(final String lockName) {
-        boolean result = checkAck(lockName, LockAck.LOCKED.getValue());
+        boolean result = checkAck(lockName, LockAck.LOCKED.name());
         if (!result) {
             releaseLock(lockName);
         }
@@ -122,7 +118,7 @@ public final class LockRegistryService {
      * @return true if all instances ack unlock, false if not
      */
     public boolean checkUnlockAck(final String lockName) {
-        return checkAck(lockName, LockAck.UNLOCKED.getValue());
+        return checkAck(lockName, LockAck.UNLOCKED.name());
     }
     
     private boolean checkAck(final String lockName, final String ackValue) {
@@ -146,6 +142,6 @@ public final class LockRegistryService {
     }
     
     private String loadLockAck(final String instanceId, final String lockName) {
-        return Strings.nullToEmpty(repository.get(lockNode.getLockedAckNodePath(Joiner.on("-").join(instanceId, lockName))));
+        return Strings.nullToEmpty(repository.get(LockNode.getLockedAckNodePath(Joiner.on("-").join(instanceId, lockName))));
     }
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockAck.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockAck.java
deleted file mode 100644
index b6cd476..0000000
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockAck.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.apache.shardingsphere.governance.core.lock.node;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * Lock ack.
- */
-@AllArgsConstructor
-@Getter
-public enum LockAck {
-    
-    LOCKED("LOCKED"), UNLOCKED("UNLOCKED");
-    
-    private String value;
-}
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
index c6e6e94..3ecbe73 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
@@ -30,7 +30,7 @@ import org.apache.shardingsphere.governance.core.registry.service.process.Proces
 import org.apache.shardingsphere.governance.core.registry.cache.ScalingRegistrySubscriber;
 import org.apache.shardingsphere.governance.core.registry.service.schema.SchemaRegistryService;
 import org.apache.shardingsphere.governance.core.registry.service.state.DataSourceStatusRegistryService;
-import org.apache.shardingsphere.governance.core.registry.service.state.LockRegistryService;
+import org.apache.shardingsphere.governance.core.lock.impl.LockRegistryService;
 import org.apache.shardingsphere.governance.core.registry.service.state.StatesNode;
 import org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/LockChangedListener.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/LockChangedListener.java
index 9548ad3..1ceb9ba 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/LockChangedListener.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/impl/LockChangedListener.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.governance.core.registry.listener.impl;
 
-import org.apache.shardingsphere.governance.core.lock.node.LockNode;
+import org.apache.shardingsphere.governance.core.lock.impl.LockNode;
 import org.apache.shardingsphere.governance.core.registry.listener.PostGovernanceRepositoryEventListener;
 import org.apache.shardingsphere.governance.core.registry.listener.event.GovernanceEvent;
 import org.apache.shardingsphere.governance.core.registry.listener.event.lock.LockNotificationEvent;
@@ -34,20 +34,17 @@ import java.util.Optional;
  */
 public final class LockChangedListener extends PostGovernanceRepositoryEventListener<GovernanceEvent> {
     
-    private final LockNode lockNode;
-    
     public LockChangedListener(final RegistryCenterRepository registryCenterRepository) {
-        super(registryCenterRepository, Collections.singleton(new LockNode().getLockRootNodePath()));
-        lockNode = new LockNode();
+        super(registryCenterRepository, Collections.singleton(LockNode.getLockRootNodePath()));
     }
     
     @Override
     protected Optional<GovernanceEvent> createEvent(final DataChangedEvent event) {
-        if (!event.getKey().equals(lockNode.getLockRootNodePath()) && lockNode.getLockName(event.getKey()).isPresent()) {
+        if (!event.getKey().equals(LockNode.getLockRootNodePath()) && LockNode.getLockName(event.getKey()).isPresent()) {
             if (event.getType() == Type.ADDED) {
-                return Optional.of(new LockNotificationEvent(lockNode.getLockName(event.getKey()).get()));
+                return Optional.of(new LockNotificationEvent(LockNode.getLockName(event.getKey()).get()));
             } else if (event.getType() == Type.DELETED) {
-                return Optional.of(new LockReleasedEvent(lockNode.getLockName(event.getKey()).get()));
+                return Optional.of(new LockReleasedEvent(LockNode.getLockName(event.getKey()).get()));
             }
         }
         return Optional.empty();
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/ShardingSphereDistributeLockTest.java
similarity index 60%
rename from shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
rename to shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/ShardingSphereDistributeLockTest.java
index 539b437..80c626e 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/ShardingSphereDistributeLockTest.java
@@ -17,46 +17,48 @@
 
 package org.apache.shardingsphere.governance.core.lock;
 
-import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import org.apache.shardingsphere.governance.core.registry.service.state.LockRegistryService;
+import org.apache.shardingsphere.governance.core.lock.impl.LockRegistryService;
+import org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.lang.reflect.Field;
+
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class GovernanceLockTest {
+public final class ShardingSphereDistributeLockTest {
     
     @Mock
-    private LockRegistryService lockRegistryService;
+    private LockRegistryService lockService;
     
-    private GovernanceLock lock;
+    private final ShardingSphereDistributeLock lock = new ShardingSphereDistributeLock(mock(RegistryCenterRepository.class), 50L);
     
     @Before
-    public void setUp() {
-        RegistryCenter registryCenter = mock(RegistryCenter.class);
-        when(registryCenter.getLockService()).thenReturn(lockRegistryService);
-        lock = new GovernanceLock(registryCenter, 50L);
+    public void setUp() throws ReflectiveOperationException {
+        Field field = lock.getClass().getDeclaredField("lockService");
+        field.setAccessible(true);
+        field.set(lock, lockService);
     }
     
     @Test
     public void assertTryLock() {
-        when(lockRegistryService.tryLock(eq("test"), eq(50L))).thenReturn(Boolean.TRUE);
+        when(lockService.tryLock(eq("test"), eq(50L))).thenReturn(Boolean.TRUE);
         lock.tryLock("test", 50L);
-        verify(lockRegistryService).tryLock(eq("test"), eq(50L));
+        verify(lockService).tryLock(eq("test"), eq(50L));
     }
     
     @Test
     public void assertReleaseLock() {
-        when(lockRegistryService.checkUnlockAck("test")).thenReturn(Boolean.TRUE);
+        when(lockService.checkUnlockAck("test")).thenReturn(Boolean.TRUE);
         lock.releaseLock("test");
-        verify(lockRegistryService).checkUnlockAck(eq("test"));
-        verify(lockRegistryService).releaseLock(eq("test"));
+        verify(lockService).checkUnlockAck(eq("test"));
+        verify(lockService).releaseLock(eq("test"));
     }
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/impl/LockNodeTest.java
similarity index 70%
rename from shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java
rename to shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/impl/LockNodeTest.java
index 40424e9..0052a26 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/impl/LockNodeTest.java
@@ -15,9 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.lock.node;
+package org.apache.shardingsphere.governance.core.lock.impl;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -25,30 +24,23 @@ import static org.junit.Assert.assertThat;
 
 public final class LockNodeTest {
     
-    private LockNode lockNode;
-    
-    @Before
-    public void setUp() {
-        lockNode = new LockNode();
-    }
-    
     @Test
     public void assertGetLockNodePath() {
-        assertThat(lockNode.getLockNodePath("test"), is("/lock/locks/test"));
+        assertThat(LockNode.getLockNodePath("test"), is("/lock/locks/test"));
     }
     
     @Test
     public void assertGetLockName() {
-        assertThat(lockNode.getLockName("/lock/locks/sharding_db.test/_c_c2d-lock-00000").get(), is("sharding_db.test"));
+        assertThat(LockNode.getLockName("/lock/locks/sharding_db.test/_c_c2d-lock-00000").orElse(null), is("sharding_db.test"));
     }
     
     @Test
     public void assertGetLockAckNodePath() {
-        assertThat(lockNode.getLockedAckNodePath("test"), is("/lock/ack/test"));
+        assertThat(LockNode.getLockedAckNodePath("test"), is("/lock/ack/test"));
     }
     
     @Test
     public void assertGetLockedAckRootNodePah() {
-        assertThat(lockNode.getLockedAckRootNodePah(), is("/lock/ack"));
+        assertThat(LockNode.getLockedAckRootNodePah(), is("/lock/ack"));
     }
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryServiceTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/impl/LockRegistryServiceTest.java
similarity index 83%
rename from shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryServiceTest.java
rename to shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/impl/LockRegistryServiceTest.java
index 85cc0d8..0e46f23 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/state/LockRegistryServiceTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/impl/LockRegistryServiceTest.java
@@ -15,9 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.registry.service.state;
+package org.apache.shardingsphere.governance.core.lock.impl;
 
-import org.apache.shardingsphere.governance.core.lock.node.LockNode;
 import org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.junit.Before;
 import org.junit.Test;
@@ -29,7 +28,6 @@ import java.lang.reflect.Field;
 import java.util.concurrent.TimeUnit;
 
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.verify;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -51,13 +49,13 @@ public final class LockRegistryServiceTest {
     @Test
     public void assertTryLock() {
         lockRegistryService.tryLock("test", 50L);
-        verify(registryCenterRepository).tryLock(eq(new LockNode().getLockNodePath("test")), eq(50L), eq(TimeUnit.MILLISECONDS));
+        verify(registryCenterRepository).tryLock(LockNode.getLockNodePath("test"), 50L, TimeUnit.MILLISECONDS);
     }
     
     @Test
     public void assertReleaseLock() {
         lockRegistryService.releaseLock("test");
-        verify(registryCenterRepository).releaseLock(eq(new LockNode().getLockNodePath("test")));
+        verify(registryCenterRepository).releaseLock(LockNode.getLockNodePath("test"));
     }
     
     @Test
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java
index 18f1190..a30a0f0 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java
@@ -17,15 +17,15 @@
 
 package org.apache.shardingsphere.infra.lock;
 
-import lombok.AllArgsConstructor;
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 
 /**
  * Inner lock released event.
  */
-@AllArgsConstructor
+@RequiredArgsConstructor
 @Getter
 public final class InnerLockReleasedEvent {
     
-    private String lockName;
+    private final String lockName;
 }