You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by om...@apache.org on 2011/03/04 05:23:20 UTC

svn commit: r1077518 - /hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/mapred/TestRetiredJobs.java

Author: omalley
Date: Fri Mar  4 04:23:20 2011
New Revision: 1077518

URL: http://svn.apache.org/viewvc?rev=1077518&view=rev
Log:
commit e6560e33fc9cbbe3af57d8460e5bfec7bbb12268
Author: Iyappan Srinivasan <iy...@yahoo-inc.com>
Date:   Mon Jun 28 09:57:49 2010 +0000

    MAPREDUCE-1730 from https://issues.apache.org/jira/secure/attachment/12447220/TestRetiredJobs-ydist-security-patch.txt

Added:
    hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/mapred/TestRetiredJobs.java

Added: hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/mapred/TestRetiredJobs.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/mapred/TestRetiredJobs.java?rev=1077518&view=auto
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/mapred/TestRetiredJobs.java (added)
+++ hadoop/common/branches/branch-0.20-security-patches/src/test/system/java/org/apache/hadoop/mapred/TestRetiredJobs.java Fri Mar  4 04:23:20 2011
@@ -0,0 +1,166 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.mapred;
+
+import java.util.Collection;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
+import org.apache.hadoop.mapreduce.test.system.JTProtocol;
+import org.apache.hadoop.mapreduce.test.system.TTClient;
+import org.apache.hadoop.mapreduce.test.system.JobInfo;
+import org.apache.hadoop.mapreduce.test.system.TaskInfo;
+import org.apache.hadoop.mapreduce.test.system.MRCluster;
+
+import org.apache.hadoop.mapreduce.test.system.FinishTaskControlAction;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.examples.SleepJob;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.AfterClass;
+import org.junit.Test;
+
+/**
+ * This tests when successful and failed jobs are retired,
+ * their jobInProgress object are removed properly. 
+ */
+
+public class TestRetiredJobs {
+
+  private static MRCluster cluster = null;
+  private static JobClient jobClient = null;
+
+  static final Log LOG = LogFactory.getLog(TestRetiredJobs.class);
+
+  public TestRetiredJobs() throws Exception {
+  }
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    cluster = MRCluster.createCluster(new Configuration());
+    cluster.setUp();
+    jobClient = cluster.getJTClient().getClient();
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    cluster.tearDown();
+  }
+
+  @Test
+  /**
+   * This tests when successful and failed jobs are retired, 
+   * their jobInProgress object are removed properly.
+   * This is verified by checking whether getJobInfo
+   * method returns a JobInfo object when running,
+   * and whether getJobInfo method returns null
+   * after job is retired. 
+   * @param none
+   * @return void
+   */
+  public void testRetiredJobsSuccessful() throws Exception {
+    Configuration conf = new Configuration(cluster.getConf());
+    conf.setBoolean("mapreduce.job.complete.cancel.delegation.tokens", false);
+    JTProtocol remoteJTClient = cluster.getJTClient().getProxy();
+    int testLoopCount = 0;
+
+    //First run a successful job and verify if JobInProgress
+    //object is removed by checking the getJobInfo. In the
+    //second iteration, verify if a killed job JobInProgress
+    //is removed.
+    do {
+      testLoopCount++;
+      SleepJob job = new SleepJob();
+      job.setConf(conf);
+      conf = job.setupJobConf(5, 1, 100, 100, 100, 100);
+      JobConf jconf = new JobConf(conf);
+      //Controls the job till all verification is done 
+      FinishTaskControlAction.configureControlActionForJob(conf);
+      //Submitting the job
+      RunningJob rJob = cluster.getJTClient().getClient().submitJob(jconf);
+
+      JobID jobID = rJob.getID();
+
+      JobInfo jInfo = remoteJTClient.getJobInfo(jobID);
+      LOG.info("jInfo is :" + jInfo);
+
+      boolean jobStarted = cluster.getJTClient().isJobStarted(jobID);
+
+      Assert.assertTrue("Job has not started even after a minute", 
+          jobStarted );
+
+      LOG.info("job id is :" + jobID.toString());
+
+      TaskInfo[] taskInfos = cluster.getJTClient().getProxy()
+          .getTaskInfo(jobID);
+
+      // getJobInfo method should
+      // return a JobInProgress object when running,
+      JobInfo jobInfo = cluster.getJTClient().getProxy()
+          .getJobInfo(jobID);
+
+      Assert.assertNotNull("The Job information is not present ", jobInfo); 
+
+      //Allow the job to continue through MR control job.
+      for (TaskInfo taskInfoRemaining : taskInfos) {
+        FinishTaskControlAction action = new FinishTaskControlAction(TaskID
+            .downgrade(taskInfoRemaining.getTaskID()));
+        Collection<TTClient> tts = cluster.getTTClients();
+        for (TTClient cli : tts) {
+          cli.getProxy().sendAction(action);
+        }
+      }
+
+      //Killing this job will happen only in the second iteration.
+      if (testLoopCount == 2) {
+        //Killing the job because all the verification needed
+        //for this testcase is completed.
+        rJob.killJob();
+      }
+
+      //Making sure that the job is complete.
+      int count = 0;
+      while (jInfo != null && !jInfo.getStatus().isJobComplete()) {
+        Thread.sleep(10000);
+        count++;
+        jInfo = remoteJTClient.getJobInfo(rJob.getID());
+        //If the count goes more than 100 seconds, then fail; This is to
+        //avoid infinite loop
+        if (count > 10) {
+          Assert.fail("Since the job has not completed even after" +
+              " 100 seconds, failing at this point");
+        }
+      }
+
+      Thread.sleep(50000);
+
+      jobInfo = null; 
+      // getJobInfo method should return null
+      // after job is retired. JobInProgress
+      // object should not be present.
+      jobInfo = cluster.getJTClient().getProxy()
+          .getJobInfo(jobID);
+
+      Assert.assertNull("Job information is still available " + 
+          "after retirement of job ", jobInfo);
+
+    } while (testLoopCount < 2);
+  }
+}