in hbase-oss/src/main/java/org/apache/hadoop/hbase/oss/sync/TreeLockManager.java [569:593]
private AutoLock innerLock(Path[] paths) throws IOException {
for (int i = 0; i < paths.length; i++) {
LOG.debug("About to lock: {}", paths[i]);
treeReadLock(paths[i]);
}
return new AutoLock() {
public void close() throws IOException {
Throwable lastThrown = null;
for (int i = 0; i < paths.length; i++) {
LOG.debug("About to unlock: {}", paths[i]);
try {
readUnlock(paths[i]);
} catch (Throwable e) {
lastThrown = e;
LOG.warn("Caught throwable while unlocking: {}", e.getMessage());
e.printStackTrace();
}
}
if (lastThrown != null) {
throw new IOException("At least one throwable caught while unlocking",
lastThrown);
}
}
};
}