HBASE-20668 Avoid permission change if ExportSnapshot's copy fails

This commit is contained in:
tedyu 2018-06-01 14:39:01 -07:00
parent d3e2248f12
commit 5a200b5902
1 changed files with 15 additions and 11 deletions

View File

@ -1027,15 +1027,18 @@ public class ExportSnapshot extends AbstractHBaseTool implements Tool {
// The snapshot references must be copied before the hfiles otherwise the cleaner // The snapshot references must be copied before the hfiles otherwise the cleaner
// will remove them because they are unreferenced. // will remove them because they are unreferenced.
List<Path> travesedPaths = new ArrayList<>(); List<Path> travesedPaths = new ArrayList<>();
boolean copySucceeded = false;
try { try {
LOG.info("Copy Snapshot Manifest"); LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);
travesedPaths = travesedPaths =
FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf, FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,
conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS)); conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));
copySucceeded = true;
} catch (IOException e) { } catch (IOException e) {
throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" + throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +
snapshotDir + " to=" + initialOutputSnapshotDir, e); snapshotDir + " to=" + initialOutputSnapshotDir, e);
} finally { } finally {
if (copySucceeded) {
if (filesUser != null || filesGroup != null) { if (filesUser != null || filesGroup != null) {
LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to " LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "
+ filesUser) + filesUser)
@ -1048,6 +1051,7 @@ public class ExportSnapshot extends AbstractHBaseTool implements Tool {
setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf); setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);
} }
} }
}
// Write a new .snapshotinfo if the target name is different from the source name // Write a new .snapshotinfo if the target name is different from the source name
if (!targetName.equals(snapshotName)) { if (!targetName.equals(snapshotName)) {