YARN-3793. Several NPEs when deleting local files on NM recovery. Contributed by Varun Saxena
(cherry picked from commit b5cdf78e8e
)
This commit is contained in:
parent
8a4970e845
commit
a721b9d812
|
@ -550,6 +550,9 @@ Release 2.7.2 - UNRELEASED
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
|
|
||||||
|
YARN-3793. Several NPEs when deleting local files on NM recovery (Varun
|
||||||
|
Saxena via jlowe)
|
||||||
|
|
||||||
Release 2.7.1 - UNRELEASED
|
Release 2.7.1 - UNRELEASED
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -276,10 +276,10 @@ public class AppLogAggregatorImpl implements AppLogAggregator {
|
||||||
aggregator.doContainerLogAggregation(writer, appFinished);
|
aggregator.doContainerLogAggregation(writer, appFinished);
|
||||||
if (uploadedFilePathsInThisCycle.size() > 0) {
|
if (uploadedFilePathsInThisCycle.size() > 0) {
|
||||||
uploadedLogsInThisCycle = true;
|
uploadedLogsInThisCycle = true;
|
||||||
|
this.delService.delete(this.userUgi.getShortUserName(), null,
|
||||||
|
uploadedFilePathsInThisCycle
|
||||||
|
.toArray(new Path[uploadedFilePathsInThisCycle.size()]));
|
||||||
}
|
}
|
||||||
this.delService.delete(this.userUgi.getShortUserName(), null,
|
|
||||||
uploadedFilePathsInThisCycle
|
|
||||||
.toArray(new Path[uploadedFilePathsInThisCycle.size()]));
|
|
||||||
|
|
||||||
// This container is finished, and all its logs have been uploaded,
|
// This container is finished, and all its logs have been uploaded,
|
||||||
// remove it from containerLogAggregators.
|
// remove it from containerLogAggregators.
|
||||||
|
|
|
@ -31,6 +31,7 @@ import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.reset;
|
import static org.mockito.Mockito.reset;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
@ -280,6 +281,41 @@ public class TestLogAggregationService extends BaseContainerManagerTest {
|
||||||
verifyLocalFileDeletion(logAggregationService);
|
verifyLocalFileDeletion(logAggregationService);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test to verify fix for YARN-3793 */
|
||||||
|
@Test
|
||||||
|
public void testNoLogsUploadedOnAppFinish() throws Exception {
|
||||||
|
this.delSrvc = new DeletionService(createContainerExecutor());
|
||||||
|
delSrvc = spy(delSrvc);
|
||||||
|
this.delSrvc.init(conf);
|
||||||
|
this.conf.set(YarnConfiguration.NM_LOG_DIRS, localLogDir.getAbsolutePath());
|
||||||
|
this.conf.set(YarnConfiguration.NM_REMOTE_APP_LOG_DIR,
|
||||||
|
this.remoteRootLogDir.getAbsolutePath());
|
||||||
|
|
||||||
|
LogAggregationService logAggregationService = new LogAggregationService(
|
||||||
|
dispatcher, this.context, this.delSrvc, super.dirsHandler);
|
||||||
|
logAggregationService.init(this.conf);
|
||||||
|
logAggregationService.start();
|
||||||
|
|
||||||
|
ApplicationId app = BuilderUtils.newApplicationId(1234, 1);
|
||||||
|
File appLogDir = new File(localLogDir, ConverterUtils.toString(app));
|
||||||
|
appLogDir.mkdir();
|
||||||
|
LogAggregationContext context =
|
||||||
|
LogAggregationContext.newInstance("HOST*", "sys*");
|
||||||
|
logAggregationService.handle(new LogHandlerAppStartedEvent(app, this.user,
|
||||||
|
null, ContainerLogsRetentionPolicy.ALL_CONTAINERS, this.acls, context));
|
||||||
|
|
||||||
|
ApplicationAttemptId appAttemptId =
|
||||||
|
BuilderUtils.newApplicationAttemptId(app, 1);
|
||||||
|
ContainerId cont = BuilderUtils.newContainerId(appAttemptId, 1);
|
||||||
|
writeContainerLogs(appLogDir, cont, new String[] { "stdout",
|
||||||
|
"stderr", "syslog" });
|
||||||
|
logAggregationService.handle(new LogHandlerContainerFinishedEvent(cont, 0));
|
||||||
|
logAggregationService.handle(new LogHandlerAppFinishedEvent(app));
|
||||||
|
logAggregationService.stop();
|
||||||
|
delSrvc.stop();
|
||||||
|
// Aggregated logs should not be deleted if not uploaded.
|
||||||
|
verify(delSrvc, times(0)).delete(user, null);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNoContainerOnNode() throws Exception {
|
public void testNoContainerOnNode() throws Exception {
|
||||||
|
|
Loading…
Reference in New Issue