From f697d2d312bc04072ccd64c231319e7e571d1aff Mon Sep 17 00:00:00 2001 From: tedyu Date: Tue, 22 Sep 2015 12:56:48 -0700 Subject: [PATCH] HBASE-14445 ExportSnapshot does not honor -chmod option --- .../hadoop/hbase/snapshot/ExportSnapshot.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java index 5595fc99207..0bcbc1e6f6d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java @@ -300,8 +300,13 @@ public class ExportSnapshot extends Configured implements Tool { createOutputPath(parent); } outputFs.mkdirs(path); - // override the owner when non-null user/group is specified - outputFs.setOwner(path, filesUser, filesGroup); + if (filesUser != null || filesGroup != null) { + // override the owner when non-null user/group is specified + outputFs.setOwner(path, filesUser, filesGroup); + } + if (filesMode > 0) { + outputFs.setPermission(path, new FsPermission(filesMode)); + } } } @@ -834,6 +839,22 @@ public class ExportSnapshot extends Configured implements Tool { } } + /** + * Set path permission. + */ + private void setPermission(final FileSystem fs, final Path path, final short filesMode, + final boolean recursive) throws IOException { + if (filesMode > 0) { + FsPermission perm = new FsPermission(filesMode); + if (recursive && fs.isDirectory(path)) { + for (FileStatus child : fs.listStatus(path)) { + setPermission(fs, child.getPath(), filesMode, recursive); + } + } + fs.setPermission(path, perm); + } + } + /** * Execute the export snapshot by copying the snapshot metadata, hfiles and wals. * @return 0 on success, and != 0 upon failure. @@ -960,6 +981,9 @@ public class ExportSnapshot extends Configured implements Tool { if (filesUser != null || filesGroup != null) { setOwner(outputFs, snapshotTmpDir, filesUser, filesGroup, true); } + if (filesMode > 0) { + setPermission(outputFs, snapshotTmpDir, (short)filesMode, true); + } } catch (IOException e) { throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" + snapshotDir + " to=" + initialOutputSnapshotDir, e);