Parcourir la source

HADOOP-389. Fix intermitten t failures of mapreduce unit tests. Also fix some build dependencies.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@427231 13f79535-47bb-0310-9956-ffa450edef68
Doug Cutting il y a 19 ans
Parent
commit
89ada44b74
3 fichiers modifiés avec 21 ajouts et 11 suppressions
  1. 4 0
      CHANGES.txt
  2. 2 2
      build.xml
  3. 15 9
      src/test/org/apache/hadoop/mapred/MiniMRCluster.java

+ 4 - 0
CHANGES.txt

@@ -101,6 +101,10 @@ Trunk (unreleased changes)
     on nodes with the least free space first.
     (Johan Oskarson via cutting)
 
+29. HADOOP-389.  Fix intermittent failures of mapreduce unit tests.
+    Also fix some build dependencies.
+    (Mahadev & Konstantin via cutting)
+
 
 Release 0.4.0 - 2006-06-28
 

+ 2 - 2
build.xml

@@ -253,7 +253,7 @@
   <!-- ================================================================== -->
   <!-- Compile test code                                                  --> 
   <!-- ================================================================== -->
-  <target name="compile-core-test" depends="compile-core, jar">
+  <target name="compile-core-test" depends="compile-examples">
     <javac 
      encoding="${build.encoding}" 
      srcdir="${test.src.dir}"
@@ -278,7 +278,7 @@
   <!-- ================================================================== -->
   <!-- Run unit tests                                                     --> 
   <!-- ================================================================== -->
-  <target name="test-core" depends="compile-core, examples, compile-core-test">
+  <target name="test-core" depends="compile-core-test">
 
     <delete dir="${test.build.data}"/>
     <mkdir dir="${test.build.data}"/>

+ 15 - 9
src/test/org/apache/hadoop/mapred/MiniMRCluster.java

@@ -80,6 +80,8 @@ public class MiniMRCluster {
     class TaskTrackerRunner implements Runnable {
         TaskTracker tt;
         String localDir;
+        boolean isInitialized = false;
+        boolean isDead = false;
         
         /**
          * Create and run the task tracker.
@@ -101,8 +103,10 @@ public class MiniMRCluster {
                 this.localDir = ttDir.getAbsolutePath();
                 jc.set("mapred.local.dir", ttDir.getAbsolutePath());
                 tt = new TaskTracker(jc);
+                isInitialized = true;
                 tt.run();
             } catch (Throwable e) {
+                isDead = true;
                 tt = null;
                 System.err.println("Task tracker crashed:");
                 e.printStackTrace();
@@ -154,10 +158,14 @@ public class MiniMRCluster {
      */
     public void waitUntilIdle() {
       for(Iterator itr= taskTrackerList.iterator(); itr.hasNext(); ) {
-        TaskTracker tracker = ((TaskTrackerRunner) itr.next()).tt;
-        while (!tracker.isIdle()) {
-          System.out.println("Waiting for task tracker " + tracker.getName() +
-                             " to finish.");
+        TaskTrackerRunner runner = (TaskTrackerRunner) itr.next();
+        while (!runner.isDead && (!runner.isInitialized || !runner.tt.isIdle())) {
+          if (!runner.isInitialized) {
+            System.out.println("Waiting for task tracker to start.");
+          } else {
+            System.out.println("Waiting for task tracker " + runner.tt.getName() +
+                               " to be idle.");
+          }
           try {
             Thread.sleep(1000);
           } catch (InterruptedException ie) {}
@@ -206,17 +214,15 @@ public class MiniMRCluster {
         if (taskTrackerFirst) {
           jobTrackerThread.start();
         }
-        try {                                     // let taskTrackers get started
-            Thread.sleep(2000);
-        } catch(InterruptedException e) {
-        }
+        waitUntilIdle();
     }
     
     /**
      * Shut down the servers.
      */
     public void shutdown() {
-        try {
+      try {
+        waitUntilIdle();
         for (int idx = 0; idx < numTaskTrackers; idx++) {
             TaskTrackerRunner taskTracker = (TaskTrackerRunner) taskTrackerList.get(idx);
             Thread taskTrackerThread = (Thread) taskTrackerThreadList.get(idx);