private boolean lock(String[] paths, int index, HiveLockObjectData data, boolean exclusive) { if (!lock.tryLock()) { return false; } try { if (index == paths.length) { if (this.exclusive || exclusive && hasLock()) { return false; } set(data, exclusive); return true; } Node child; if (children == null) { children = new HashMap<String, Node>(3); children.put(paths[index], child = new Node()); } else { child = children.get(paths[index]); if (child == null) { children.put(paths[index], child = new Node()); } } return child.lock(paths, index + 1, data, exclusive); } finally { lock.unlock(); } }
private void getLocks(String[] paths, boolean verify, boolean fetchData, List<HiveLock> locks, HiveConf conf) throws LockException { HiveLockMode lockMode = getLockMode(); if (fetchData) { for (HiveLockObjectData data : datas.values()) { HiveLockObject lock = verify(verify, paths, data, conf); if (lock != null) { locks.add(new SimpleHiveLock(lock, lockMode)); } } } else { HiveLockObject lock = verify(verify, paths, null, conf); if (lock != null) { locks.add(new SimpleHiveLock(lock, lockMode)); } } }
private void getLocks(Stack<String> names, boolean verify, boolean fetchData, List<HiveLock> locks, HiveConf conf) throws LockException { lock.lock(); try { if (hasLock()) { getLocks(names.toArray(new String[names.size()]), verify, fetchData, locks, conf); } if (children != null) { for (Map.Entry<String, Node> entry : children.entrySet()) { names.push(entry.getKey()); entry.getValue().getLocks(names, verify, fetchData, locks, conf); names.pop(); } } } finally { lock.unlock(); } }
private boolean unlock(String[] paths, int index, HiveLockObjectData data) { if (!lock.tryLock()) { return false; } try { if (index == paths.length) { if (hasLock()) { datas.remove(data.getQueryId()); } return true; } Node child = children == null ? null : children.get(paths[index]); if (child == null) { return true; // should not happen } if (child.unlock(paths, index + 1, data)) { if (!child.hasLock() && !child.hasChild()) { children.remove(paths[index]); } return true; } return false; } finally { lock.unlock(); } }
private boolean lock(String[] paths, int index, HiveLockObjectData data, boolean exclusive) { if (!lock.tryLock()) { return false; } try { if (index == paths.length) { if (this.exclusive || exclusive && hasLock()) { return false; } set(data, exclusive); return true; } Node child; if (children == null) { children = new HashMap<String, Node>(3); children.put(paths[index], child = new Node()); } else { child = children.get(paths[index]); if (child == null) { children.put(paths[index], child = new Node()); } } return child.lock(paths, index + 1, data, exclusive); } finally { lock.unlock(); } }
private void getLocks(Stack<String> names, boolean verify, boolean fetchData, List<HiveLock> locks, HiveConf conf) throws LockException { lock.lock(); try { if (hasLock()) { getLocks(names.toArray(new String[names.size()]), verify, fetchData, locks, conf); } if (children != null) { for (Map.Entry<String, Node> entry : children.entrySet()) { names.push(entry.getKey()); entry.getValue().getLocks(names, verify, fetchData, locks, conf); names.pop(); } } } finally { lock.unlock(); } }
private void getLocks(String[] paths, boolean verify, boolean fetchData, List<HiveLock> locks, HiveConf conf) throws LockException { HiveLockMode lockMode = getLockMode(); if (fetchData) { for (HiveLockObjectData data : datas.values()) { HiveLockObject lock = verify(verify, paths, data, conf); if (lock != null) { locks.add(new SimpleHiveLock(lock, lockMode)); } } } else { HiveLockObject lock = verify(verify, paths, null, conf); if (lock != null) { locks.add(new SimpleHiveLock(lock, lockMode)); } } }
private void getLocks(String[] paths, int index, boolean verify, boolean fetchData, List<HiveLock> locks, HiveConf conf) throws LockException { lock.lock(); try { if (index == paths.length) { getLocks(paths, verify, fetchData, locks, conf); return; } Node child = children.get(paths[index]); if (child != null) { child.getLocks(paths, index + 1, verify, fetchData, locks, conf); } } finally { lock.unlock(); } }
public boolean unlock(String[] paths, HiveLockObjectData data) { return unlock(paths, 0, data); }
public boolean lock(String[] paths, HiveLockObjectData data, boolean exclusive) { return lock(paths, 0, data, exclusive); }
public void unlock(HiveLock hiveLock, int numRetriesForUnLock, long sleepTime) throws LockException { String[] paths = hiveLock.getHiveLockObject().getPaths(); HiveLockObjectData data = hiveLock.getHiveLockObject().getData(); for (int i = 0; i <= numRetriesForUnLock; i++) { if (i > 0) { sleep(sleepTime); } if (root.unlock(paths, data)) { return; } } throw new LockException("Failed to release lock " + hiveLock); }
private HiveLock lockPrimitive(HiveLockObject key, HiveLockMode mode) throws LockException { if (root.lock(key.getPaths(), key.getData(), mode == HiveLockMode.EXCLUSIVE)) { return new SimpleHiveLock(key, mode); } return null; }
private boolean unlock(String[] paths, int index, HiveLockObjectData data) { if (!lock.tryLock()) { return false; } try { if (index == paths.length) { if (hasLock()) { datas.remove(data.getQueryId()); } return true; } Node child = children == null ? null : children.get(paths[index]); if (child == null) { return true; // should not happen } if (child.unlock(paths, index + 1, data)) { if (!child.hasLock() && !child.hasChild()) { children.remove(paths[index]); } return true; } return false; } finally { lock.unlock(); } }
private boolean unlock(String[] paths, int index, HiveLockObjectData data) { if (!lock.tryLock()) { return false; } try { if (index == paths.length) { if (hasLock()) { datas.remove(data.getQueryId()); } return true; } Node child = children == null ? null : children.get(paths[index]); if (child == null) { return true; // should not happen } if (child.unlock(paths, index + 1, data)) { if (!child.hasLock() && !child.hasChild()) { children.remove(paths[index]); } return true; } return false; } finally { lock.unlock(); } }
private boolean lock(String[] paths, int index, HiveLockObjectData data, boolean exclusive) { if (!lock.tryLock()) { return false; } try { if (index == paths.length) { if (this.exclusive || exclusive && hasLock()) { return false; } set(data, exclusive); return true; } Node child; if (children == null) { children = new HashMap<String, Node>(3); children.put(paths[index], child = new Node()); } else { child = children.get(paths[index]); if (child == null) { children.put(paths[index], child = new Node()); } } return child.lock(paths, index + 1, data, exclusive); } finally { lock.unlock(); } }
private void getLocks(String[] paths, int index, boolean verify, boolean fetchData, List<HiveLock> locks, HiveConf conf) throws LockException { lock.lock(); try { if (index == paths.length) { getLocks(paths, verify, fetchData, locks, conf); return; } Node child = children.get(paths[index]); if (child != null) { child.getLocks(paths, index + 1, verify, fetchData, locks, conf); } } finally { lock.unlock(); } }
private void getLocks(Stack<String> names, boolean verify, boolean fetchData, List<HiveLock> locks, HiveConf conf) throws LockException { lock.lock(); try { if (hasLock()) { getLocks(names.toArray(new String[names.size()]), verify, fetchData, locks, conf); } if (children != null) { for (Map.Entry<String, Node> entry : children.entrySet()) { names.push(entry.getKey()); entry.getValue().getLocks(names, verify, fetchData, locks, conf); names.pop(); } } } finally { lock.unlock(); } }
public boolean unlock(String[] paths, HiveLockObjectData data) { return unlock(paths, 0, data); }