Task implements Writable, Configurable { public void statusUpdate(TaskUmbilicalProtocol umbilical) throws IOException { int retries = MAX_RETRIES; while (true) { try { if (!umbilical.statusUpdate(getTaskID(), taskStatus).getTaskFound()) { if (uberized) { LOG.warn("Task no longer available: " + taskId); break; } else { LOG.warn("Parent died. Exiting " + taskId); ExitUtil.terminate(66); } } taskStatus.clearStatus(); return; } catch (InterruptedException ie) { Thread.currentThread().interrupt(); } catch (IOException ie) { LOG.warn("Failure sending status update: " + StringUtils.stringifyException(ie)); if (--retries == 0) { throw ie; } } } } Task();  Task(String jobFile, TaskAttemptID taskId, int partition, 
              int numSlotsRequired); void setJobFile(String jobFile); String getJobFile(); TaskAttemptID getTaskID(); int getNumSlotsRequired(); JobID getJobID(); void setJobTokenSecret(SecretKey tokenSecret); byte[] getEncryptedSpillKey(); void setEncryptedSpillKey(byte[] encryptedSpillKey); SecretKey getJobTokenSecret(); void setShuffleSecret(SecretKey shuffleSecret); SecretKey getShuffleSecret(); int getPartition(); synchronized TaskStatus.Phase getPhase(); SortedRanges getSkipRanges(); void setSkipRanges(SortedRanges skipRanges); boolean isSkipping(); void setSkipping(boolean skipping); void write(DataOutput out); void readFields(DataInput in); @Override String toString(); void localizeConfiguration(JobConf conf); abstract void run(JobConf job, TaskUmbilicalProtocol umbilical); abstract boolean isMapTask(); Progress getProgress(); void initialize(JobConf job, JobID id, 
                         Reporter reporter,
                         boolean useNewApi); static String normalizeStatus(String status, Configuration conf); void done(TaskUmbilicalProtocol umbilical,
                   TaskReporter reporter
                   ); void statusUpdate(TaskUmbilicalProtocol umbilical); void setConf(Configuration conf); Configuration getConf(); MapOutputFile getMapOutputFile(); static String MERGED_OUTPUT_PREFIX; static final long DEFAULT_COMBINE_RECORDS_BEFORE_PROGRESS; }
@Test public void testStatusUpdateDoesNotExitInUberMode() throws Exception { setupTest(true); task.statusUpdate(umbilical); }
@Test(expected = ExitException.class) public void testStatusUpdateExitsInNonUberMode() throws Exception { setupTest(false); task.statusUpdate(umbilical); }