You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by vi...@apache.org on 2015/03/30 19:27:59 UTC
hadoop git commit: MAPREDUCE-6288. Changed permissions on JobHistory
server's done directory so that user's client can load the conf files
directly. Contributed by Robert Kanter.
Repository: hadoop
Updated Branches:
refs/heads/trunk c358368f5 -> 5358b8316
MAPREDUCE-6288. Changed permissions on JobHistory server's done directory so that user's client can load the conf files directly. Contributed by Robert Kanter.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/5358b831
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/5358b831
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/5358b831
Branch: refs/heads/trunk
Commit: 5358b83167777a7108b32c9900fb0d01ca0fe961
Parents: c358368
Author: Vinod Kumar Vavilapalli <vi...@apache.org>
Authored: Mon Mar 30 10:27:19 2015 -0700
Committer: Vinod Kumar Vavilapalli <vi...@apache.org>
Committed: Mon Mar 30 10:27:19 2015 -0700
----------------------------------------------------------------------
hadoop-mapreduce-project/CHANGES.txt | 4 ++
.../v2/jobhistory/JobHistoryUtils.java | 4 +-
.../mapreduce/v2/hs/HistoryFileManager.java | 31 ++++++++-
.../mapreduce/v2/hs/TestHistoryFileManager.java | 73 ++++++++++++++++++++
4 files changed, 108 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5358b831/hadoop-mapreduce-project/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-mapreduce-project/CHANGES.txt b/hadoop-mapreduce-project/CHANGES.txt
index b0367a7..69ff96b 100644
--- a/hadoop-mapreduce-project/CHANGES.txt
+++ b/hadoop-mapreduce-project/CHANGES.txt
@@ -510,6 +510,10 @@ Release 2.7.0 - UNRELEASED
MAPREDUCE-6285. ClientServiceDelegate should not retry upon
AuthenticationException. (Jonathan Eagles via ozawa)
+ MAPREDUCE-6288. Changed permissions on JobHistory server's done directory
+ so that user's client can load the conf files directly. (Robert Kanter via
+ vinodkv)
+
Release 2.6.1 - UNRELEASED
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5358b831/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/v2/jobhistory/JobHistoryUtils.java
----------------------------------------------------------------------
diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/v2/jobhistory/JobHistoryUtils.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/v2/jobhistory/JobHistoryUtils.java
index e279c03..8966e4e 100644
--- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/v2/jobhistory/JobHistoryUtils.java
+++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/v2/jobhistory/JobHistoryUtils.java
@@ -72,7 +72,7 @@ public class JobHistoryUtils {
* Permissions for the history done dir and derivatives.
*/
public static final FsPermission HISTORY_DONE_DIR_PERMISSION =
- FsPermission.createImmutable((short) 0770);
+ FsPermission.createImmutable((short) 0771);
public static final FsPermission HISTORY_DONE_FILE_PERMISSION =
FsPermission.createImmutable((short) 0770); // rwx------
@@ -81,7 +81,7 @@ public class JobHistoryUtils {
* Umask for the done dir and derivatives.
*/
public static final FsPermission HISTORY_DONE_DIR_UMASK = FsPermission
- .createImmutable((short) (0770 ^ 0777));
+ .createImmutable((short) (0771 ^ 0777));
/**
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5358b831/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/HistoryFileManager.java
----------------------------------------------------------------------
diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/HistoryFileManager.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/HistoryFileManager.java
index 65f8a4f..5377075 100644
--- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/HistoryFileManager.java
+++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/HistoryFileManager.java
@@ -571,8 +571,10 @@ public class HistoryFileManager extends AbstractService {
new Path(doneDirPrefix));
doneDirFc = FileContext.getFileContext(doneDirPrefixPath.toUri(), conf);
doneDirFc.setUMask(JobHistoryUtils.HISTORY_DONE_DIR_UMASK);
- mkdir(doneDirFc, doneDirPrefixPath, new FsPermission(
- JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION));
+ FsPermission doneDirPerm = new FsPermission(
+ JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION);
+ mkdir(doneDirFc, doneDirPrefixPath, doneDirPerm);
+ checkHistoryDirsPermissions(doneDirFc, doneDirPrefixPath, doneDirPerm);
} catch (ConnectException ex) {
if (logWait) {
LOG.info("Waiting for FileSystem at " +
@@ -659,6 +661,31 @@ public class HistoryFileManager extends AbstractService {
}
}
+ private void checkHistoryDirsPermissions(FileContext fc, Path donePath,
+ FsPermission fsp) throws IOException {
+ FileStatus fsStatus = fc.getFileStatus(donePath);
+ if (fsStatus.getPermission().toShort() != fsp.toShort()) {
+ fc.setPermission(donePath, fsp);
+ }
+ List<FileStatus> dirs = findTimestampedDirectories();
+ for (FileStatus dir : dirs) {
+ setPermission(fc, donePath, fsp, dir);
+ }
+ }
+
+ private void setPermission(FileContext fc, Path donePath, FsPermission fsp,
+ FileStatus dir) throws IOException {
+ FsPermission fsPerm = dir.getPermission();
+ if (fsPerm.toShort() != fsp.toShort()) {
+ fc.setPermission(dir.getPath(), fsp);
+ Path parentPath = dir.getPath().getParent();
+ if (!parentPath.equals(donePath)) {
+ FileStatus parentDir = fc.getFileStatus(parentPath);
+ setPermission(fc, donePath, fsp, parentDir);
+ }
+ }
+ }
+
/**
* Populates index data structures. Should only be called at initialization
* times.
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5358b831/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/TestHistoryFileManager.java
----------------------------------------------------------------------
diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/TestHistoryFileManager.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/TestHistoryFileManager.java
index e2e943a..032bb72 100644
--- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/TestHistoryFileManager.java
+++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/TestHistoryFileManager.java
@@ -23,6 +23,9 @@ import java.io.File;
import java.io.FileOutputStream;
import java.util.UUID;
+import org.apache.hadoop.fs.permission.FsPermission;
+import org.apache.hadoop.hdfs.DistributedFileSystem;
+import org.apache.hadoop.mapreduce.v2.jobhistory.JobHistoryUtils;
import org.junit.Assert;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
@@ -109,6 +112,76 @@ public class TestHistoryFileManager {
}
@Test
+ public void testUpdateDirPermissions() throws Exception {
+ DistributedFileSystem fs = dfsCluster.getFileSystem();
+ fs.setSafeMode( HdfsConstants.SafeModeAction.SAFEMODE_LEAVE);
+ Assert.assertFalse(dfsCluster.getFileSystem().isInSafeMode());
+ Configuration conf = dfsCluster.getConfiguration(0);
+ conf.set(JHAdminConfig.MR_HISTORY_DONE_DIR, getDoneDirNameForTest());
+ conf.set(JHAdminConfig.MR_HISTORY_INTERMEDIATE_DONE_DIR, getIntermediateDoneDirNameForTest());
+ Path p1a = new Path(getDoneDirNameForTest(), "2013");
+ Path p1b = new Path(p1a, "02");
+ Path p1c = new Path(p1b, "15");
+ Path p1d = new Path(p1c, "000000");
+ Path p2a = new Path(getDoneDirNameForTest(), "2013");
+ Path p2b = new Path(p2a, "03");
+ Path p2c = new Path(p2b, "14");
+ Path p2d = new Path(p2c, "000001");
+ FsPermission oldPerms = new FsPermission((short) 0770);
+ fs.mkdirs(p1d);
+ fs.mkdirs(p2d);
+ fs.setPermission(p1a, oldPerms);
+ fs.setPermission(p1b, oldPerms);
+ fs.setPermission(p1c, oldPerms);
+ fs.setPermission(p1d, oldPerms);
+ fs.setPermission(p2a, oldPerms);
+ fs.setPermission(p2b, oldPerms);
+ fs.setPermission(p2c, oldPerms);
+ fs.setPermission(p2d, oldPerms);
+ Path p1File = new Path(p1d, "foo.jhist");
+ Assert.assertTrue(fs.createNewFile(p1File));
+ fs.setPermission(p1File, JobHistoryUtils.HISTORY_DONE_FILE_PERMISSION);
+ Path p2File = new Path(p2d, "bar.jhist");
+ Assert.assertTrue(fs.createNewFile(p2File));
+ fs.setPermission(p2File, JobHistoryUtils.HISTORY_DONE_FILE_PERMISSION);
+ Assert.assertEquals(oldPerms, fs.getFileStatus(p1a).getPermission());
+ Assert.assertEquals(oldPerms, fs.getFileStatus(p1b).getPermission());
+ Assert.assertEquals(oldPerms, fs.getFileStatus(p1c).getPermission());
+ Assert.assertEquals(oldPerms, fs.getFileStatus(p1d).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_FILE_PERMISSION,
+ fs.getFileStatus(p1File).getPermission());
+ Assert.assertEquals(oldPerms, fs.getFileStatus(p2a).getPermission());
+ Assert.assertEquals(oldPerms, fs.getFileStatus(p2b).getPermission());
+ Assert.assertEquals(oldPerms, fs.getFileStatus(p2c).getPermission());
+ Assert.assertEquals(oldPerms, fs.getFileStatus(p2d).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_FILE_PERMISSION,
+ fs.getFileStatus(p2File).getPermission());
+ HistoryFileManager hfm = new HistoryFileManager();
+ hfm.conf = conf;
+ Assert.assertEquals(true, hfm.tryCreatingHistoryDirs(false));
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION,
+ fs.getFileStatus(p1a).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION,
+ fs.getFileStatus(p1b).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION,
+ fs.getFileStatus(p1c).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION,
+ fs.getFileStatus(p1d).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_FILE_PERMISSION,
+ fs.getFileStatus(p2File).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION,
+ fs.getFileStatus(p2a).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION,
+ fs.getFileStatus(p2b).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION,
+ fs.getFileStatus(p2c).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_DIR_PERMISSION,
+ fs.getFileStatus(p2d).getPermission());
+ Assert.assertEquals(JobHistoryUtils.HISTORY_DONE_FILE_PERMISSION,
+ fs.getFileStatus(p2File).getPermission());
+ }
+
+ @Test
public void testCreateDirsWithAdditionalFileSystem() throws Exception {
dfsCluster.getFileSystem().setSafeMode(
HdfsConstants.SafeModeAction.SAFEMODE_LEAVE);