code: private List<TaskCompletionEvent> queryJobTracker(IntWritable fromEventId,
                                                      JobID jobId,
                                                      InterTrackerProtocol jobClient)
      throws IOException {
      if (jobClient == null) {
        List<TaskCompletionEvent> empty = Collections.emptyList();
        return empty;
      }
      TaskCompletionEvent t[] = jobClient.getTaskCompletionEvents(
                                                                  jobId,
                                                                  fromEventId.get(),
                                                                  probe_sample_size);
      //we are interested in map task completion events only. So store
      //only those
      List <TaskCompletionEvent> recentMapEvents =
        new ArrayList<TaskCompletionEvent>();
      for (int i = 0; i < t.length; i++) {
        if (t[i].isMap) {
          if (useTaskCompletionEventsStore) {
            // Try to get it from a store so that we don't have duplicate instances
            // in memory in the same JVM. This could happen if there are multiple TT's
            // and different reduce tasks from the same job are running in each TT.
            recentMapEvents.add(getTceFromStore(t[i]));
          } else {
            recentMapEvents.add(t[i]);
          }
        }
      }
      fromEventId.set(fromEventId.get() + t.length);
      return recentMapEvents;
    }
docs: Queries the job tracker for a set of outputs ready to be copied
  @param fromEventId the first event ID we want to start from, this is
  modified by the call to this method
  @param jobClient the job tracker
  @return a set of locations to copy outputs from
  @throws IOException