MultipleArcTransition<TaskImpl, TaskEvent, TaskStateInternal> {
@Override
public TaskStateInternal transition(TaskImpl task, TaskEvent event) {
task.failedAttempts++;
TaskEventTAUpdate castEvent = (TaskEventTAUpdate) event;
task.addDiagnosticInfo("TaskAttempt " + castEvent.getTaskAttemptID().getId() + " failed,"
+ " info=" + task.getAttempt(castEvent.getTaskAttemptID()).getDiagnostics());
if (task.commitAttempt != null &&
castEvent.getTaskAttemptID().equals(task.commitAttempt)) {
task.commitAttempt = null;
}
if (castEvent.getTaskAttemptID().equals(task.outputConsumableAttempt)) {
task.outputConsumableAttempt = null;
task.handleTaskAttemptCompletion(castEvent.getTaskAttemptID(),
TaskAttemptStateInternal.FAILED);
}
// The attempt would have informed the scheduler about it's failure