if (asyncUpdatedNeeded) { context.getEventHandler().handle( new TaskAttemptStatusUpdateEvent(taskAttemptStatus.id, lastStatusRef));
@SuppressWarnings("unchecked") @Override public void transition(TaskAttemptImpl taskAttempt, TaskAttemptEvent event) { // Status update calls don't really change the state of the attempt. TaskAttemptStatus newReportedStatus = ((TaskAttemptStatusUpdateEvent) event) .getReportedTaskAttemptStatus(); // Now switch the information in the reportedStatus taskAttempt.reportedStatus = newReportedStatus; taskAttempt.reportedStatus.taskState = taskAttempt.getState(); // send event to speculator about the reported status taskAttempt.eventHandler.handle (new SpeculatorEvent (taskAttempt.reportedStatus, taskAttempt.clock.getTime())); taskAttempt.updateProgressSplits(); //if fetch failures are present, send the fetch failure event to job //this only will happen in reduce attempt type if (taskAttempt.reportedStatus.fetchFailedMaps != null && taskAttempt.reportedStatus.fetchFailedMaps.size() > 0) { taskAttempt.eventHandler.handle(new JobTaskAttemptFetchFailureEvent( taskAttempt.attemptId, taskAttempt.reportedStatus.fetchFailedMaps)); } } }
@Test public void testSingleStatusUpdate() throws IOException, InterruptedException { configureMocks(); startListener(true); listener.statusUpdate(attemptID, firstReduceStatus); verify(ea).handle(eventCaptor.capture()); TaskAttemptStatusUpdateEvent updateEvent = (TaskAttemptStatusUpdateEvent) eventCaptor.getValue(); TaskAttemptStatus status = updateEvent.getTaskAttemptStatusRef().get(); assertTrue(status.fetchFailedMaps.contains(TASKATTEMPTID1)); assertEquals(1, status.fetchFailedMaps.size()); assertEquals(Phase.SHUFFLE, status.phase); }
private void updateStatus(MRApp app, TaskAttempt attempt, Phase phase) { TaskAttemptStatusUpdateEvent.TaskAttemptStatus status = new TaskAttemptStatusUpdateEvent.TaskAttemptStatus(); status.counters = new Counters(); status.fetchFailedMaps = new ArrayList<TaskAttemptId>(); status.id = attempt.getID(); status.mapFinishTime = 0; status.phase = phase; status.progress = 0.5f; status.shuffleFinishTime = 0; status.sortFinishTime = 0; status.stateString = "OK"; status.taskState = attempt.getState(); TaskAttemptStatusUpdateEvent event = new TaskAttemptStatusUpdateEvent(attempt.getID(), new AtomicReference<>(status)); app.getContext().getEventHandler().handle(event); }
@SuppressWarnings("unchecked") @Override public void transition(TaskAttemptImpl taskAttempt, TaskAttemptEvent event) { TaskAttemptStatusUpdateEvent statusEvent = ((TaskAttemptStatusUpdateEvent)event); AtomicReference<TaskAttemptStatus> taskAttemptStatusRef = statusEvent.getTaskAttemptStatusRef(); TaskAttemptStatus newReportedStatus = taskAttemptStatusRef.getAndSet(null); // Now switch the information in the reportedStatus taskAttempt.reportedStatus = newReportedStatus; taskAttempt.reportedStatus.taskState = taskAttempt.getState(); // send event to speculator about the reported status taskAttempt.eventHandler.handle (new SpeculatorEvent (taskAttempt.reportedStatus, taskAttempt.clock.getTime())); taskAttempt.updateProgressSplits(); //if fetch failures are present, send the fetch failure event to job //this only will happen in reduce attempt type if (taskAttempt.reportedStatus.fetchFailedMaps != null && taskAttempt.reportedStatus.fetchFailedMaps.size() > 0) { String hostname = taskAttempt.container == null ? "UNKNOWN" : taskAttempt.container.getNodeId().getHost(); taskAttempt.eventHandler.handle(new JobTaskAttemptFetchFailureEvent( taskAttempt.attemptId, taskAttempt.reportedStatus.fetchFailedMaps, hostname)); } } }
@SuppressWarnings("unchecked") @Override public void transition(TaskAttemptImpl taskAttempt, TaskAttemptEvent event) { // Status update calls don't really change the state of the attempt. TaskAttemptStatus newReportedStatus = ((TaskAttemptStatusUpdateEvent) event) .getReportedTaskAttemptStatus(); // Now switch the information in the reportedStatus taskAttempt.reportedStatus = newReportedStatus; taskAttempt.reportedStatus.taskState = taskAttempt.getState(); // send event to speculator about the reported status taskAttempt.eventHandler.handle (new SpeculatorEvent (taskAttempt.reportedStatus, taskAttempt.clock.getTime())); taskAttempt.updateProgressSplits(); //if fetch failures are present, send the fetch failure event to job //this only will happen in reduce attempt type if (taskAttempt.reportedStatus.fetchFailedMaps != null && taskAttempt.reportedStatus.fetchFailedMaps.size() > 0) { String hostname = taskAttempt.container == null ? "UNKNOWN" : taskAttempt.container.getNodeId().getHost(); taskAttempt.eventHandler.handle(new JobTaskAttemptFetchFailureEvent( taskAttempt.attemptId, taskAttempt.reportedStatus.fetchFailedMaps, hostname)); } } }
TaskAttemptState.RUNNING); TaskAttemptStatusUpdateEvent event = new TaskAttemptStatusUpdateEvent(taskAttempt.getKey(), status); appEventHandler.handle(event); speculatedTask = task.getValue(); TaskAttemptStatusUpdateEvent event = new TaskAttemptStatusUpdateEvent(taskAttempt.getKey(), status); appEventHandler.handle(event); TaskAttemptState.RUNNING); TaskAttemptStatusUpdateEvent event = new TaskAttemptStatusUpdateEvent(taskAttempt.getKey(), status); appEventHandler.handle(event);
@Test public void testCoalescedStatusUpdatesCleared() throws IOException, InterruptedException { // First two events are coalesced, the third is not configureMocks(); startListener(true); listener.statusUpdate(attemptID, firstReduceStatus); listener.statusUpdate(attemptID, secondReduceStatus); ConcurrentMap<TaskAttemptId, AtomicReference<TaskAttemptStatus>> attemptIdToStatus = listener.getAttemptIdToStatus(); attemptIdToStatus.get(attemptId).set(null); listener.statusUpdate(attemptID, thirdReduceStatus); verify(ea, times(2)).handle(eventCaptor.capture()); TaskAttemptStatusUpdateEvent updateEvent = (TaskAttemptStatusUpdateEvent) eventCaptor.getValue(); TaskAttemptStatus status = updateEvent.getTaskAttemptStatusRef().get(); assertNull(status.fetchFailedMaps); assertEquals(Phase.REDUCE, status.phase); }
TaskAttemptState.RUNNING); TaskAttemptStatusUpdateEvent event = new TaskAttemptStatusUpdateEvent(taskAttempt.getKey(), status); appEventHandler.handle(event);
new TaskAttemptStatusUpdateEvent(taskAttemptStatus.id, taskAttemptStatus)); return true;
new TaskAttemptStatusUpdateEvent(taskAttemptStatus.id, taskAttemptStatus)); return true;
new TaskAttemptStatusUpdateEvent(attempt.getID(), new AtomicReference<>(taskAttemptStatus)));