This is an automated email from the ASF dual-hosted git repository.

shv pushed a commit to branch branch-2.10
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/branch-2.10 by this push:
     new cb5af00  HDFS-10650. DFSClient#mkdirs and DFSClient#primitiveMkdir 
should use default directory permission. Contributed by John Zhuge.
cb5af00 is described below

commit cb5af0012ed94bb8ab63cfdcdfcd1ab17f6660bb
Author: Xiao Chen <x...@apache.org>
AuthorDate: Thu Jul 28 13:15:02 2016 -0700

    HDFS-10650. DFSClient#mkdirs and DFSClient#primitiveMkdir should use 
default directory permission. Contributed by John Zhuge.
---
 .../src/main/java/org/apache/hadoop/hdfs/DFSClient.java    | 14 ++++++++++----
 .../java/org/apache/hadoop/security/TestPermission.java    | 10 ++++++++++
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
 
b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
index ad4e499..32553fb 100755
--- 
a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
@@ -1209,6 +1209,13 @@ public class DFSClient implements java.io.Closeable, 
RemotePeerFactory,
     return permission.applyUMask(dfsClientConf.getUMask());
   }
 
+  private FsPermission applyUMaskDir(FsPermission permission) {
+    if (permission == null) {
+      permission = FsPermission.getDirDefault();
+    }
+    return permission.applyUMask(dfsClientConf.getUMask());
+  }
+
   /**
    * Same as {@link #create(String, FsPermission, EnumSet, boolean, short, 
long,
    * Progressable, int, ChecksumOpt)} with the addition of favoredNodes that is
@@ -2458,7 +2465,7 @@ public class DFSClient implements java.io.Closeable, 
RemotePeerFactory,
    *
    * @param src The path of the directory being created
    * @param permission The permission of the directory being created.
-   * If permission == null, use {@link FsPermission#getDefault()}.
+   * If permission == null, use {@link FsPermission#getDirDefault()}.
    * @param createParent create missing parent directory if true
    *
    * @return True if the operation success.
@@ -2467,7 +2474,7 @@ public class DFSClient implements java.io.Closeable, 
RemotePeerFactory,
    */
   public boolean mkdirs(String src, FsPermission permission,
       boolean createParent) throws IOException {
-    final FsPermission masked = applyUMask(permission);
+    final FsPermission masked = applyUMaskDir(permission);
     return primitiveMkdir(src, masked, createParent);
   }
 
@@ -2488,9 +2495,8 @@ public class DFSClient implements java.io.Closeable, 
RemotePeerFactory,
       boolean createParent) throws IOException {
     checkOpen();
     if (absPermission == null) {
-      absPermission = applyUMask(null);
+      absPermission = applyUMaskDir(null);
     }
-
     LOG.debug("{}: masked={}", src, absPermission);
     try (TraceScope ignored = tracer.newScope("mkdir")) {
       return namenode.mkdirs(src, absPermission, createParent);
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/security/TestPermission.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/security/TestPermission.java
index 5e4f693..d3a4956 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/security/TestPermission.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/security/TestPermission.java
@@ -53,6 +53,7 @@ public class TestPermission {
   final private static Path ROOT_PATH = new Path("/data");
   final private static Path CHILD_DIR1 = new Path(ROOT_PATH, "child1");
   final private static Path CHILD_DIR2 = new Path(ROOT_PATH, "child2");
+  final private static Path CHILD_DIR3 = new Path(ROOT_PATH, "child3");
   final private static Path CHILD_FILE1 = new Path(ROOT_PATH, "file1");
   final private static Path CHILD_FILE2 = new Path(ROOT_PATH, "file2");
   final private static Path CHILD_FILE3 = new Path(ROOT_PATH, "file3");
@@ -237,6 +238,9 @@ public class TestPermission {
       
       // following dir/file creations are legal
       nnfs.mkdirs(CHILD_DIR1);
+      status = nnfs.getFileStatus(CHILD_DIR1);
+      assertThat("Expect 755 = 777 (default dir) - 022 (default umask)",
+          status.getPermission().toString(), is("rwxr-xr-x"));
       out = nnfs.create(CHILD_FILE1);
       status = nnfs.getFileStatus(CHILD_FILE1);
       assertTrue(status.getPermission().toString().equals("rw-r--r--"));
@@ -248,6 +252,12 @@ public class TestPermission {
       status = nnfs.getFileStatus(CHILD_FILE1);
       assertTrue(status.getPermission().toString().equals("rwx------"));
 
+      // mkdirs with null permission
+      nnfs.mkdirs(CHILD_DIR3, null);
+      status = nnfs.getFileStatus(CHILD_DIR3);
+      assertThat("Expect 755 = 777 (default dir) - 022 (default umask)",
+          status.getPermission().toString(), is("rwxr-xr-x"));
+
       // following read is legal
       byte dataIn[] = new byte[FILE_LEN];
       FSDataInputStream fin = nnfs.open(CHILD_FILE1);

---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to