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;
}