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