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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]