You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2015/09/22 21:56:55 UTC

hbase git commit: HBASE-14445 ExportSnapshot does not honor -chmod option

Repository: hbase
Updated Branches:
  refs/heads/master 487f74172 -> f697d2d31


HBASE-14445 ExportSnapshot does not honor -chmod option


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/f697d2d3
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/f697d2d3
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/f697d2d3

Branch: refs/heads/master
Commit: f697d2d312bc04072ccd64c231319e7e571d1aff
Parents: 487f741
Author: tedyu <yu...@gmail.com>
Authored: Tue Sep 22 12:56:48 2015 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Tue Sep 22 12:56:48 2015 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/snapshot/ExportSnapshot.java   | 28 ++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/f697d2d3/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
----------------------------------------------------------------------
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 5595fc9..0bcbc1e 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));
+        }
       }
     }
 
@@ -835,6 +840,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);