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/23 20:02:54 UTC

[helix] 19/20: Rename interface HelixLock to DistributedLock

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

jxue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git

commit 62d3e8f66d09efd3012b890fb669b1992d16b1c6
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;
     }