You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-commits@hadoop.apache.org by ac...@apache.org on 2012/01/17 07:10:50 UTC
svn commit: r1232314 - in /hadoop/common/trunk/hadoop-mapreduce-project:
CHANGES.txt
hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/Task.java
Author: acmurthy
Date: Tue Jan 17 06:10:50 2012
New Revision: 1232314
URL: http://svn.apache.org/viewvc?rev=1232314&view=rev
Log:
MAPREDUCE-2450. Fixed a corner case with interrupted communication threads leading to a long timeout in Task. Contributed by Rajesh Balamohan.
Modified:
hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt
hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/Task.java
Modified: hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt?rev=1232314&r1=1232313&r2=1232314&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt Tue Jan 17 06:10:50 2012
@@ -503,6 +503,9 @@ Release 0.23.1 - Unreleased
MAPREDUCE-3657. State machine visualize build fails. (Jason Lowe
via mahadev)
+ MAPREDUCE-2450. Fixed a corner case with interrupted communication threads
+ leading to a long timeout in Task. (Rajesh Balamohan via acmurthy)
+
Release 0.23.0 - 2011-11-01
INCOMPATIBLE CHANGES
Modified: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/Task.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/Task.java?rev=1232314&r1=1232313&r2=1232314&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/Task.java (original)
+++ hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/Task.java Tue Jan 17 06:10:50 2012
@@ -552,6 +552,8 @@ abstract public class Task implements Wr
private InputSplit split = null;
private Progress taskProgress;
private Thread pingThread = null;
+ private boolean done = true;
+ private Object lock = new Object();
/**
* flag that indicates whether progress update needs to be sent to parent.
@@ -648,6 +650,9 @@ abstract public class Task implements Wr
// get current flag value and reset it as well
boolean sendProgress = resetProgressFlag();
while (!taskDone.get()) {
+ synchronized (lock) {
+ done = false;
+ }
try {
boolean taskFound = true; // whether TT knows about this task
// sleep for a bit
@@ -680,6 +685,7 @@ abstract public class Task implements Wr
// came back up), kill ourselves
if (!taskFound) {
LOG.warn("Parent died. Exiting "+taskId);
+ resetDoneFlag();
System.exit(66);
}
@@ -692,10 +698,19 @@ abstract public class Task implements Wr
if (remainingRetries == 0) {
ReflectionUtils.logThreadInfo(LOG, "Communication exception", 0);
LOG.warn("Last retry, killing "+taskId);
+ resetDoneFlag();
System.exit(65);
}
}
}
+ //Notify that we are done with the work
+ resetDoneFlag();
+ }
+ void resetDoneFlag() {
+ synchronized (lock) {
+ done = true;
+ lock.notify();
+ }
}
public void startCommunicationThread() {
if (pingThread == null) {
@@ -706,6 +721,11 @@ abstract public class Task implements Wr
}
public void stopCommunicationThread() throws InterruptedException {
if (pingThread != null) {
+ synchronized (lock) {
+ while (!done) {
+ lock.wait();
+ }
+ }
pingThread.interrupt();
pingThread.join();
}