diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java index 8876491..385a9d6 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java @@ -753,6 +753,15 @@ public class HRegionFileSystem { } } + static boolean mkdirs(FileSystem fs, Configuration conf, Path dir) throws IOException { + if (FSUtils.isDistributedFileSystem(fs) || + !conf.getBoolean(HConstants.ENABLE_DATA_FILE_UMASK, false)) { + return fs.mkdirs(dir); + } + FsPermission perms = FSUtils.getFilePermissions(fs, conf, HConstants.DATA_FILE_UMASK_KEY); + return fs.mkdirs(dir, perms); + } + /** * Create the region merges directory. * @throws IOException If merges dir already exists or we fail to create it. diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileWriter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileWriter.java index 0705f4c..8b84a46 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileWriter.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileWriter.java @@ -474,7 +474,7 @@ public class StoreFileWriter implements CellSink, ShipperListener { } if (!fs.exists(dir)) { - fs.mkdirs(dir); + HRegionFileSystem.mkdirs(fs, conf, dir); } // set block storage policy for temp path diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java index 3c84f57..84b3436 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java @@ -252,7 +252,7 @@ public abstract class FSUtils { * @return True is fs is instance of DistributedFileSystem * @throws IOException */ - private static boolean isDistributedFileSystem(final FileSystem fs) throws IOException { + public static boolean isDistributedFileSystem(final FileSystem fs) throws IOException { FileSystem fileSystem = fs; // If passed an instance of HFileSystem, it fails instanceof DistributedFileSystem. // Check its backing fs for dfs-ness.