HBASE-17861: Regionserver down when checking the permission of staging dir if hbase.rootdir is on S3
Signed-off-by: tedyu <[email protected]> (cherry picked from commit 4057a6c89c74c9f595cb51ac3bdc288396a0b257) Conflicts: hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/0466474d Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/0466474d Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/0466474d Branch: refs/heads/branch-1.2 Commit: 0466474d845413b4145e4602028ca49bf20130a4 Parents: 2676d49 Author: Yi Liang <[email protected]> Authored: Mon Apr 3 20:39:35 2017 -0700 Committer: Sean Busbey <[email protected]> Committed: Fri Aug 17 23:21:16 2018 -0500 ---------------------------------------------------------------------- .../hbase/security/access/SecureBulkLoadEndpoint.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/0466474d/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 5db3fe1..fae1e2d 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 @@ -145,16 +145,20 @@ public class SecureBulkLoadEndpoint extends SecureBulkLoadService Set<String> fsSet = getFileSystemSchemesWithoutPermissionSupport(conf); try { - fs = FileSystem.get(conf); - fs.mkdirs(baseStagingDir, PERM_HIDDEN); - fs.setPermission(baseStagingDir, PERM_HIDDEN); + 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) { throw new IllegalStateException("Failed to create staging directory"); } - if(!status.getPermission().equals(PERM_HIDDEN)) { + String scheme = fs.getScheme().toLowerCase(); + if (!fsSet.contains(scheme) && !status.getPermission().equals(PERM_HIDDEN)) { throw new IllegalStateException( "Staging directory of " + baseStagingDir + " already exists but permissions aren't set to '-rwx--x--x' "); }
