YARN-4005. Completed container whose app is finished is possibly not removed from NMStateStore. Contributed by Jun Gong
(cherry picked from commit 38aed1a94e
)
Conflicts:
hadoop-yarn-project/CHANGES.txt
This commit is contained in:
parent
aa0231f921
commit
84f1d99d02
|
@ -97,6 +97,9 @@ Release 2.7.2 - UNRELEASED
|
|||
YARN-4209. RMStateStore FENCED state doesn’t work due to updateFencedState called
|
||||
by stateMachine.doTransition. (Zhihai Xu via rohithsharmaks)
|
||||
|
||||
YARN-4005. Completed container whose app is finished is possibly not
|
||||
removed from NMStateStore. (Jun Gong via jianhe)
|
||||
|
||||
Release 2.7.1 - 2015-07-06
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -378,12 +378,12 @@ public class NodeStatusUpdaterImpl extends AbstractService implements
|
|||
} else {
|
||||
if (!isContainerRecentlyStopped(containerId)) {
|
||||
pendingCompletedContainers.put(containerId, containerStatus);
|
||||
// Adding to finished containers cache. Cache will keep it around at
|
||||
// least for #durationToTrackStoppedContainers duration. In the
|
||||
// subsequent call to stop container it will get removed from cache.
|
||||
addCompletedContainer(containerId);
|
||||
}
|
||||
}
|
||||
// Adding to finished containers cache. Cache will keep it around at
|
||||
// least for #durationToTrackStoppedContainers duration. In the
|
||||
// subsequent call to stop container it will get removed from cache.
|
||||
addCompletedContainer(containerId);
|
||||
} else {
|
||||
containerStatuses.add(containerStatus);
|
||||
}
|
||||
|
|
|
@ -950,6 +950,40 @@ public class TestNodeStatusUpdater {
|
|||
Assert.assertTrue(containerIdSet.contains(runningContainerId));
|
||||
}
|
||||
|
||||
@Test(timeout = 10000)
|
||||
public void testCompletedContainersIsRecentlyStopped() throws Exception {
|
||||
NodeManager nm = new NodeManager();
|
||||
nm.init(conf);
|
||||
NodeStatusUpdaterImpl nodeStatusUpdater =
|
||||
(NodeStatusUpdaterImpl) nm.getNodeStatusUpdater();
|
||||
ApplicationId appId = ApplicationId.newInstance(0, 0);
|
||||
Application completedApp = mock(Application.class);
|
||||
when(completedApp.getApplicationState()).thenReturn(
|
||||
ApplicationState.FINISHED);
|
||||
ApplicationAttemptId appAttemptId =
|
||||
ApplicationAttemptId.newInstance(appId, 0);
|
||||
ContainerId containerId = ContainerId.newContainerId(appAttemptId, 1);
|
||||
Token containerToken =
|
||||
BuilderUtils.newContainerToken(containerId, "host", 1234, "user",
|
||||
BuilderUtils.newResource(1024, 1), 0, 123,
|
||||
"password".getBytes(), 0);
|
||||
Container completedContainer = new ContainerImpl(conf, null,
|
||||
null, null, null, null,
|
||||
BuilderUtils.newContainerTokenIdentifier(containerToken)) {
|
||||
@Override
|
||||
public ContainerState getCurrentState() {
|
||||
return ContainerState.COMPLETE;
|
||||
}
|
||||
};
|
||||
|
||||
nm.getNMContext().getApplications().putIfAbsent(appId, completedApp);
|
||||
nm.getNMContext().getContainers().put(containerId, completedContainer);
|
||||
|
||||
Assert.assertEquals(1, nodeStatusUpdater.getContainerStatuses().size());
|
||||
Assert.assertTrue(nodeStatusUpdater.isContainerRecentlyStopped(
|
||||
containerId));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCleanedupApplicationContainerCleanup() throws IOException {
|
||||
NodeManager nm = new NodeManager();
|
||||
|
|
Loading…
Reference in New Issue