diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java index 26cdc5a..984fa63 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java @@ -3430,9 +3430,11 @@ public static boolean createDirsWithPermission(Configuration conf, Path mkdir, return createDirsWithPermission(conf, mkdir, fsPermission, recursive); } - public static boolean createDirsWithPermission(Configuration conf, Path mkdir, + public static boolean createDirsWithPermission(Configuration conf, Path mkdirPath, FsPermission fsPermission, boolean recursive) throws IOException { String origUmask = null; + LOG.info("Create dirs " + mkdirPath + " with permission " + fsPermission + " recursive " + + recursive); if (recursive) { origUmask = conf.get("fs.permissions.umask-mode"); @@ -3441,16 +3443,35 @@ public static boolean createDirsWithPermission(Configuration conf, Path mkdir, conf.set("fs.permissions.umask-mode", "000"); } - FileSystem fs = mkdir.getFileSystem(conf); - boolean retval = fs.mkdirs(mkdir, fsPermission); + FileSystem fs = FileSystem.newInstance(mkdirPath.toUri(), conf); + boolean retval = false; + try { + retval = fs.mkdirs(mkdirPath, fsPermission); + if (recursive) { + if (origUmask != null) { + conf.set("fs.permissions.umask-mode", origUmask); + } else { + conf.unset("fs.permissions.umask-mode"); + } + } - if (recursive) { - if (origUmask != null) { - conf.set("fs.permissions.umask-mode", origUmask); - } else { - conf.unset("fs.permissions.umask-mode"); + fs.close(); + } catch (IOException ioe) { + try { + if (recursive) { + if (origUmask != null) { + conf.set("fs.permissions.umask-mode", origUmask); + } else { + conf.unset("fs.permissions.umask-mode"); + } + } + + fs.close(); + } catch (IOException e) { + // do nothing - double failure } } + return retval; }