HiveLockMode lMode = hiveLock.getHiveLockMode(); HiveLockObject obj = zLock.getHiveLockObject(); String name = getLastObjectName(parent, obj); try {
HiveLockMode lMode = hiveLock.getHiveLockMode(); HiveLockObject obj = zLock.getHiveLockObject(); String name = getLastObjectName(parent, obj); try {
lastName = getLastObjectName(parent, key); names.add(lastName); } else {
lastName = getLastObjectName(parent, key); names.add(lastName); } else {
private static void unlock(HiveConf conf, ZooKeeper zkpClient, HiveLock hiveLock, String parent) throws LockException { ZooKeeperHiveLock zLock = (ZooKeeperHiveLock)hiveLock; try { zkpClient.delete(zLock.getPath(), -1); // Delete the parent node if all the children have been deleted HiveLockObject obj = zLock.getHiveLockObject(); String name = getLastObjectName(parent, obj); List<String> children = zkpClient.getChildren(name, false); if ((children == null) || (children.isEmpty())) { zkpClient.delete(name, -1); } } catch (Exception e) { LOG.error("Failed to release ZooKeeper lock: " + e); throw new LockException(e); } }
@VisibleForTesting static void unlockPrimitive(HiveLock hiveLock, String parent, CuratorFramework curatorFramework) throws LockException { ZooKeeperHiveLock zLock = (ZooKeeperHiveLock)hiveLock; HiveLockObject obj = zLock.getHiveLockObject(); String name = getLastObjectName(parent, obj); try { curatorFramework.delete().forPath(zLock.getPath()); // Delete the parent node if all the children have been deleted List<String> children = curatorFramework.getChildren().forPath(name); if (children == null || children.isEmpty()) { curatorFramework.delete().forPath(name); } } catch (KeeperException.NoNodeException nne) { //can happen in retrying deleting the zLock after exceptions like InterruptedException //or in a race condition where parent has already been deleted by other process when it //is to be deleted. Both cases should not raise error LOG.debug("Node " + zLock.getPath() + " or its parent has already been deleted."); } catch (KeeperException.NotEmptyException nee) { //can happen in a race condition where another process adds a zLock under this parent //just before it is about to be deleted. It should not be a problem since this parent //can eventually be deleted by the process which hold its last child zLock LOG.debug("Node " + name + " to be deleted is not empty."); } catch (Exception e) { //exceptions including InterruptException and other KeeperException LOG.error("Failed to release ZooKeeper lock: ", e); throw new LockException(e); } }
lastName = getLastObjectName(parent, key); names.add(lastName); } else {
lastName = getLastObjectName(parent, key); names.add(lastName);