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

qiulu 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 c5898e0  Refactor governance lock (#9820)
c5898e0 is described below

commit c5898e064b03ba3b285c68c27b77f83d13897068
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Mar 25 19:45:12 2021 +0800

    Refactor governance lock (#9820)
---
 .../metadata/GovernanceMetaDataContexts.java       | 19 ++---
 .../event/model/lock/LockNotificationEvent.java    |  6 ++
 .../core/event/model/lock/LockReleasedEvent.java   |  6 ++
 .../governance/core/lock/GovernanceLock.java       | 57 +++++++++++++--
 .../governance/core/lock/node/LockAck.java         | 16 +++++
 .../governance/core/lock/node/LockNode.java        | 35 ++++++---
 .../governance/core/registry/RegistryCenter.java   | 84 ++++++++++++++++++++++
 .../registry/listener/LockChangedListener.java     |  9 ++-
 .../governance/core/lock/GovernanceLockTest.java   |  2 +
 .../governance/core/lock/node/LockNodeTest.java    | 11 ++-
 .../infra/lock/InnerLockReleasedEvent.java         | 13 ++--
 11 files changed, 221 insertions(+), 37 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 5007420..def19de 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
@@ -22,7 +22,6 @@ import com.google.common.eventbus.Subscribe;
 import 
org.apache.shardingsphere.governance.core.event.model.auth.UserRuleChangedEvent;
 import 
org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceChangeCompletedEvent;
 import 
org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceChangedEvent;
-import 
org.apache.shardingsphere.governance.core.event.model.lock.LockReleasedEvent;
 import 
org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataChangedEvent;
 import 
org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataDeletedEvent;
 import 
org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataPersistedEvent;
@@ -221,18 +220,14 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
      */
     @Subscribe
     public synchronized void renew(final SchemaChangedEvent event) {
-        try {
-            Map<String, ShardingSphereMetaData> newMetaDataMap = new 
HashMap<>(metaDataContexts.getMetaDataMap().size(), 1);
-            for (Entry<String, ShardingSphereMetaData> entry : 
metaDataContexts.getMetaDataMap().entrySet()) {
-                String schemaName = entry.getKey();
-                ShardingSphereMetaData oldMetaData = entry.getValue();
-                ShardingSphereMetaData newMetaData = 
event.getSchemaName().equals(schemaName) ? getChangedMetaData(oldMetaData, 
event.getSchema(), schemaName) : oldMetaData;
-                newMetaDataMap.put(schemaName, newMetaData);
-            }
-            metaDataContexts = new StandardMetaDataContexts(newMetaDataMap, 
metaDataContexts.getExecutorEngine(), metaDataContexts.getAuthentication(), 
metaDataContexts.getProps());
-        } finally {
-            ShardingSphereEventBus.getInstance().post(new LockReleasedEvent());
+        Map<String, ShardingSphereMetaData> newMetaDataMap = new 
HashMap<>(metaDataContexts.getMetaDataMap().size(), 1);
+        for (Entry<String, ShardingSphereMetaData> entry : 
metaDataContexts.getMetaDataMap().entrySet()) {
+            String schemaName = entry.getKey();
+            ShardingSphereMetaData oldMetaData = entry.getValue();
+            ShardingSphereMetaData newMetaData = 
event.getSchemaName().equals(schemaName) ? getChangedMetaData(oldMetaData, 
event.getSchema(), schemaName) : oldMetaData;
+            newMetaDataMap.put(schemaName, newMetaData);
         }
+        metaDataContexts = new StandardMetaDataContexts(newMetaDataMap, 
metaDataContexts.getExecutorEngine(), metaDataContexts.getAuthentication(), 
metaDataContexts.getProps());
     }
     
     /**
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockNotificationEvent.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockNotificationEvent.java
index 1d5effd..9836e6e 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockNotificationEvent.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockNotificationEvent.java
@@ -17,10 +17,16 @@
 
 package org.apache.shardingsphere.governance.core.event.model.lock;
 
+import lombok.AllArgsConstructor;
+import lombok.Getter;
 import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
 
 /**
  * Lock notification event.
  */
+@AllArgsConstructor
+@Getter
 public final class LockNotificationEvent implements GovernanceEvent {
+    
+    private String lockName;
 }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockReleasedEvent.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockReleasedEvent.java
index e2db5e3..f41505c 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockReleasedEvent.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockReleasedEvent.java
@@ -17,10 +17,16 @@
 
 package org.apache.shardingsphere.governance.core.event.model.lock;
 
+import lombok.AllArgsConstructor;
+import lombok.Getter;
 import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
 
 /**
  * Lock released event.
  */
+@AllArgsConstructor
+@Getter
 public final class LockReleasedEvent implements GovernanceEvent {
+    
+    private String lockName;
 }
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/GovernanceLock.java
index 7465381..2b0bc76 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/GovernanceLock.java
@@ -18,13 +18,19 @@
 package org.apache.shardingsphere.governance.core.lock;
 
 import com.google.common.eventbus.Subscribe;
+import 
org.apache.shardingsphere.governance.core.event.model.lock.LockNotificationEvent;
+import 
org.apache.shardingsphere.governance.core.event.model.lock.LockReleasedEvent;
 import 
org.apache.shardingsphere.governance.core.event.model.props.PropertiesChangedEvent;
 import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
+import org.apache.shardingsphere.infra.lock.InnerLockReleasedEvent;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 
+import java.util.ArrayList;
+import java.util.Collection;
+
 /**
  * Governance lock.
  */
@@ -34,6 +40,8 @@ public final class GovernanceLock implements 
ShardingSphereLock {
     
     private long lockTimeoutMilliseconds;
     
+    private final Collection<String> lockedResources = new ArrayList<>();
+    
     public GovernanceLock(final RegistryCenter registryCenter, final long 
lockTimeoutMilliseconds) {
         this.registryCenter = registryCenter;
         this.lockTimeoutMilliseconds = lockTimeoutMilliseconds;
@@ -48,7 +56,7 @@ public final class GovernanceLock implements 
ShardingSphereLock {
      */
     @Override
     public boolean tryLock(final String lockName) {
-        return registryCenter.tryLock(lockName, lockTimeoutMilliseconds);
+        return registryCenter.tryLock(lockName, lockTimeoutMilliseconds) && 
registryCenter.checkLockAck(lockName);
     }
     
     /**
@@ -60,7 +68,7 @@ public final class GovernanceLock implements 
ShardingSphereLock {
      */
     @Override
     public boolean tryLock(final String lockName, final long 
timeoutMilliseconds) {
-        return registryCenter.tryLock(lockName, timeoutMilliseconds);
+        return registryCenter.tryLock(lockName, timeoutMilliseconds) && 
registryCenter.checkLockAck(lockName);
     }
     
     /**
@@ -70,7 +78,9 @@ public final class GovernanceLock implements 
ShardingSphereLock {
      */
     @Override
     public void releaseLock(final String lockName) {
-        registryCenter.releaseLock(lockName);
+        if (registryCenter.checkUnlockAck(lockName)) {
+            registryCenter.releaseLock(lockName);
+        }
     }
     
     /**
@@ -81,8 +91,7 @@ public final class GovernanceLock implements 
ShardingSphereLock {
      */
     @Override
     public boolean isLocked(final String lockName) {
-        //TODO
-        return false;
+        return lockedResources.contains(lockName);
     }
     
     /**
@@ -95,4 +104,42 @@ public final class GovernanceLock implements 
ShardingSphereLock {
         ConfigurationProperties props = new 
ConfigurationProperties(event.getProps());
         lockTimeoutMilliseconds = 
props.<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS);
     }
+    
+    /**
+     * Add locked resource and ack lock.
+     * 
+     * @param event lock notification event
+     */
+    @Subscribe
+    public void renew(final LockNotificationEvent event) {
+        lockedResources.add(event.getLockName());
+        registryCenter.ackLock(event.getLockName());
+    }
+    
+    /**
+     * Release lock.
+     * 
+     * @param event lock released event
+     */
+    @Subscribe
+    public void renew(final LockReleasedEvent event) {
+        releaseInnerLock(event.getLockName());
+    }
+    
+    /**
+     * Release inner lock.
+     * 
+     * @param event inner lock released event
+     */
+    @Subscribe
+    public void renew(final InnerLockReleasedEvent event) {
+        releaseInnerLock(event.getLockName());
+    }
+    
+    private void releaseInnerLock(final String lockName) {
+        if (lockedResources.contains(lockName)) {
+            lockedResources.remove(lockName);
+            registryCenter.ackUnlock(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
new file mode 100644
index 0000000..fb3ec75
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockAck.java
@@ -0,0 +1,16 @@
+package org.apache.shardingsphere.governance.core.lock.node;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * Lock ack.
+ */
+@AllArgsConstructor
+@Getter
+public enum LockAck {
+    
+    LOCKED("LOCKED"), UNLOCKED("");
+    
+    private String value;
+}
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/node/LockNode.java
index 1eed1fb..662b9b0 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/node/LockNode.java
@@ -19,6 +19,10 @@ package org.apache.shardingsphere.governance.core.lock.node;
 
 import com.google.common.base.Joiner;
 
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /**
  * Lock node.
  */
@@ -26,7 +30,9 @@ public final class LockNode {
     
     private static final String LOCK_NODE_ROOT = "lock";
     
-    private static final String LOCKED_RESOURCES_NODE = "locked_resources";
+    private static final String LOCKS_NODE = "locks";
+    
+    private static final String LOCKED_ACK_NODE = "ack";
     
     /**
      * Get lock root node path.
@@ -34,7 +40,7 @@ public final class LockNode {
      * @return lock root node path
      */
     public String getLockRootNodePath() {
-        return Joiner.on("/").join("", LOCK_NODE_ROOT);
+        return Joiner.on("/").join("", LOCK_NODE_ROOT, LOCKS_NODE);
     }
     
     /**
@@ -44,15 +50,28 @@ public final class LockNode {
      * @return lock node path
      */
     public String getLockNodePath(final String lockName) {
-        return Joiner.on("/").join("", LOCK_NODE_ROOT, lockName);
+        return Joiner.on("/").join("", LOCK_NODE_ROOT, LOCKS_NODE, lockName);
+    }
+    
+    /**
+     * Get locked ack node path.
+     * 
+     * @param ackLockName ack lock name
+     * @return locked ack node path
+     */
+    public String getLockedAckNodePath(final String ackLockName) {
+        return Joiner.on("/").join("", LOCK_NODE_ROOT, LOCKED_ACK_NODE, 
ackLockName);
     }
     
     /**
-     * Get locked resources node path.
-     *
-     * @return locked resources node path
+     * Get lock name by lock node path.
+     * 
+     * @param lockNodePath lock node path
+     * @return lock name
      */
-    public String getLockedResourcesNodePath() {
-        return Joiner.on("/").join("", LOCK_NODE_ROOT, LOCKED_RESOURCES_NODE);
+    public Optional<String> getLockName(final String lockNodePath) {
+        Pattern pattern = Pattern.compile(getLockRootNodePath() + "/" + 
"(\\w+)$", 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/RegistryCenter.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
index a1ff1c3..f88fccd 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
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurat
 import 
org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsAlteredEvent;
 import 
org.apache.shardingsphere.governance.core.event.model.rule.SwitchRuleConfigurationEvent;
 import 
org.apache.shardingsphere.governance.core.event.model.scaling.StartScalingEvent;
+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.checker.RuleConfigurationChecker;
 import 
org.apache.shardingsphere.governance.core.registry.checker.RuleConfigurationCheckerFactory;
@@ -71,6 +72,10 @@ import java.util.stream.Collectors;
  */
 public final class RegistryCenter {
     
+    private static final int CHECK_ACK_MAXIMUM = 5;
+    
+    private static final int CHECK_ACK_INTERVAL_SECONDS = 1;
+    
     private final RegistryCenterNode node;
     
     private final RegistryRepository repository;
@@ -493,6 +498,15 @@ public final class RegistryCenter {
     }
     
     /**
+     * Load all instances.
+     *
+     * @return collection of all instances
+     */
+    public Collection<String> loadAllInstances() {
+        return repository.getChildrenKeys(node.getProxyNodesPath());
+    }
+    
+    /**
      * Load disabled data sources.
      * 
      * @param schemaName schema name
@@ -534,4 +548,74 @@ public final class RegistryCenter {
     public void releaseLock(final String lockName) {
         repository.releaseLock(lockNode.getLockNodePath(lockName));
     }
+    
+    /**
+     * Ack lock.
+     * 
+     * @param lockName lock name
+     */
+    public void ackLock(final String lockName) {
+        
repository.persistEphemeral(lockNode.getLockedAckNodePath(Joiner.on("-").join(instance.getInstanceId(),
 lockName)), LockAck.LOCKED.getValue());
+    }
+    
+    /**
+     * ack unlock.
+     * 
+     * @param lockName lock name
+     */
+    public void ackUnlock(final String lockName) {
+        
repository.delete(lockNode.getLockedAckNodePath(Joiner.on("-").join(instance.getInstanceId(),
 lockName)));
+    }
+    
+    /**
+     * Check lock ack.
+     * 
+     * @param lockName lock name
+     * @return true if all instances ack lock, false if not
+     */
+    public boolean checkLockAck(final String lockName) {
+        boolean result = checkAck(loadAllInstances(), lockName, 
LockAck.LOCKED.getValue());
+        if (!result) {
+            releaseLock(lockName);
+        }
+        return result;
+    }
+    
+    /**
+     * Check unlock ack.
+     * 
+     * @param lockName lock name
+     * @return true if all instances ack unlock, false if not
+     */
+    public boolean checkUnlockAck(final String lockName) {
+        return checkAck(loadAllInstances(), lockName, 
LockAck.UNLOCKED.getValue());
+    }
+    
+    private boolean checkAck(final Collection<String> instanceIds, final 
String lockName, final String ackValue) {
+        for (int i = 0; i < CHECK_ACK_MAXIMUM; i++) {
+            if (check(instanceIds, lockName, ackValue)) {
+                return true;
+            }
+            try {
+                Thread.sleep(CHECK_ACK_INTERVAL_SECONDS * 1000L);
+                // CHECKSTYLE:OFF
+            } catch (final InterruptedException ex) {
+                // CHECKSTYLE:ON
+            }
+        }
+        return false;
+    }
+    
+    private boolean check(final Collection<String> instanceIds, final String 
lockName, final String ackValue) {
+        for (String each : instanceIds) {
+            if (!ackValue.equalsIgnoreCase(loadLockAck(each, lockName))) {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    private String loadLockAck(final String instanceId, final String 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/registry/listener/LockChangedListener.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListener.java
index b9f4edb..3b7317a 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListener.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListener.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.governance.core.registry.listener;
 
-import com.google.common.base.Joiner;
 import 
org.apache.shardingsphere.governance.core.event.listener.PostGovernanceRepositoryEventListener;
 import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
 import 
org.apache.shardingsphere.governance.core.event.model.lock.LockNotificationEvent;
@@ -38,17 +37,17 @@ public final class LockChangedListener extends 
PostGovernanceRepositoryEventList
     private final LockNode lockNode;
     
     public LockChangedListener(final RegistryRepository registryRepository) {
-        super(registryRepository, Collections.singleton(new 
LockNode().getLockedResourcesNodePath()));
+        super(registryRepository, Collections.singleton(new 
LockNode().getLockRootNodePath()));
         lockNode = new LockNode();
     }
     
     @Override
     protected Optional<GovernanceEvent> createEvent(final DataChangedEvent 
event) {
-        if 
(event.getKey().startsWith(Joiner.on("/").join(lockNode.getLockedResourcesNodePath(),
 ""))) {
+        if (lockNode.getLockName(event.getKey()).isPresent()) {
             if (event.getType() == Type.ADDED) {
-                return Optional.of(new LockNotificationEvent());
+                return Optional.of(new 
LockNotificationEvent(lockNode.getLockName(event.getKey()).get()));
             } else if (event.getType() == Type.DELETED) {
-                return Optional.of(new LockReleasedEvent());
+                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/GovernanceLockTest.java
index ba3e053..24fa555 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/GovernanceLockTest.java
@@ -50,7 +50,9 @@ public final class GovernanceLockTest {
     
     @Test
     public void assertReleaseLock() {
+        when(registryCenter.checkUnlockAck("test")).thenReturn(Boolean.TRUE);
         lock.releaseLock("test");
+        verify(registryCenter).checkUnlockAck(eq("test"));
         verify(registryCenter).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/node/LockNodeTest.java
index 8182a87..af785ab 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/node/LockNodeTest.java
@@ -34,11 +34,16 @@ public final class LockNodeTest {
     
     @Test
     public void assertGetLockNodePath() {
-        assertThat(lockNode.getLockNodePath("test"), is("/lock/test"));
+        assertThat(lockNode.getLockNodePath("test"), is("/lock/locks/test"));
     }
     
     @Test
-    public void assertGetLockedResourceNodePath() {
-        assertThat(lockNode.getLockedResourcesNodePath(), 
is("/lock/locked_resources"));
+    public void assertGetLockName() {
+        assertThat(lockNode.getLockName("/lock/locks/test").get(), is("test"));
+    }
+    
+    @Test
+    public void assertGetLockAckNodePath() {
+        assertThat(lockNode.getLockedAckNodePath("test"), 
is("/lock/ack/test"));
     }
 }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockReleasedEvent.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java
similarity index 77%
copy from 
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockReleasedEvent.java
copy to 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java
index e2db5e3..18f1190 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/event/model/lock/LockReleasedEvent.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/InnerLockReleasedEvent.java
@@ -15,12 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.event.model.lock;
+package org.apache.shardingsphere.infra.lock;
 
-import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
 
 /**
- * Lock released event.
+ * Inner lock released event.
  */
-public final class LockReleasedEvent implements GovernanceEvent {
+@AllArgsConstructor
+@Getter
+public final class InnerLockReleasedEvent {
+    
+    private String lockName;
 }

Reply via email to