Skip to content

Commit d4e3640

Browse files
MAPREDUCE-6826. Job fails with InvalidStateTransitonException: Invalid event: JOB_TASK_COMPLETED at SUCCEEDED/COMMITTING. Contributed by Bilwa S T.
1 parent ce4ec74 commit d4e3640

File tree

2 files changed

+15
-3
lines changed
  • hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src

2 files changed

+15
-3
lines changed

hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/job/impl/JobImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,8 @@ JobEventType.JOB_KILL, new KillTasksTransition())
422422
EnumSet.of(JobEventType.JOB_UPDATED_NODES,
423423
JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE,
424424
JobEventType.JOB_TASK_ATTEMPT_COMPLETED,
425-
JobEventType.JOB_MAP_TASK_RESCHEDULED))
425+
JobEventType.JOB_MAP_TASK_RESCHEDULED,
426+
JobEventType.JOB_TASK_COMPLETED))
426427

427428
// Transitions from SUCCEEDED state
428429
.addTransition(JobStateInternal.SUCCEEDED, JobStateInternal.SUCCEEDED,
@@ -441,7 +442,8 @@ JobEventType.JOB_KILL, new KillTasksTransition())
441442
JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE,
442443
JobEventType.JOB_AM_REBOOT,
443444
JobEventType.JOB_TASK_ATTEMPT_COMPLETED,
444-
JobEventType.JOB_MAP_TASK_RESCHEDULED))
445+
JobEventType.JOB_MAP_TASK_RESCHEDULED,
446+
JobEventType.JOB_TASK_COMPLETED))
445447

446448
// Transitions from FAIL_WAIT state
447449
.addTransition(JobStateInternal.FAIL_WAIT,

hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/job/impl/TestJobImpl.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ public void testCommitJobFailsJob() throws Exception {
203203
public void testCheckJobCompleteSuccess() throws Exception {
204204
Configuration conf = new Configuration();
205205
conf.set(MRJobConfig.MR_AM_STAGING_DIR, stagingDir);
206-
AsyncDispatcher dispatcher = new AsyncDispatcher();
206+
DrainDispatcher dispatcher = new DrainDispatcher();
207207
dispatcher.init(conf);
208208
dispatcher.start();
209209
CyclicBarrier syncBarrier = new CyclicBarrier(2);
@@ -225,6 +225,11 @@ public void testCheckJobCompleteSuccess() throws Exception {
225225
JobEventType.JOB_MAP_TASK_RESCHEDULED));
226226
assertJobState(job, JobStateInternal.COMMITTING);
227227

228+
job.handle(new JobEvent(job.getID(),
229+
JobEventType.JOB_TASK_COMPLETED));
230+
dispatcher.await();
231+
assertJobState(job, JobStateInternal.COMMITTING);
232+
228233
// let the committer complete and verify the job succeeds
229234
syncBarrier.await();
230235
assertJobState(job, JobStateInternal.SUCCEEDED);
@@ -236,6 +241,11 @@ public void testCheckJobCompleteSuccess() throws Exception {
236241
job.handle(new JobEvent(job.getID(),
237242
JobEventType.JOB_MAP_TASK_RESCHEDULED));
238243
assertJobState(job, JobStateInternal.SUCCEEDED);
244+
245+
job.handle(new JobEvent(job.getID(),
246+
JobEventType.JOB_TASK_COMPLETED));
247+
dispatcher.await();
248+
assertJobState(job, JobStateInternal.SUCCEEDED);
239249

240250
dispatcher.stop();
241251
commitHandler.stop();

0 commit comments

Comments
 (0)