Bläddra i källkod

MAPREDUCE-4798. Updated TestJobHistoryServer test case for startup
race conditions. (Sam Liu via eyang)


git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0@1416089 13f79535-47bb-0310-9956-ffa450edef68

Eric Yang 12 år sedan
förälder
incheckning
3e6592363d
2 ändrade filer med 34 tillägg och 1 borttagningar
  1. 11 0
      CHANGES.txt
  2. 23 1
      src/test/org/apache/hadoop/mapred/TestJobHistoryServer.java

+ 11 - 0
CHANGES.txt

@@ -1,5 +1,16 @@
 Hadoop Change Log
 
+Release 1.0.5 - unreleased
+
+  NEW FEATURES
+
+  IMPROVEMENTS
+
+  BUG FIXES
+
+    MAPREDUCE-4798. Updated TestJobHistoryServer test case for startup
+    race conditions.  (Sam Liu via eyang)
+
 Release 1.0.4 - 2012.10.02
 
   NEW FEATURES

+ 23 - 1
src/test/org/apache/hadoop/mapred/TestJobHistoryServer.java

@@ -72,6 +72,9 @@ public class TestJobHistoryServer extends TestCase {
     } catch (IOException e) {
       LOG.error("Failure running test", e);
       Assert.fail(e.getMessage());
+    } catch (InterruptedException e) {
+      LOG.error("Exit due to being interrupted");
+      Assert.fail(e.getMessage());
     } finally {
       if (mrCluster != null) mrCluster.shutdown();
     }
@@ -111,6 +114,9 @@ public class TestJobHistoryServer extends TestCase {
     } catch (IOException e) {
       LOG.error("Failure running test", e);
       Assert.fail(e.getMessage());
+    } catch (InterruptedException e) {
+      LOG.error("Exit due to being interrupted");
+      Assert.fail(e.getMessage());
     } finally {
       if (mrCluster != null) mrCluster.shutdown();
       try {
@@ -150,12 +156,28 @@ public class TestJobHistoryServer extends TestCase {
     return JobClient.runJob(conf);
   }
 
-  private String getRedirectUrl(String jobUrl) throws IOException {
+  private String getRedirectUrl(String jobUrl) throws IOException, InterruptedException {
     HttpClient client = new HttpClient();
     GetMethod method = new GetMethod(jobUrl);
     method.setFollowRedirects(false);
     try {
       int status = client.executeMethod(method);
+      if(status!=HttpURLConnection.HTTP_MOVED_TEMP) {
+        int retryTimes = 4;
+        for(int i = 1; i < retryTimes + 1; i++) {
+          try {
+            // Wait i sec
+            Thread.sleep(i * 1000);
+          } catch (InterruptedException e) {
+            throw new InterruptedException("Exit due to being interrupted");
+          }
+          // Get the latest status
+          status = client.executeMethod(method);
+          if(status == HttpURLConnection.HTTP_MOVED_TEMP)
+            break;
+        }
+      }
+
       Assert.assertEquals(status, HttpURLConnection.HTTP_MOVED_TEMP);
 
       LOG.info("Location: " + method.getResponseHeader("Location"));