private synchronized void lostTaskTracker(TaskTrackerStatus taskTrackerStatus) {
		if (taskTrackerToTaskTrackerStatusMap.containsKey(taskTrackerStatus.getTaskTrackerID())) {
			// Handle task attempt on this task tracker
			List<TaskAttemptID> taskAttemptIDList = taskTrackerToTaskAttemptIDsMap.get(taskTrackerStatus
					.getTaskTrackerID());
			for (TaskAttemptID taskAttemptID : taskAttemptIDList) {
				TaskInProgress taskInProgress = taskAttemptToTaskInProgressMap.get(taskAttemptID);
				JobInProgress jobInProgress = taskInProgress.getJobInProgress();
				// Job is assigned to this task tracker
				if (jobInProgress.getState().isRunning()) {
					// Not completed task attempt or completed map task attempt
					// need to be marked failed
					boolean needToRestart = taskInProgress.isMap() || taskInProgress.getState().isInit()
							|| taskInProgress.getState().isRunning() || taskInProgress.getState().isPartialfailed();
					if (needToRestart) {
						// Mark the tip failed in the jip to triger task attempt
						// restart
						jobInProgress.failTask(taskInProgress, taskAttemptID, "Task tracker lost");
					}
				}
			}

			// Clear taskTracker related map
			taskTrackerToTaskTrackerStatusMap.remove(taskTrackerStatus.getTaskTrackerID());
			// Update total task slots
			totalMapSlots -= taskTrackerStatus.getMapTaskSlotNum();
			totalReduceSlots -= taskTrackerStatus.getReduceTaskSlotNum();
		}
	}