--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java @@ -478,9 +478,9 @@ public class SnapshotManager implements Stoppable { private synchronized void snapshotTable(SnapshotDescription snapshot, final TakeSnapshotHandler handler) throws HBaseSnapshotException { try { + this.snapshotHandlers.put(snapshot.getTable(), handler); handler.prepare(); this.executorService.submit(handler); - this.snapshotHandlers.put(snapshot.getTable(), handler); } catch (Exception e) { // cleanup the working directory by trying to delete it from the fs. Path workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir); @@ -493,6 +493,9 @@ public class SnapshotManager implements Stoppable { LOG.error("Couldn't delete working directory (" + workingDir + " for snapshot:" + ClientSnapshotDescriptionUtils.toString(snapshot)); } + // need to mark this completed to close off and allow cleanup to happen. + handler.cancel("Failed to take snapshot '" + ClientSnapshotDescriptionUtils.toString(snapshot) + + "' due to exception" + e.getMessage()); // fail the snapshot throw new SnapshotCreationException("Could not build snapshot handler", e, snapshot); }