You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by jx...@apache.org on 2020/04/14 02:30:32 UTC
[helix] 19/19: Rename interface HelixLock to DistributedLock
This is an automated email from the ASF dual-hosted git repository.
jxue pushed a commit to branch distributed-lock
in repository https://gitbox.apache.org/repos/asf/helix.git
commit c11ac9516ea48b06c95eabc322646094b05a6b96
Author: Molly Gao <mg...@mgao-mn1.linkedin.biz>
AuthorDate: Tue Feb 18 17:58:19 2020 -0800
Rename interface HelixLock to DistributedLock
---
.../lock/{HelixLock.java => DistributedLock.java} | 2 +-
.../main/java/org/apache/helix/lock/LockInfo.java | 27 ++++++++++++++--------
...Lock.java => ZKDistributedNonblockingLock.java} | 11 +++++----
.../lock/helix/TestZKHelixNonblockingLock.java | 12 +++++-----
4 files changed, 30 insertions(+), 22 deletions(-)
diff --git a/helix-lock/src/main/java/org/apache/helix/lock/HelixLock.java b/helix-lock/src/main/java/org/apache/helix/lock/DistributedLock.java
similarity index 98%
rename from helix-lock/src/main/java/org/apache/helix/lock/HelixLock.java
rename to helix-lock/src/main/java/org/apache/helix/lock/DistributedLock.java
index 97e2c35..594ccf4 100644
--- a/helix-lock/src/main/java/org/apache/helix/lock/HelixLock.java
+++ b/helix-lock/src/main/java/org/apache/helix/lock/DistributedLock.java
@@ -22,7 +22,7 @@ package org.apache.helix.lock;
/**
* Generic interface for Helix distributed lock
*/
-public interface HelixLock {
+public interface DistributedLock {
/**
* Blocking call to acquire a lock
* @return true if the lock was successfully acquired,
diff --git a/helix-lock/src/main/java/org/apache/helix/lock/LockInfo.java b/helix-lock/src/main/java/org/apache/helix/lock/LockInfo.java
index 2c9a24f..71f7258 100644
--- a/helix-lock/src/main/java/org/apache/helix/lock/LockInfo.java
+++ b/helix-lock/src/main/java/org/apache/helix/lock/LockInfo.java
@@ -36,20 +36,23 @@ public class LockInfo {
public static final LockInfo defaultLockInfo =
new LockInfo(DEFAULT_OWNER_TEXT, DEFAULT_MESSAGE_TEXT, DEFAULT_TIMEOUT_LONG);
- private ZNRecord record;
+ private static final String ZNODE_ID = "LOCK";
+ private ZNRecord _record;
/**
* The keys to lock information
*/
public enum LockInfoAttribute {
- OWNER, MESSAGE, TIMEOUT
+ OWNER,
+ MESSAGE,
+ TIMEOUT
}
/**
* Initialize a default LockInfo instance
*/
private LockInfo() {
- record = new ZNRecord("LOCK");
+ _record = new ZNRecord(ZNODE_ID);
setLockInfoFields(DEFAULT_OWNER_TEXT, DEFAULT_MESSAGE_TEXT, DEFAULT_TIMEOUT_LONG);
}
@@ -85,11 +88,11 @@ public class LockInfo {
* @param timeout value of TIMEOUT attribute
*/
private void setLockInfoFields(String ownerId, String message, long timeout) {
- record.setSimpleField(LockInfoAttribute.OWNER.name(),
+ _record.setSimpleField(LockInfoAttribute.OWNER.name(),
ownerId == null ? DEFAULT_OWNER_TEXT : ownerId);
- record.setSimpleField(LockInfoAttribute.MESSAGE.name(),
+ _record.setSimpleField(LockInfoAttribute.MESSAGE.name(),
message == null ? DEFAULT_MESSAGE_TEXT : message);
- record.setLongField(LockInfoAttribute.TIMEOUT.name(), timeout);
+ _record.setLongField(LockInfoAttribute.TIMEOUT.name(), timeout);
}
/**
@@ -97,7 +100,7 @@ public class LockInfo {
* @return the owner id of the lock, empty string if there is no owner id set
*/
public String getOwner() {
- String owner = record.getSimpleField(LockInfoAttribute.OWNER.name());
+ String owner = _record.getSimpleField(LockInfoAttribute.OWNER.name());
return owner == null ? DEFAULT_OWNER_TEXT : owner;
}
@@ -106,7 +109,7 @@ public class LockInfo {
* @return the message of the lock, empty string if there is no message set
*/
public String getMessage() {
- String message = record.getSimpleField(LockInfoAttribute.MESSAGE.name());
+ String message = _record.getSimpleField(LockInfoAttribute.MESSAGE.name());
return message == null ? DEFAULT_MESSAGE_TEXT : message;
}
@@ -115,10 +118,14 @@ public class LockInfo {
* @return the expiring time of the lock, -1 if there is no timeout set
*/
public Long getTimeout() {
- return record.getLongField(LockInfoAttribute.TIMEOUT.name(), DEFAULT_TIMEOUT_LONG);
+ return _record.getLongField(LockInfoAttribute.TIMEOUT.name(), DEFAULT_TIMEOUT_LONG);
}
+ /**
+ * Get the underlying ZNRecord in a LockInfo
+ * @return lock information contained in a ZNRecord
+ */
public ZNRecord getRecord() {
- return record;
+ return _record;
}
}
diff --git a/helix-lock/src/main/java/org/apache/helix/lock/helix/ZKHelixNonblockingLock.java b/helix-lock/src/main/java/org/apache/helix/lock/helix/ZKDistributedNonblockingLock.java
similarity index 90%
rename from helix-lock/src/main/java/org/apache/helix/lock/helix/ZKHelixNonblockingLock.java
rename to helix-lock/src/main/java/org/apache/helix/lock/helix/ZKDistributedNonblockingLock.java
index cbfe9da..8fe8c8c 100644
--- a/helix-lock/src/main/java/org/apache/helix/lock/helix/ZKHelixNonblockingLock.java
+++ b/helix-lock/src/main/java/org/apache/helix/lock/helix/ZKDistributedNonblockingLock.java
@@ -26,7 +26,7 @@ import org.apache.helix.AccessOption;
import org.apache.helix.BaseDataAccessor;
import org.apache.helix.HelixException;
import org.apache.helix.ZNRecord;
-import org.apache.helix.lock.HelixLock;
+import org.apache.helix.lock.DistributedLock;
import org.apache.helix.lock.LockInfo;
import org.apache.helix.lock.LockScope;
import org.apache.helix.manager.zk.ZkBaseDataAccessor;
@@ -36,9 +36,9 @@ import org.apache.log4j.Logger;
/**
* Helix nonblocking lock implementation based on Zookeeper
*/
-public class ZKHelixNonblockingLock implements HelixLock {
+public class ZKDistributedNonblockingLock implements DistributedLock {
- private static final Logger LOG = Logger.getLogger(ZKHelixNonblockingLock.class);
+ private static final Logger LOG = Logger.getLogger(ZKDistributedNonblockingLock.class);
private final String _lockPath;
private final String _userId;
@@ -54,7 +54,7 @@ public class ZKHelixNonblockingLock implements HelixLock {
* @param lockMsg the reason for having this lock
* @param userId a universal unique userId for lock owner identity
*/
- public ZKHelixNonblockingLock(LockScope scope, String zkAddress, Long timeout, String lockMsg,
+ public ZKDistributedNonblockingLock(LockScope scope, String zkAddress, Long timeout, String lockMsg,
String userId) {
this(scope.getPath(), zkAddress, timeout, lockMsg, userId);
}
@@ -67,7 +67,7 @@ public class ZKHelixNonblockingLock implements HelixLock {
* @param lockMsg the reason for having this lock
* @param userId a universal unique userId for lock owner identity
*/
- private ZKHelixNonblockingLock(String lockPath, String zkAddress, Long timeout, String lockMsg,
+ private ZKDistributedNonblockingLock(String lockPath, String zkAddress, Long timeout, String lockMsg,
String userId) {
_lockPath = lockPath;
if (timeout < 0) {
@@ -94,6 +94,7 @@ public class ZKHelixNonblockingLock implements HelixLock {
return _baseDataAccessor.update(_lockPath, updater, AccessOption.PERSISTENT);
}
+ //TODO: update release lock logic so it would not leave empty znodes after the lock is released
@Override
public boolean releaseLock() {
// Initialize the lock updater with a default lock info represents the state of a unlocked lock
diff --git a/helix-lock/src/test/java/org/apache/helix/lock/helix/TestZKHelixNonblockingLock.java b/helix-lock/src/test/java/org/apache/helix/lock/helix/TestZKHelixNonblockingLock.java
index 39205af..08cf33b 100644
--- a/helix-lock/src/test/java/org/apache/helix/lock/helix/TestZKHelixNonblockingLock.java
+++ b/helix-lock/src/test/java/org/apache/helix/lock/helix/TestZKHelixNonblockingLock.java
@@ -42,7 +42,7 @@ public class TestZKHelixNonblockingLock extends ZkTestBase {
private final String _clusterName = TestHelper.getTestClassName();
private final String _lockMessage = "Test";
private String _lockPath;
- private ZKHelixNonblockingLock _lock;
+ private ZKDistributedNonblockingLock _lock;
private String _userId;
private HelixLockScope _participantScope;
@@ -61,7 +61,7 @@ public class TestZKHelixNonblockingLock extends ZkTestBase {
_participantScope = new HelixLockScope(HelixLockScope.LockScopeProperty.CLUSTER, pathKeys);
_lockPath = _participantScope.getPath();
- _lock = new ZKHelixNonblockingLock(_participantScope, ZK_ADDR, Long.MAX_VALUE, _lockMessage,
+ _lock = new ZKDistributedNonblockingLock(_participantScope, ZK_ADDR, Long.MAX_VALUE, _lockMessage,
_userId);
}
@@ -137,8 +137,8 @@ public class TestZKHelixNonblockingLock extends ZkTestBase {
public void testSimultaneousAcquire() {
List<Callable<Boolean>> threads = new ArrayList<>();
for (int i = 0; i < 2; i++) {
- ZKHelixNonblockingLock lock =
- new ZKHelixNonblockingLock(_participantScope, ZK_ADDR, Long.MAX_VALUE, _lockMessage,
+ ZKDistributedNonblockingLock lock =
+ new ZKDistributedNonblockingLock(_participantScope, ZK_ADDR, Long.MAX_VALUE, _lockMessage,
UUID.randomUUID().toString());
threads.add(new TestSimultaneousAcquireLock(lock));
}
@@ -148,9 +148,9 @@ public class TestZKHelixNonblockingLock extends ZkTestBase {
}
private static class TestSimultaneousAcquireLock implements Callable<Boolean> {
- final ZKHelixNonblockingLock _lock;
+ final ZKDistributedNonblockingLock _lock;
- TestSimultaneousAcquireLock(ZKHelixNonblockingLock lock) {
+ TestSimultaneousAcquireLock(ZKDistributedNonblockingLock lock) {
_lock = lock;
}