YARN-5001. Aggregated Logs root directory is created with wrong group if nonexistent. Contributed by Haibo Chen
(cherry picked from commit 76893a4100
)
This commit is contained in:
parent
49f059125a
commit
5194a9bb6f
|
@ -56,6 +56,9 @@ Release 2.7.4 - UNRELEASED
|
||||||
YARN-3432. Cluster metrics have wrong Total Memory when there is reserved
|
YARN-3432. Cluster metrics have wrong Total Memory when there is reserved
|
||||||
memory on CS. (Brahma Reddy Battula via curino)
|
memory on CS. (Brahma Reddy Battula via curino)
|
||||||
|
|
||||||
|
YARN-5001. Aggregated Logs root directory is created with wrong group if
|
||||||
|
nonexistent (Haibo Chen via jlowe)
|
||||||
|
|
||||||
Release 2.7.3 - 2016-08-25
|
Release 2.7.3 - 2016-08-25
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -213,6 +213,21 @@ public class LogAggregationService extends AbstractService implements
|
||||||
remoteFS.getWorkingDirectory());
|
remoteFS.getWorkingDirectory());
|
||||||
remoteFS.mkdirs(qualified, new FsPermission(TLDIR_PERMISSIONS));
|
remoteFS.mkdirs(qualified, new FsPermission(TLDIR_PERMISSIONS));
|
||||||
remoteFS.setPermission(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) {
|
} catch (IOException e) {
|
||||||
throw new YarnRuntimeException("Failed to create remoteLogDir ["
|
throw new YarnRuntimeException("Failed to create remoteLogDir ["
|
||||||
+ this.remoteRootLogDir + "]", e);
|
+ this.remoteRootLogDir + "]", e);
|
||||||
|
|
|
@ -589,6 +589,28 @@ public class TestLogAggregationService extends BaseContainerManagerTest {
|
||||||
aNewFile.delete(); //housekeeping
|
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
|
@Test
|
||||||
public void testAppLogDirCreation() throws Exception {
|
public void testAppLogDirCreation() throws Exception {
|
||||||
final String logSuffix = "logs";
|
final String logSuffix = "logs";
|
||||||
|
|
Loading…
Reference in New Issue