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:27 UTC
[helix] 14/19: 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 distributed-lock
in repository https://gitbox.apache.org/repos/asf/helix.git
commit 2a7d5eee56f55099dee9bc08ae133017a08a2cd3
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);
}