private static Lock getLock(ServerContext context, AbstractId id, long tid, boolean writeLock) { byte[] lockData = String.format("%016x", tid).getBytes(UTF_8); ZooQueueLock qlock = new ZooQueueLock(context.getZooReaderWriter(), context.getZooKeeperRoot() + Constants.ZTABLE_LOCKS + "/" + id, false); Lock lock = DistributedReadWriteLock.recoverLock(qlock, lockData); if (lock == null) { DistributedReadWriteLock locker = new DistributedReadWriteLock(qlock, lockData); if (writeLock) lock = locker.writeLock(); else lock = locker.readLock(); } return lock; }
private static Lock getLock(String tableId, long tid, boolean writeLock) throws Exception { byte[] lockData = String.format("%016x", tid).getBytes(UTF_8); ZooQueueLock qlock = new ZooQueueLock(ZooUtil.getRoot(HdfsZooInstance.getInstance()) + Constants.ZTABLE_LOCKS + "/" + tableId, false); Lock lock = DistributedReadWriteLock.recoverLock(qlock, lockData); if (lock == null) { DistributedReadWriteLock locker = new DistributedReadWriteLock(qlock, lockData); if (writeLock) lock = locker.writeLock(); else lock = locker.readLock(); } return lock; }
private static Lock getLock(String tableId, long tid, boolean writeLock) throws Exception { byte[] lockData = String.format("%016x", tid).getBytes(UTF_8); ZooQueueLock qlock = new ZooQueueLock( ZooUtil.getRoot(HdfsZooInstance.getInstance()) + Constants.ZTABLE_LOCKS + "/" + tableId, false); Lock lock = DistributedReadWriteLock.recoverLock(qlock, lockData); if (lock == null) { DistributedReadWriteLock locker = new DistributedReadWriteLock(qlock, lockData); if (writeLock) lock = locker.writeLock(); else lock = locker.readLock(); } return lock; }
public static void main(String args[]) throws InterruptedException, KeeperException { ZooQueueLock lock = new ZooQueueLock("/lock", true); DistributedReadWriteLock rlocker = new DistributedReadWriteLock(lock, "reader".getBytes(UTF_8)); DistributedReadWriteLock wlocker = new DistributedReadWriteLock(lock, "wlocker".getBytes(UTF_8)); final Lock readLock = rlocker.readLock(); readLock.lock(); final Lock readLock2 = rlocker.readLock(); readLock2.lock(); final Lock writeLock = wlocker.writeLock(); if (writeLock.tryLock(100, TimeUnit.MILLISECONDS)) throw new RuntimeException("Write lock achieved during read lock!"); readLock.unlock(); readLock2.unlock(); writeLock.lock(); if (readLock.tryLock(100, TimeUnit.MILLISECONDS)) throw new RuntimeException("Read lock achieved during write lock!"); final Lock writeLock2 = DistributedReadWriteLock.recoverLock(lock, "wlocker".getBytes(UTF_8)); writeLock2.unlock(); readLock.lock(); System.out.println("success"); }
public static void main(String args[]) throws InterruptedException, KeeperException { ZooQueueLock lock = new ZooQueueLock("/lock", true); DistributedReadWriteLock rlocker = new DistributedReadWriteLock(lock, "reader".getBytes(UTF_8)); DistributedReadWriteLock wlocker = new DistributedReadWriteLock(lock, "wlocker".getBytes(UTF_8)); final Lock readLock = rlocker.readLock(); readLock.lock(); final Lock readLock2 = rlocker.readLock(); readLock2.lock(); final Lock writeLock = wlocker.writeLock(); if (writeLock.tryLock(100, TimeUnit.MILLISECONDS)) throw new RuntimeException("Write lock achieved during read lock!"); readLock.unlock(); readLock2.unlock(); writeLock.lock(); if (readLock.tryLock(100, TimeUnit.MILLISECONDS)) throw new RuntimeException("Read lock achieved during write lock!"); final Lock writeLock2 = DistributedReadWriteLock.recoverLock(lock, "wlocker".getBytes(UTF_8)); writeLock2.unlock(); readLock.lock(); System.out.println("success"); }