MAPREDUCE-7353: Mapreduce job fails when NM is stopped. Contributed by Bilwa S T (BilwaST)
(cherry picked from commit 7581413156
)
This commit is contained in:
parent
99cff01e38
commit
e395711164
|
@ -492,10 +492,15 @@ public abstract class TaskAttemptImpl implements
|
||||||
TaskAttemptStateInternal.SUCCESS_CONTAINER_CLEANUP,
|
TaskAttemptStateInternal.SUCCESS_CONTAINER_CLEANUP,
|
||||||
TaskAttemptEventType.TA_DIAGNOSTICS_UPDATE,
|
TaskAttemptEventType.TA_DIAGNOSTICS_UPDATE,
|
||||||
DIAGNOSTIC_INFORMATION_UPDATE_TRANSITION)
|
DIAGNOSTIC_INFORMATION_UPDATE_TRANSITION)
|
||||||
|
.addTransition(TaskAttemptStateInternal.SUCCESS_CONTAINER_CLEANUP,
|
||||||
|
EnumSet.of(TaskAttemptStateInternal.SUCCEEDED,
|
||||||
|
TaskAttemptStateInternal.KILLED),
|
||||||
|
TaskAttemptEventType.TA_KILL,
|
||||||
|
new KilledAfterSuccessTransition())
|
||||||
// Ignore-able events
|
// Ignore-able events
|
||||||
.addTransition(TaskAttemptStateInternal.SUCCESS_CONTAINER_CLEANUP,
|
.addTransition(TaskAttemptStateInternal.SUCCESS_CONTAINER_CLEANUP,
|
||||||
TaskAttemptStateInternal.SUCCESS_CONTAINER_CLEANUP,
|
TaskAttemptStateInternal.SUCCESS_CONTAINER_CLEANUP,
|
||||||
EnumSet.of(TaskAttemptEventType.TA_KILL,
|
EnumSet.of(
|
||||||
TaskAttemptEventType.TA_FAILMSG,
|
TaskAttemptEventType.TA_FAILMSG,
|
||||||
TaskAttemptEventType.TA_FAILMSG_BY_CLIENT,
|
TaskAttemptEventType.TA_FAILMSG_BY_CLIENT,
|
||||||
TaskAttemptEventType.TA_TIMED_OUT,
|
TaskAttemptEventType.TA_TIMED_OUT,
|
||||||
|
|
|
@ -1870,6 +1870,36 @@ public class TestTaskAttempt{
|
||||||
createReduceTaskAttemptImplForTest(eventHandler, clock, jobConf);
|
createReduceTaskAttemptImplForTest(eventHandler, clock, jobConf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testKillingTaskWhenContainerCleanup() {
|
||||||
|
MockEventHandler eventHandler = new MockEventHandler();
|
||||||
|
TaskAttemptImpl taImpl = createTaskAttemptImpl(eventHandler);
|
||||||
|
TaskId maptaskId = MRBuilderUtils.newTaskId(taImpl.getID().getTaskId()
|
||||||
|
.getJobId(), 1, TaskType.MAP);
|
||||||
|
TaskAttemptId mapTAId =
|
||||||
|
MRBuilderUtils.newTaskAttemptId(maptaskId, 0);
|
||||||
|
|
||||||
|
// move in two steps to the desired state (cannot get there directly)
|
||||||
|
taImpl.handle(new TaskAttemptEvent(taImpl.getID(),
|
||||||
|
TaskAttemptEventType.TA_DONE));
|
||||||
|
assertEquals("Task attempt's internal state is not " +
|
||||||
|
"SUCCESS_FINISHING_CONTAINER",
|
||||||
|
TaskAttemptStateInternal.SUCCESS_FINISHING_CONTAINER,
|
||||||
|
taImpl.getInternalState());
|
||||||
|
|
||||||
|
taImpl.handle(new TaskAttemptEvent(taImpl.getID(),
|
||||||
|
TaskAttemptEventType.TA_TIMED_OUT));
|
||||||
|
assertEquals("Task attempt's internal state is not " +
|
||||||
|
"SUCCESS_CONTAINER_CLEANUP",
|
||||||
|
TaskAttemptStateInternal.SUCCESS_CONTAINER_CLEANUP,
|
||||||
|
taImpl.getInternalState());
|
||||||
|
|
||||||
|
taImpl.handle(new TaskAttemptKillEvent(mapTAId, "", true));
|
||||||
|
assertEquals("Task attempt is not in KILLED state",
|
||||||
|
TaskAttemptState.KILLED,
|
||||||
|
taImpl.getState());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testTooManyFetchFailureWhileContainerCleanup() {
|
public void testTooManyFetchFailureWhileContainerCleanup() {
|
||||||
MockEventHandler eventHandler = new MockEventHandler();
|
MockEventHandler eventHandler = new MockEventHandler();
|
||||||
|
|
Loading…
Reference in New Issue