YARN-4408. Fix issue that NodeManager still reports negative running containers. Contributed by Robert Kanter.
(cherry picked from commit 62e9348bc1
)
This commit is contained in:
parent
15c2f709c6
commit
e76ba91fa5
|
@ -1032,6 +1032,9 @@ Release 2.8.0 - UNRELEASED
|
|||
YARN-4384. updateNodeResource CLI should not accept negative values for resource.
|
||||
(Junping Du via wangda)
|
||||
|
||||
YARN-4408. Fix issue that NodeManager reports negative running containers.
|
||||
(Robert Kanter via junping_du)
|
||||
|
||||
Release 2.7.3 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -1041,7 +1041,12 @@ public class ContainerImpl implements Container {
|
|||
ContainerDoneTransition {
|
||||
@Override
|
||||
public void transition(ContainerImpl container, ContainerEvent event) {
|
||||
container.metrics.endRunningContainer();
|
||||
if (container.wasLaunched) {
|
||||
container.metrics.endRunningContainer();
|
||||
} else {
|
||||
LOG.warn("Container exited with success despite being killed and not" +
|
||||
"actually running");
|
||||
}
|
||||
container.metrics.completedContainer();
|
||||
NMAuditLogger.logSuccess(container.user,
|
||||
AuditConstants.FINISH_SUCCESS_CONTAINER, "ContainerImpl",
|
||||
|
|
|
@ -397,7 +397,8 @@ public class TestContainer {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testKillOnLocalizedWhenContainerNotLaunched() throws Exception {
|
||||
public void testKillOnLocalizedWhenContainerNotLaunchedContainerKilled()
|
||||
throws Exception {
|
||||
WrappedContainer wc = null;
|
||||
try {
|
||||
wc = new WrappedContainer(17, 314159265358979L, 4344, "yak");
|
||||
|
@ -426,6 +427,62 @@ public class TestContainer {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testKillOnLocalizedWhenContainerNotLaunchedContainerSuccess()
|
||||
throws Exception {
|
||||
WrappedContainer wc = null;
|
||||
try {
|
||||
wc = new WrappedContainer(17, 314159265358979L, 4344, "yak");
|
||||
wc.initContainer();
|
||||
wc.localizeResources();
|
||||
assertEquals(ContainerState.LOCALIZED, wc.c.getContainerState());
|
||||
wc.killContainer();
|
||||
assertEquals(ContainerState.KILLING, wc.c.getContainerState());
|
||||
wc.containerSuccessful();
|
||||
wc.drainDispatcherEvents();
|
||||
assertEquals(ContainerState.EXITED_WITH_SUCCESS,
|
||||
wc.c.getContainerState());
|
||||
assertNull(wc.c.getLocalizedResources());
|
||||
verifyCleanupCall(wc);
|
||||
wc.c.handle(new ContainerEvent(wc.c.getContainerId(),
|
||||
ContainerEventType.CONTAINER_RESOURCES_CLEANEDUP));
|
||||
assertEquals(ContainerState.DONE, wc.c.getContainerState());
|
||||
assertEquals(0, metrics.getRunningContainers());
|
||||
} finally {
|
||||
if (wc != null) {
|
||||
wc.finished();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testKillOnLocalizedWhenContainerNotLaunchedContainerFailure()
|
||||
throws Exception {
|
||||
WrappedContainer wc = null;
|
||||
try {
|
||||
wc = new WrappedContainer(17, 314159265358979L, 4344, "yak");
|
||||
wc.initContainer();
|
||||
wc.localizeResources();
|
||||
assertEquals(ContainerState.LOCALIZED, wc.c.getContainerState());
|
||||
wc.killContainer();
|
||||
assertEquals(ContainerState.KILLING, wc.c.getContainerState());
|
||||
wc.containerFailed(ExitCode.FORCE_KILLED.getExitCode());
|
||||
wc.drainDispatcherEvents();
|
||||
assertEquals(ContainerState.EXITED_WITH_FAILURE,
|
||||
wc.c.getContainerState());
|
||||
assertNull(wc.c.getLocalizedResources());
|
||||
verifyCleanupCall(wc);
|
||||
wc.c.handle(new ContainerEvent(wc.c.getContainerId(),
|
||||
ContainerEventType.CONTAINER_RESOURCES_CLEANEDUP));
|
||||
assertEquals(ContainerState.DONE, wc.c.getContainerState());
|
||||
assertEquals(0, metrics.getRunningContainers());
|
||||
} finally {
|
||||
if (wc != null) {
|
||||
wc.finished();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testKillOnLocalizedWhenContainerLaunched() throws Exception {
|
||||
WrappedContainer wc = null;
|
||||
|
|
Loading…
Reference in New Issue