Author: ddas
Date: Mon Mar 30 12:00:45 2009
New Revision: 759932
URL: http://svn.apache.org/viewvc?rev=759932&view=rev
Log:
HADOOP-5473. Solves a race condition in killing a task - the state is KILLED if
there is a user request pending to kill the task and the TT reported the state
as SUCCESS. Contributed by Amareshwari Sriramadasu.
Modified:
hadoop/core/trunk/CHANGES.txt
hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java
hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskInProgress.java
Modified: hadoop/core/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=759932&r1=759931&r2=759932&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Mon Mar 30 12:00:45 2009
@@ -1139,6 +1139,10 @@
HADOOP-5588. Remove an unnecessary call to listStatus(..) in
FileSystem.globStatusInternal(..). (Hairong Kuang via szetszwo)
+ HADOOP-5473. Solves a race condition in killing a task - the state is
KILLED
+ if there is a user request pending to kill the task and the TT reported
+ the state as SUCCESS. (Amareshwari Sriramadasu via ddas)
+
Release 0.19.2 - Unreleased
BUG FIXES
Modified:
hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java
URL:
http://svn.apache.org/viewvc/hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java?rev=759932&r1=759931&r2=759932&view=diff
==============================================================================
--- hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java
(original)
+++ hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/JobInProgress.java
Mon Mar 30 12:00:45 2009
@@ -748,7 +748,10 @@
// mark the task as KILLED.
// In case of task with no promotion the task tracker will mark the task
// as SUCCEEDED.
- if (wasComplete && (status.getRunState() == TaskStatus.State.SUCCEEDED)) {
+ // User has requested to kill the task, but TT reported SUCCEEDED,
+ // mark the task KILLED.
+ if ((wasComplete || tip.wasKilled(taskid)) &&
+ (status.getRunState() == TaskStatus.State.SUCCEEDED)) {
status.setRunState(TaskStatus.State.KILLED);
}
Modified:
hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskInProgress.java
URL:
http://svn.apache.org/viewvc/hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskInProgress.java?rev=759932&r1=759931&r2=759932&view=diff
==============================================================================
--- hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskInProgress.java
(original)
+++ hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskInProgress.java
Mon Mar 30 12:00:45 2009
@@ -590,7 +590,8 @@
// Check if the user manually KILLED/FAILED this task-attempt...
Boolean shouldFail = tasksToKill.remove(taskid);
if (shouldFail != null) {
- if (isCleanupAttempt(taskid) || jobSetup || jobCleanup) {
+ if (status.getRunState() == TaskStatus.State.FAILED ||
+ status.getRunState() == TaskStatus.State.KILLED) {
taskState = (shouldFail) ? TaskStatus.State.FAILED :
TaskStatus.State.KILLED;
} else {
@@ -969,6 +970,10 @@
return taskStatuses.get(taskid).getTaskTracker();
}
+ boolean wasKilled(TaskAttemptID taskid) {
+ return tasksToKill.containsKey(taskid);
+ }
+
/**
* Has this task already failed on this machine?
* @param trackerHost The task tracker hostname