From 74ef118e9e2246c09280ebb7eb6552ef91bdd094 Mon Sep 17 00:00:00 2001 From: tedyu Date: Fri, 1 Jun 2018 14:34:51 -0700 Subject: [PATCH] HBASE-20668 Avoid permission change if ExportSnapshot's copy fails --- .../hadoop/hbase/snapshot/ExportSnapshot.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java index 4af7dfbb8e6..f75a479a7dc 100644 --- a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java +++ b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java @@ -1027,25 +1027,29 @@ public class ExportSnapshot extends AbstractHBaseTool implements Tool { // The snapshot references must be copied before the hfiles otherwise the cleaner // will remove them because they are unreferenced. List travesedPaths = new ArrayList<>(); + boolean copySucceeded = false; try { - LOG.info("Copy Snapshot Manifest"); + LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir); travesedPaths = FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf, conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS)); + copySucceeded = true; } catch (IOException e) { throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" + snapshotDir + " to=" + initialOutputSnapshotDir, e); } finally { - if (filesUser != null || filesGroup != null) { - LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to " - + filesUser) - + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to " - + filesGroup)); - setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths); - } - if (filesMode > 0) { - LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode); - setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf); + if (copySucceeded) { + if (filesUser != null || filesGroup != null) { + LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to " + + filesUser) + + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to " + + filesGroup)); + setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths); + } + if (filesMode > 0) { + LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode); + setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf); + } } }