MAPREDUCE-2392. TaskTracker shutdown in the tests sometimes take 60s.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/mapreduce/trunk@1082703 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index 82b643a..c65657c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -639,6 +639,9 @@
     MAPREDUCE-2394. JUnit output format doesn't propagate into raid contrib
     build. (todd)
 
+    MAPREDUCE-2392. TaskTracker shutdown in the tests sometimes take 60s.
+    (tomwhite)
+
 Release 0.21.1 - Unreleased
 
   NEW FEATURES
diff --git a/src/test/mapred/org/apache/hadoop/mapred/MiniMRCluster.java b/src/test/mapred/org/apache/hadoop/mapred/MiniMRCluster.java
index 415db0c..3762f84 100644
--- a/src/test/mapred/org/apache/hadoop/mapred/MiniMRCluster.java
+++ b/src/test/mapred/org/apache/hadoop/mapred/MiniMRCluster.java
@@ -689,7 +689,6 @@
     tracker.shutdown();
 
     Thread thread = taskTrackerThreadList.remove(id);
-    thread.interrupt();
     
     try {
       thread.join();
@@ -752,7 +751,6 @@
         TaskTrackerRunner taskTracker = taskTrackerList.get(idx);
         Thread taskTrackerThread = taskTrackerThreadList.get(idx);
         taskTracker.shutdown();
-        taskTrackerThread.interrupt();
         try {
           taskTrackerThread.join();
         } catch (InterruptedException ex) {
diff --git a/src/test/mapred/org/apache/hadoop/mapred/TestJobRetire.java b/src/test/mapred/org/apache/hadoop/mapred/TestJobRetire.java
index dfc5a44..ac68a15 100644
--- a/src/test/mapred/org/apache/hadoop/mapred/TestJobRetire.java
+++ b/src/test/mapred/org/apache/hadoop/mapred/TestJobRetire.java
@@ -176,6 +176,8 @@
    */
   class WaitingTaskTracker extends TaskTracker {
     
+    private volatile boolean alive = true;
+    
     WaitingTaskTracker(JobConf conf) throws IOException, InterruptedException {
       super(conf);
     }
@@ -185,8 +187,16 @@
       HeartbeatResponse response = super.transmitHeartBeat(now);
       LOG.info("WaitingTaskTracker waiting");
       // wait forever
-      UtilsForTests.waitFor(Long.MAX_VALUE);
-      throw new IOException ("WaitingTaskTracker interrupted. Bailing out");
+      while (alive) {
+        UtilsForTests.waitFor(1000);
+      }
+      throw new IOException ("WaitingTaskTracker shutdown. Bailing out");
+    }
+    
+    @Override
+    public synchronized void shutdown() throws IOException {
+      alive = false;
+      super.shutdown();
     }
   }