HBASE-18512, Region Server will abort with IllegalStateException if HDFS umask 
has limited scope

Signed-off-by: tedyu <[email protected]>
(cherry picked from commit 12201249383bb7dab56ff857fba074c6ed311990)


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

Branch: refs/heads/branch-1.3
Commit: d1b0c322373e27f10ac104ae2c2fd2645444929f
Parents: 7d7279d
Author: Pankaj Kumar <[email protected]>
Authored: Mon Aug 14 21:27:45 2017 +0800
Committer: Sean Busbey <[email protected]>
Committed: Fri Aug 17 23:10:40 2018 -0500

----------------------------------------------------------------------
 .../security/access/SecureBulkLoadEndpoint.java | 21 +++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/d1b0c322/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java
index f0169ab..2ad8cee 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java
@@ -148,15 +148,26 @@ public class SecureBulkLoadEndpoint extends 
SecureBulkLoadService
       fs = baseStagingDir.getFileSystem(conf);
       if (!fs.exists(baseStagingDir)) {
         fs.mkdirs(baseStagingDir, PERM_HIDDEN);
-      } else {
-        fs.setPermission(baseStagingDir, PERM_HIDDEN);
       }
-      //no sticky bit in hadoop-1.0, making directory nonempty so it never 
gets erased
-      fs.mkdirs(new Path(baseStagingDir,"DONOTERASE"), PERM_HIDDEN);
       FileStatus status = fs.getFileStatus(baseStagingDir);
-      if(status == null) {
+      if (status == null) {
         throw new IllegalStateException("Failed to create staging directory");
       }
+
+      // If HDFS UMASK value has limited scope then staging directory 
permission may not be 711
+      // after creation, so we should set staging directory permission 
explicitly.
+      if (!status.getPermission().equals(PERM_HIDDEN)) {
+        fs.setPermission(baseStagingDir, PERM_HIDDEN);
+        status = fs.getFileStatus(baseStagingDir);
+      }
+
+      // no sticky bit in hadoop-1.0, making directory nonempty so it never 
gets erased
+      Path doNotEraseDir = new Path(baseStagingDir, "DONOTERASE");
+      if (!fs.exists(doNotEraseDir)) {
+        fs.mkdirs(doNotEraseDir, PERM_HIDDEN);
+        fs.setPermission(doNotEraseDir, PERM_HIDDEN);
+      }
+
       String scheme = fs.getScheme().toLowerCase();
       if (!fsSet.contains(scheme) && 
!status.getPermission().equals(PERM_HIDDEN)) {
         throw new IllegalStateException(

Reply via email to