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:49 UTC

[helix] 14/20: Added cluster level to HelixLockScope and convert lock path to uppercase

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 49685e8f836b4b69e3448db21ce0054841bbcf92
Author: Molly Gao <mg...@mgao-mn1.linkedin.biz>
AuthorDate: Fri Feb 7 14:53:03 2020 -0800

    Added cluster level to HelixLockScope and convert lock path to uppercase
---
 .../java/org/apache/helix/lock/HelixLockScope.java | 39 ++++++++++++++++------
 .../apache/helix/lock/ZKHelixNonblockingLock.java  | 12 +------
 .../helix/lock/TestZKHelixNonblockingLock.java     |  6 ++--
 3 files changed, 32 insertions(+), 25 deletions(-)

diff --git a/helix-lock/src/main/java/org/apache/helix/lock/HelixLockScope.java b/helix-lock/src/main/java/org/apache/helix/lock/HelixLockScope.java
index 9fc12fc..e31991a 100644
--- a/helix-lock/src/main/java/org/apache/helix/lock/HelixLockScope.java
+++ b/helix-lock/src/main/java/org/apache/helix/lock/HelixLockScope.java
@@ -34,11 +34,13 @@ public class HelixLockScope {
    */
   public enum LockScopeProperty {
 
-    PARTICIPANT(1, 0),
+    CLUSTER(1, 0),
 
-    RESOURCE(2, 1),
+    PARTICIPANT(2, 1),
 
-    PARTITION(3, 2);
+    RESOURCE(3, 2),
+
+    PARTITION(4, 3);
 
     final int _zkPathArgNum;
     final int _argumentPos;
@@ -71,14 +73,17 @@ public class HelixLockScope {
   private static final StringTemplate template = new StringTemplate();
 
   static {
-    template.addEntry(HelixLockScope.LockScopeProperty.PARTICIPANT, 1, "/{participantName}");
-    template.addEntry(HelixLockScope.LockScopeProperty.RESOURCE, 2,
-        "/{participantName}/{resourceName}");
-    template.addEntry(HelixLockScope.LockScopeProperty.PARTITION, 3,
-        "/{participantName}/{resourceName}/{partitionName}");
+    template.addEntry(LockScopeProperty.CLUSTER, 1, "/{clusterName}");
+    template.addEntry(HelixLockScope.LockScopeProperty.PARTICIPANT, 2,
+        "/{clusterName}/{participantName}");
+    template.addEntry(HelixLockScope.LockScopeProperty.RESOURCE, 3,
+        "/{clusterName}/{participantName}/{resourceName}");
+    template.addEntry(HelixLockScope.LockScopeProperty.PARTITION, 4,
+        "/{clusterName}/{participantName}/{resourceName}/{partitionName}");
   }
 
   private final HelixLockScope.LockScopeProperty _type;
+  private final String _clusterName;
   private final String _participantName;
   private final String _resourceName;
   private final String _partitionName;
@@ -101,7 +106,13 @@ public class HelixLockScope {
     _type = type;
 
     //Initialize the name fields for various scope
-    _participantName = zkPathKeys.get(LockScopeProperty.PARTICIPANT.getArgumentPos());
+    _clusterName = zkPathKeys.get(LockScopeProperty.CLUSTER.getArgumentPos());
+
+    if (type.getZkPathArgNum() >= LockScopeProperty.PARTICIPANT.getZkPathArgNum()) {
+      _participantName = zkPathKeys.get(LockScopeProperty.PARTICIPANT.getArgumentPos());
+    } else {
+      _participantName = null;
+    }
 
     if (type.getZkPathArgNum() >= LockScopeProperty.RESOURCE.getZkPathArgNum()) {
       _resourceName = zkPathKeys.get(LockScopeProperty.RESOURCE.getArgumentPos());
@@ -115,7 +126,7 @@ public class HelixLockScope {
       _partitionName = null;
     }
 
-    _zkPath = template.instantiate(type, zkPathKeys.toArray(new String[0]));
+    _zkPath = template.instantiate(type, zkPathKeys.toArray(new String[0])).toUpperCase();
   }
 
   /**
@@ -127,6 +138,14 @@ public class HelixLockScope {
   }
 
   /**
+   * Get the cluster name if it exists
+   * @return the cluster name
+   */
+  public String getClusterName() {
+    return _clusterName;
+  }
+
+  /**
    * Get the participant name if it exists
    * @return the participant name
    */
diff --git a/helix-lock/src/main/java/org/apache/helix/lock/ZKHelixNonblockingLock.java b/helix-lock/src/main/java/org/apache/helix/lock/ZKHelixNonblockingLock.java
index 03e712f..18cac1a 100644
--- a/helix-lock/src/main/java/org/apache/helix/lock/ZKHelixNonblockingLock.java
+++ b/helix-lock/src/main/java/org/apache/helix/lock/ZKHelixNonblockingLock.java
@@ -20,24 +20,14 @@
 package org.apache.helix.lock;
 
 import java.util.Date;
-import java.util.UUID;
 
-import com.google.common.annotations.VisibleForTesting;
 import org.I0Itec.zkclient.DataUpdater;
-import org.I0Itec.zkclient.exception.ZkNoNodeException;
 import org.apache.helix.AccessOption;
 import org.apache.helix.BaseDataAccessor;
 import org.apache.helix.HelixException;
-import org.apache.helix.PropertyPathBuilder;
-import org.apache.helix.PropertyType;
 import org.apache.helix.ZNRecord;
-import org.apache.helix.api.exceptions.HelixMetaDataAccessException;
 import org.apache.helix.manager.zk.ZkBaseDataAccessor;
-import org.apache.helix.manager.zk.ZkClient;
-import org.apache.helix.manager.zk.client.HelixZkClient;
-import org.apache.helix.model.HelixConfigScope;
 import org.apache.log4j.Logger;
-import org.apache.zookeeper.data.Stat;
 
 import static org.apache.helix.lock.ZKHelixNonblockingLockInfo.DEFAULT_OWNER_TEXT;
 import static org.apache.helix.lock.ZKHelixNonblockingLockInfo.DEFAULT_TIMEOUT_LONG;
@@ -68,7 +58,7 @@ public class ZKHelixNonblockingLock implements HelixLock {
    */
   public ZKHelixNonblockingLock(String clusterName, HelixLockScope scope, String zkAddress,
       Long timeout, String lockMsg, String userId) {
-    this("/" + clusterName + LOCK_ROOT + scope.getZkPath(), zkAddress, timeout, lockMsg, userId);
+    this("/" + clusterName.toUpperCase() + LOCK_ROOT + scope.getZkPath(), zkAddress, timeout, lockMsg, userId);
   }
 
   /**
diff --git a/helix-lock/src/test/java/org/apache/helix/lock/TestZKHelixNonblockingLock.java b/helix-lock/src/test/java/org/apache/helix/lock/TestZKHelixNonblockingLock.java
index 96a15b3..090a43d 100644
--- a/helix-lock/src/test/java/org/apache/helix/lock/TestZKHelixNonblockingLock.java
+++ b/helix-lock/src/test/java/org/apache/helix/lock/TestZKHelixNonblockingLock.java
@@ -26,11 +26,8 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.Callable;
 
-import org.apache.helix.PropertyPathBuilder;
-import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
-import org.apache.helix.ZkUnitTestBase;
 import org.apache.helix.common.ZkTestBase;
 import org.apache.zookeeper.CreateMode;
 import org.testng.Assert;
@@ -59,12 +56,13 @@ public class TestZKHelixNonblockingLock extends ZkTestBase {
     _userId = UUID.randomUUID().toString();
 
     List<String> pathKeys = new ArrayList<>();
+    pathKeys.add(_clusterName);
     pathKeys.add("participant_name");
     pathKeys.add("resource_name");
     pathKeys.add("partition_name");
 
     _participantScope = new HelixLockScope(HelixLockScope.LockScopeProperty.PARTITION, pathKeys);
-    _lockPath = "/" + _clusterName + _lockRoot + _participantScope.getZkPath();
+    _lockPath = "/" + _clusterName.toUpperCase() + _lockRoot + _participantScope.getZkPath();
     _lock = new ZKHelixNonblockingLock(_clusterName, _participantScope, ZK_ADDR, Long.MAX_VALUE,
         _lockMessage, _userId);
   }