public class org.apache.helix.lock.helix.ZKDistributedNonblockingLock extends java.lang.Object implements org.apache.helix.lock.DistributedLock, org.apache.helix.zookeeper.zkclient.IZkDataListener
{
private static final org.slf4j.Logger LOG;
private final java.lang.String _lockPath;
private final java.lang.String _userId;
private final java.lang.String _lockMsg;
private final long _leaseTimeout;
private final long _waitingTimeout;
private final long _cleanupTimeout;
private final int _priority;
private final boolean _isForceful;
private final org.apache.helix.lock.helix.LockListener _lockListener;
private final org.apache.helix.BaseDataAccessor _baseDataAccessor;
private org.apache.helix.lock.helix.LockConstants$LockStatus _lockStatus;
private long _pendingTimeout;
private java.util.concurrent.CountDownLatch _countDownLatch;
public void <init>(org.apache.helix.lock.LockScope, java.lang.String, java.lang.Long, java.lang.String, java.lang.String)
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.lock.LockScope v;
org.apache.helix.manager.zk.ZkBaseDataAccessor v;
java.lang.Long v;
java.lang.String v, v, v, v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v := @parameter: org.apache.helix.lock.LockScope;
v := @parameter: java.lang.String;
v := @parameter: java.lang.Long;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v = interfaceinvoke v.<org.apache.helix.lock.LockScope: java.lang.String getPath()>();
v = new org.apache.helix.manager.zk.ZkBaseDataAccessor;
specialinvoke v.<org.apache.helix.manager.zk.ZkBaseDataAccessor: void <init>(java.lang.String)>(v);
specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: void <init>(java.lang.String,java.lang.Long,java.lang.String,java.lang.String,int,long,long,boolean,org.apache.helix.lock.helix.LockListener,org.apache.helix.BaseDataAccessor)>(v, v, v, v, 0, 2147483647L, 0L, 0, null, v);
return;
}
public void <init>(org.apache.helix.lock.helix.ZKLockConfig)
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.lock.LockScope v;
long v, v;
org.apache.helix.lock.helix.ZKLockConfig v;
java.lang.Long v;
int v;
java.lang.String v, v, v;
org.apache.helix.lock.helix.LockListener v;
boolean v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v := @parameter: org.apache.helix.lock.helix.ZKLockConfig;
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: org.apache.helix.lock.LockScope getLockScope()>();
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: java.lang.String getZkAddress()>();
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: java.lang.Long getLeaseTimeout()>();
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: java.lang.String getLockMsg()>();
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: java.lang.String getUserId()>();
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: int getPriority()>();
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: long getWaitingTimeout()>();
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: long getCleanupTimeout()>();
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: boolean getIsForceful()>();
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKLockConfig: org.apache.helix.lock.helix.LockListener getLockListener()>();
specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: void <init>(org.apache.helix.lock.LockScope,java.lang.String,java.lang.Long,java.lang.String,java.lang.String,int,long,long,boolean,org.apache.helix.lock.helix.LockListener)>(v, v, v, v, v, v, v, v, v, v);
return;
}
private void <init>(org.apache.helix.lock.LockScope, java.lang.String, java.lang.Long, java.lang.String, java.lang.String, int, long, long, boolean, org.apache.helix.lock.helix.LockListener)
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.lock.LockScope v;
long v, v;
org.apache.helix.manager.zk.ZkBaseDataAccessor v;
java.lang.Long v;
int v;
java.lang.String v, v, v, v;
org.apache.helix.lock.helix.LockListener v;
boolean v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v := @parameter: org.apache.helix.lock.LockScope;
v := @parameter: java.lang.String;
v := @parameter: java.lang.Long;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v := @parameter: int;
v := @parameter: long;
v := @parameter: long;
v := @parameter: boolean;
v := @parameter: org.apache.helix.lock.helix.LockListener;
v = interfaceinvoke v.<org.apache.helix.lock.LockScope: java.lang.String getPath()>();
v = new org.apache.helix.manager.zk.ZkBaseDataAccessor;
specialinvoke v.<org.apache.helix.manager.zk.ZkBaseDataAccessor: void <init>(java.lang.String)>(v);
specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: void <init>(java.lang.String,java.lang.Long,java.lang.String,java.lang.String,int,long,long,boolean,org.apache.helix.lock.helix.LockListener,org.apache.helix.BaseDataAccessor)>(v, v, v, v, v, v, v, v, v, v);
return;
}
private void <init>(java.lang.String, java.lang.Long, java.lang.String, java.lang.String, int, long, long, boolean, org.apache.helix.lock.helix.LockListener, org.apache.helix.BaseDataAccessor)
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
long v, v, v, v;
byte v, v, v;
java.lang.Long v;
int v;
java.lang.String v, v, v;
boolean v;
java.lang.IllegalArgumentException v, v;
java.util.concurrent.CountDownLatch v;
org.apache.helix.BaseDataAccessor v;
org.apache.helix.lock.helix.LockListener v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v := @parameter: java.lang.String;
v := @parameter: java.lang.Long;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v := @parameter: int;
v := @parameter: long;
v := @parameter: long;
v := @parameter: boolean;
v := @parameter: org.apache.helix.lock.helix.LockListener;
v := @parameter: org.apache.helix.BaseDataAccessor;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.concurrent.CountDownLatch;
specialinvoke v.<java.util.concurrent.CountDownLatch: void <init>(int)>(1);
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.util.concurrent.CountDownLatch _countDownLatch> = v;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath> = v;
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v cmp 0L;
if v < 0 goto label;
v = v cmp 0L;
if v < 0 goto label;
v = v cmp 0L;
if v >= 0 goto label;
label:
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("Timeout cannot be negative.");
throw v;
label:
if v >= 0 goto label;
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("Priority cannot be negative.");
throw v;
label:
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _leaseTimeout> = v;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockMsg> = v;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId> = v;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor> = v;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: int _priority> = v;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _waitingTimeout> = v;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _cleanupTimeout> = v;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.lock.helix.LockListener _lockListener> = v;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: boolean _isForceful> = v;
specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: void validateInput()>();
return;
}
public boolean tryLock()
{
org.apache.helix.lock.helix.LockConstants$LockStatus v, v, v, v, v, v;
org.apache.helix.HelixException v, v;
java.lang.Long v;
boolean v, v;
org.apache.helix.zookeeper.datamodel.ZNRecord v;
java.util.concurrent.CountDownLatch v;
org.apache.helix.BaseDataAccessor v, v, v, v, v, v;
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
java.lang.Object[] v;
org.apache.helix.lock.LockInfo v, v;
long v, v, v, v, v;
int v, v, v;
org.apache.helix.lock.helix.ZKDistributedNonblockingLock$LockUpdater v;
java.lang.String v, v, v, v, v, v, v, v, v, v, v;
org.slf4j.Logger v;
java.util.concurrent.TimeUnit v;
java.lang.InterruptedException v;
org.apache.helix.lock.helix.ZKDistributedNonblockingLock$ForcefulUpdater v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
interfaceinvoke v.<org.apache.helix.BaseDataAccessor: void subscribeDataChanges(java.lang.String,org.apache.helix.zookeeper.zkclient.IZkDataListener)>(v, v);
v = new org.apache.helix.lock.helix.ZKDistributedNonblockingLock$LockUpdater;
v = new org.apache.helix.lock.LockInfo;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockMsg>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _leaseTimeout>;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v = specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long getNonOverflowTimestamp(java.lang.Long)>(v);
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: int _priority>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _waitingTimeout>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _cleanupTimeout>;
specialinvoke v.<org.apache.helix.lock.LockInfo: void <init>(java.lang.String,java.lang.String,long,int,long,long,java.lang.String,int,long,long)>(v, v, v, v, v, v, null, 0, 0L, 0L);
specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock$LockUpdater: void <init>(org.apache.helix.lock.helix.ZKDistributedNonblockingLock,org.apache.helix.lock.LockInfo)>(v, v);
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
v = <org.apache.helix.AccessOption: int PERSISTENT>;
v = interfaceinvoke v.<org.apache.helix.BaseDataAccessor: boolean update(java.lang.String,org.apache.helix.zookeeper.zkclient.DataUpdater,int)>(v, v, v);
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.lock.helix.LockConstants$LockStatus _lockStatus>;
v = <org.apache.helix.lock.helix.LockConstants$LockStatus: org.apache.helix.lock.helix.LockConstants$LockStatus PENDING>;
if v == v goto label;
if v != 0 goto label;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
interfaceinvoke v.<org.apache.helix.BaseDataAccessor: void unsubscribeDataChanges(java.lang.String,org.apache.helix.zookeeper.zkclient.IZkDataListener)>(v, v);
label:
return v;
label:
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.util.concurrent.CountDownLatch _countDownLatch>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _pendingTimeout>;
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit MILLISECONDS>;
virtualinvoke v.<java.util.concurrent.CountDownLatch: boolean await(long,java.util.concurrent.TimeUnit)>(v, v);
label:
goto label;
label:
v := @caughtexception;
v = new org.apache.helix.HelixException;
v = newarray (java.lang.Object)[1];
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
v[0] = v;
v = staticinvoke <java.lang.String: java.lang.String format(java.lang.String,java.lang.Object[])>("Interruption happened while %s is waiting for the lock", v);
specialinvoke v.<org.apache.helix.HelixException: void <init>(java.lang.String,java.lang.Throwable)>(v, v);
throw v;
label:
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.lock.helix.LockConstants$LockStatus _lockStatus>;
v = <org.apache.helix.lock.helix.LockConstants$LockStatus: org.apache.helix.lock.helix.LockConstants$LockStatus LOCKED>;
if v == v goto label;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.lock.helix.LockConstants$LockStatus _lockStatus>;
v = <org.apache.helix.lock.helix.LockConstants$LockStatus: org.apache.helix.lock.helix.LockConstants$LockStatus PREEMPTED>;
if v != v goto label;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
interfaceinvoke v.<org.apache.helix.BaseDataAccessor: void unsubscribeDataChanges(java.lang.String,org.apache.helix.zookeeper.zkclient.IZkDataListener)>(v, v);
return 0;
label:
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: boolean _isForceful>;
if v == 0 goto label;
v = specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.zookeeper.datamodel.ZNRecord composeNewOwnerRecord()>();
v = new org.apache.helix.lock.helix.ZKDistributedNonblockingLock$ForcefulUpdater;
v = new org.apache.helix.lock.LockInfo;
specialinvoke v.<org.apache.helix.lock.LockInfo: void <init>(org.apache.helix.zookeeper.datamodel.ZNRecord)>(v);
specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock$ForcefulUpdater: void <init>(org.apache.helix.lock.helix.ZKDistributedNonblockingLock,org.apache.helix.lock.LockInfo)>(v, v);
v = <org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.slf4j.Logger LOG>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String,java.lang.Object)>("Updating Zookeeper with new owner {} information", v);
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
v = <org.apache.helix.AccessOption: int PERSISTENT>;
interfaceinvoke v.<org.apache.helix.BaseDataAccessor: boolean update(java.lang.String,org.apache.helix.zookeeper.zkclient.DataUpdater,int)>(v, v, v);
return 1;
label:
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
interfaceinvoke v.<org.apache.helix.BaseDataAccessor: void unsubscribeDataChanges(java.lang.String,org.apache.helix.zookeeper.zkclient.IZkDataListener)>(v, v);
v = new org.apache.helix.HelixException;
specialinvoke v.<org.apache.helix.HelixException: void <init>(java.lang.String)>("Cleanup has not been finished by lock owner");
throw v;
label:
return 1;
catch java.lang.InterruptedException from label to label with label;
}
public boolean unlock()
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.lock.LockInfo v;
org.apache.helix.BaseDataAccessor v;
int v;
org.apache.helix.lock.helix.ZKDistributedNonblockingLock$LockUpdater v;
java.lang.String v;
boolean v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v = new org.apache.helix.lock.helix.ZKDistributedNonblockingLock$LockUpdater;
v = <org.apache.helix.lock.LockInfo: org.apache.helix.lock.LockInfo defaultLockInfo>;
specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock$LockUpdater: void <init>(org.apache.helix.lock.helix.ZKDistributedNonblockingLock,org.apache.helix.lock.LockInfo)>(v, v);
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
v = <org.apache.helix.AccessOption: int PERSISTENT>;
v = interfaceinvoke v.<org.apache.helix.BaseDataAccessor: boolean update(java.lang.String,org.apache.helix.zookeeper.zkclient.DataUpdater,int)>(v, v, v);
return v;
}
public org.apache.helix.lock.LockInfo getCurrentLockInfo()
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.lock.LockInfo v;
org.apache.helix.BaseDataAccessor v;
int v;
java.lang.Object v;
java.lang.String v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
v = <org.apache.helix.AccessOption: int PERSISTENT>;
v = interfaceinvoke v.<org.apache.helix.BaseDataAccessor: java.lang.Object get(java.lang.String,org.apache.zookeeper.data.Stat,int)>(v, null, v);
v = new org.apache.helix.lock.LockInfo;
specialinvoke v.<org.apache.helix.lock.LockInfo: void <init>(org.apache.helix.zookeeper.datamodel.ZNRecord)>(v);
return v;
}
public boolean isCurrentOwner()
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.lock.LockInfo v;
long v, v;
byte v;
java.lang.Long v;
java.lang.String v, v;
boolean v, v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.lock.LockInfo getCurrentLockInfo()>();
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.String getOwner()>();
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>(v);
if v == 0 goto label;
v = staticinvoke <java.lang.System: long currentTimeMillis()>();
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.Long getTimeout()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v cmp v;
if v >= 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public void close()
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.BaseDataAccessor v, v;
java.lang.String v;
org.apache.helix.HelixException v;
boolean v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v = virtualinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: boolean isCurrentOwner()>();
if v == 0 goto label;
v = new org.apache.helix.HelixException;
specialinvoke v.<org.apache.helix.HelixException: void <init>(java.lang.String)>("Please unlock the lock before closing it.");
throw v;
label:
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
interfaceinvoke v.<org.apache.helix.BaseDataAccessor: void unsubscribeDataChanges(java.lang.String,org.apache.helix.zookeeper.zkclient.IZkDataListener)>(v, v);
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
interfaceinvoke v.<org.apache.helix.BaseDataAccessor: void close()>();
return;
}
public void handleDataChange(java.lang.String, java.lang.Object) throws java.lang.Exception
{
org.apache.helix.lock.helix.LockConstants$LockStatus v, v;
org.apache.helix.HelixException v;
org.apache.zookeeper.data.Stat v;
java.lang.Integer v;
boolean v, v, v, v, v, v, v;
org.apache.helix.zookeeper.datamodel.ZNRecord v;
org.apache.helix.BaseDataAccessor v, v, v;
org.apache.helix.lock.helix.LockListener v;
org.apache.helix.lock.helix.ZKDistributedNonblockingLock$CleanupUpdater v;
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
java.lang.Object[] v;
org.apache.helix.lock.LockInfo v, v;
int v, v, v, v, v;
org.apache.helix.lock.helix.ZKDistributedNonblockingLock$LockUpdater v;
java.lang.String v, v, v, v, v, v, v, v, v, v, v, v, v;
org.slf4j.Logger v, v;
java.lang.Object v, v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v := @parameter: java.lang.String;
v := @parameter: java.lang.Object;
v = new org.apache.zookeeper.data.Stat;
specialinvoke v.<org.apache.zookeeper.data.Stat: void <init>()>();
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = <org.apache.helix.AccessOption: int THROW_EXCEPTION_IFNOTEXIST>;
v = interfaceinvoke v.<org.apache.helix.BaseDataAccessor: java.lang.Object get(java.lang.String,org.apache.zookeeper.data.Stat,int)>(v, v, v);
v = new org.apache.helix.lock.LockInfo;
specialinvoke v.<org.apache.helix.lock.LockInfo: void <init>(org.apache.helix.zookeeper.datamodel.ZNRecord)>(v);
v = specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: boolean isCurrentOwner(org.apache.helix.lock.LockInfo)>(v);
if v == 0 goto label;
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.String getRequestorId()>();
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("NONE");
if v != 0 goto label;
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.Integer getPriority()>();
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: int getRequestorPriority()>();
if v <= v goto label;
label:
v = <org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String)>("We do not need to handle this data change");
goto label;
label:
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.lock.helix.LockListener _lockListener>;
interfaceinvoke v.<org.apache.helix.lock.helix.LockListener: void onCleanupNotification()>();
v = new org.apache.helix.lock.helix.ZKDistributedNonblockingLock$CleanupUpdater;
specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock$CleanupUpdater: void <init>(org.apache.helix.lock.helix.ZKDistributedNonblockingLock)>(v);
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
v = <org.apache.helix.AccessOption: int PERSISTENT>;
v = interfaceinvoke v.<org.apache.helix.BaseDataAccessor: boolean update(java.lang.String,org.apache.helix.zookeeper.zkclient.DataUpdater,int)>(v, v, v);
if v != 0 goto label;
v = new org.apache.helix.HelixException;
v = newarray (java.lang.Object)[2];
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
v[0] = v;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
v[1] = v;
v = staticinvoke <java.lang.String: java.lang.String format(java.lang.String,java.lang.Object[])>("User %s failed to update lock path %s", v);
specialinvoke v.<org.apache.helix.HelixException: void <init>(java.lang.String)>(v);
throw v;
label:
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.String getRequestorId()>();
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>(v);
if v == 0 goto label;
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.String getOwner()>();
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("NONE");
if v == 0 goto label;
v = specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.zookeeper.datamodel.ZNRecord composeNewOwnerRecord()>();
v = new org.apache.helix.lock.helix.ZKDistributedNonblockingLock$LockUpdater;
v = new org.apache.helix.lock.LockInfo;
specialinvoke v.<org.apache.helix.lock.LockInfo: void <init>(org.apache.helix.zookeeper.datamodel.ZNRecord)>(v);
specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock$LockUpdater: void <init>(org.apache.helix.lock.helix.ZKDistributedNonblockingLock,org.apache.helix.lock.LockInfo)>(v, v);
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.BaseDataAccessor _baseDataAccessor>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
v = <org.apache.helix.AccessOption: int PERSISTENT>;
interfaceinvoke v.<org.apache.helix.BaseDataAccessor: boolean update(java.lang.String,org.apache.helix.zookeeper.zkclient.DataUpdater,int)>(v, v, v);
virtualinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: void onAcquiredLockNotification()>();
goto label;
label:
v = <org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String)>("We do not need to handle this data change");
goto label;
label:
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.String getRequestorId()>();
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("NONE");
if v != 0 goto label;
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.String getRequestorId()>();
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>(v);
if v != 0 goto label;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.lock.helix.LockConstants$LockStatus _lockStatus>;
v = <org.apache.helix.lock.helix.LockConstants$LockStatus: org.apache.helix.lock.helix.LockConstants$LockStatus PENDING>;
if v != v goto label;
virtualinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: void onDeniedPendingLockNotification()>();
label:
return;
}
public void onAcquiredLockNotification()
{
org.apache.helix.lock.helix.LockConstants$LockStatus v;
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
java.util.concurrent.CountDownLatch v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v = <org.apache.helix.lock.helix.LockConstants$LockStatus: org.apache.helix.lock.helix.LockConstants$LockStatus LOCKED>;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.lock.helix.LockConstants$LockStatus _lockStatus> = v;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.util.concurrent.CountDownLatch _countDownLatch>;
virtualinvoke v.<java.util.concurrent.CountDownLatch: void countDown()>();
return;
}
public void onDeniedPendingLockNotification()
{
org.apache.helix.lock.helix.LockConstants$LockStatus v;
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
java.util.concurrent.CountDownLatch v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v = <org.apache.helix.lock.helix.LockConstants$LockStatus: org.apache.helix.lock.helix.LockConstants$LockStatus PREEMPTED>;
v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.apache.helix.lock.helix.LockConstants$LockStatus _lockStatus> = v;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.util.concurrent.CountDownLatch _countDownLatch>;
virtualinvoke v.<java.util.concurrent.CountDownLatch: void countDown()>();
return;
}
public void handleDataDeleted(java.lang.String) throws java.lang.Exception
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
java.lang.String v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v := @parameter: java.lang.String;
return;
}
private org.apache.helix.zookeeper.datamodel.ZNRecord composeNewRequestorRecord(org.apache.helix.lock.LockInfo, org.apache.helix.zookeeper.datamodel.ZNRecord)
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.lock.LockInfo v, v;
long v, v, v, v, v;
java.lang.Integer v;
java.lang.Long v, v, v;
int v, v, v;
java.lang.String v, v, v, v, v, v;
org.apache.helix.lock.LockInfo$LockInfoAttribute v, v, v;
org.apache.helix.zookeeper.datamodel.ZNRecord v, v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v := @parameter: org.apache.helix.lock.LockInfo;
v := @parameter: org.apache.helix.zookeeper.datamodel.ZNRecord;
v = new org.apache.helix.lock.LockInfo;
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.String getOwner()>();
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.String getMessage()>();
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.Long getTimeout()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.Integer getPriority()>();
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.Long getWaitingTimeout()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.Long getCleanupTimeout()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = <org.apache.helix.lock.LockInfo$LockInfoAttribute: org.apache.helix.lock.LockInfo$LockInfoAttribute OWNER>;
v = virtualinvoke v.<org.apache.helix.lock.LockInfo$LockInfoAttribute: java.lang.String name()>();
v = virtualinvoke v.<org.apache.helix.zookeeper.datamodel.ZNRecord: java.lang.String getSimpleField(java.lang.String)>(v);
v = <org.apache.helix.lock.LockInfo$LockInfoAttribute: org.apache.helix.lock.LockInfo$LockInfoAttribute PRIORITY>;
v = virtualinvoke v.<org.apache.helix.lock.LockInfo$LockInfoAttribute: java.lang.String name()>();
v = (int) -1;
v = virtualinvoke v.<org.apache.helix.zookeeper.datamodel.ZNRecord: int getIntField(java.lang.String,int)>(v, v);
v = <org.apache.helix.lock.LockInfo$LockInfoAttribute: org.apache.helix.lock.LockInfo$LockInfoAttribute WAITING_TIMEOUT>;
v = virtualinvoke v.<org.apache.helix.lock.LockInfo$LockInfoAttribute: java.lang.String name()>();
v = virtualinvoke v.<org.apache.helix.zookeeper.datamodel.ZNRecord: long getLongField(java.lang.String,long)>(v, -1L);
v = staticinvoke <java.lang.System: long currentTimeMillis()>();
specialinvoke v.<org.apache.helix.lock.LockInfo: void <init>(java.lang.String,java.lang.String,long,int,long,long,java.lang.String,int,long,long)>(v, v, v, v, v, v, v, v, v, v);
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: org.apache.helix.zookeeper.datamodel.ZNRecord getRecord()>();
return v;
}
private org.apache.helix.zookeeper.datamodel.ZNRecord composeNewOwnerRecord()
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.lock.LockInfo v;
long v, v, v, v;
org.apache.helix.zookeeper.datamodel.ZNRecord v;
java.lang.Long v;
int v, v;
java.lang.String v, v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v = new org.apache.helix.lock.LockInfo;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockMsg>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _leaseTimeout>;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v = specialinvoke v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long getNonOverflowTimestamp(java.lang.Long)>(v);
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: int _priority>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _waitingTimeout>;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _cleanupTimeout>;
v = (int) -1;
specialinvoke v.<org.apache.helix.lock.LockInfo: void <init>(java.lang.String,java.lang.String,long,int,long,long,java.lang.String,int,long,long)>(v, v, v, v, v, v, "NONE", v, -1L, -1L);
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: org.apache.helix.zookeeper.datamodel.ZNRecord getRecord()>();
return v;
}
private long getNonOverflowTimestamp(java.lang.Long)
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
long v, v, v, v, v, v;
byte v;
java.lang.Long v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v := @parameter: java.lang.Long;
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = staticinvoke <java.lang.System: long currentTimeMillis()>();
v = 9223372036854775807L - v;
v = v cmp v;
if v <= 0 goto label;
return 9223372036854775807L;
label:
v = staticinvoke <java.lang.System: long currentTimeMillis()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v + v;
return v;
}
private boolean isCurrentOwner(org.apache.helix.lock.LockInfo)
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
org.apache.helix.lock.LockInfo v;
long v, v;
byte v;
java.lang.Long v;
java.lang.String v, v;
boolean v, v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v := @parameter: org.apache.helix.lock.LockInfo;
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.String getOwner()>();
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>(v);
if v == 0 goto label;
v = staticinvoke <java.lang.System: long currentTimeMillis()>();
v = virtualinvoke v.<org.apache.helix.lock.LockInfo: java.lang.Long getTimeout()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v cmp v;
if v >= 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
private void validateInput()
{
org.apache.helix.lock.helix.ZKDistributedNonblockingLock v;
long v, v, v;
java.lang.IllegalArgumentException v, v, v, v;
byte v, v, v;
int v;
java.lang.String v, v;
v := @this: org.apache.helix.lock.helix.ZKDistributedNonblockingLock;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _lockPath>;
if v != null goto label;
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("Lock scope cannot be null");
throw v;
label:
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: java.lang.String _userId>;
if v != null goto label;
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("Owner Id cannot be null");
throw v;
label:
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _leaseTimeout>;
v = v cmp 0L;
if v < 0 goto label;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _waitingTimeout>;
v = v cmp 0L;
if v < 0 goto label;
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: long _cleanupTimeout>;
v = v cmp 0L;
if v >= 0 goto label;
label:
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("Timeout cannot be negative.");
throw v;
label:
v = v.<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: int _priority>;
if v >= 0 goto label;
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("Priority cannot be negative.");
throw v;
label:
return;
}
static void <clinit>()
{
org.slf4j.Logger v;
v = staticinvoke <org.slf4j.LoggerFactory: org.slf4j.Logger getLogger(java.lang.Class)>(class "Lorg/apache/helix/lock/helix/ZKDistributedNonblockingLock;");
<org.apache.helix.lock.helix.ZKDistributedNonblockingLock: org.slf4j.Logger LOG> = v;
return;
}
}