YARN-5001. Aggregated Logs root directory is created with wrong group if nonexistent. Contributed by Haibo Chen
This commit is contained in:
parent
34173a42d4
commit
76893a4100
@ -258,6 +258,21 @@ void verifyAndCreateRemoteLogDir(Configuration conf) {
|
||||
remoteFS.getWorkingDirectory());
|
||||
remoteFS.mkdirs(qualified, new FsPermission(TLDIR_PERMISSIONS));
|
||||
remoteFS.setPermission(qualified, new FsPermission(TLDIR_PERMISSIONS));
|
||||
|
||||
UserGroupInformation loginUser = UserGroupInformation.getLoginUser();
|
||||
String primaryGroupName = null;
|
||||
try {
|
||||
primaryGroupName = loginUser.getPrimaryGroupName();
|
||||
} catch (IOException e) {
|
||||
LOG.warn("No primary group found. The remote root log directory" +
|
||||
" will be created with the HDFS superuser being its group " +
|
||||
"owner. JobHistoryServer may be unable to read the directory.");
|
||||
}
|
||||
// set owner on the remote directory only if the primary group exists
|
||||
if (primaryGroupName != null) {
|
||||
remoteFS.setOwner(qualified,
|
||||
loginUser.getShortUserName(), primaryGroupName);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new YarnRuntimeException("Failed to create remoteLogDir ["
|
||||
+ this.remoteRootLogDir + "]", e);
|
||||
|
@ -608,7 +608,7 @@ public void testVerifyAndCreateRemoteDirNonExistence()
|
||||
throws Exception {
|
||||
this.conf.set(YarnConfiguration.NM_LOG_DIRS, localLogDir.getAbsolutePath());
|
||||
File aNewFile = new File(String.valueOf("tmp"+System.currentTimeMillis()));
|
||||
this.conf.set(YarnConfiguration.NM_REMOTE_APP_LOG_DIR,
|
||||
this.conf.set(YarnConfiguration.NM_REMOTE_APP_LOG_DIR,
|
||||
aNewFile.getAbsolutePath());
|
||||
|
||||
LogAggregationService logAggregationService = spy(
|
||||
@ -625,6 +625,28 @@ public void testVerifyAndCreateRemoteDirNonExistence()
|
||||
aNewFile.delete(); //housekeeping
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoteRootLogDirIsCreatedWithCorrectGroupOwner()
|
||||
throws IOException {
|
||||
this.conf.set(YarnConfiguration.NM_LOG_DIRS, localLogDir.getAbsolutePath());
|
||||
Path aNewFile = new Path(String.valueOf("tmp"+System.currentTimeMillis()));
|
||||
this.conf.set(YarnConfiguration.NM_REMOTE_APP_LOG_DIR, aNewFile.getName());
|
||||
|
||||
LogAggregationService logAggregationService = new LogAggregationService(
|
||||
dispatcher, this.context, this.delSrvc, super.dirsHandler);
|
||||
logAggregationService.init(this.conf);
|
||||
logAggregationService.verifyAndCreateRemoteLogDir(this.conf);
|
||||
|
||||
String targetGroup =
|
||||
UserGroupInformation.getLoginUser().getPrimaryGroupName();
|
||||
FileSystem fs = FileSystem.get(this.conf);
|
||||
FileStatus fileStatus = fs.getFileStatus(aNewFile);
|
||||
Assert.assertEquals("The new aggregate file is not successfully created",
|
||||
fileStatus.getGroup(), targetGroup);
|
||||
|
||||
fs.delete(aNewFile, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAppLogDirCreation() throws Exception {
|
||||
final String logSuffix = "logs";
|
||||
|
Loading…
Reference in New Issue
Block a user