Index: hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java (revision 1467324) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java (working copy) @@ -247,8 +247,9 @@ //ensure that znode for the table node has been deleted ZooKeeperWatcher zkWatcher = TEST_UTIL.getZooKeeperWatcher(); - assertTrue(ZKUtil.checkExists(zkWatcher, - ZKUtil.joinZNode(zkWatcher.tableLockZNode, Bytes.toString(TABLE_NAME))) < 0); + int ver = ZKUtil.checkExists(zkWatcher, + ZKUtil.joinZNode(zkWatcher.tableLockZNode, Bytes.toString(TABLE_NAME))); + assertTrue("Unexpected znode version " + ver, ver < 0); } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/lock/ZKInterProcessLockBase.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/lock/ZKInterProcessLockBase.java (revision 1467324) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/lock/ZKInterProcessLockBase.java (working copy) @@ -285,7 +285,10 @@ } try { if (ZKUtil.checkExists(zkWatcher, lock.getPath()) != -1) { - ZKUtil.deleteNode(zkWatcher, lock.getPath(), lock.getVersion()); + boolean ret = ZKUtil.deleteNode(zkWatcher, lock.getPath(), lock.getVersion()); + if (!ret && ZKUtil.checkExists(zkWatcher, lock.getPath()) != -1) { + throw new IllegalStateException("Couldn't delete " + lock.getPath()); + } if (!acquiredLock.compareAndSet(lock, null)) { LOG.debug("Current process no longer holds " + lock + " for " + fullyQualifiedZNode);