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:00:16 UTC

svn commit: r1077290 - /hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestWebUIAuthorization.java

Author: omalley
Date: Fri Mar  4 04:00:16 2011
New Revision: 1077290

URL: http://svn.apache.org/viewvc?rev=1077290&view=rev
Log:
commit c94928b9495350d63c526933650a977d1af3c723
Author: Vinod Kumar <vi...@yahoo-inc.com>
Date:   Fri Mar 5 15:09:01 2010 +0530

    MAPREDUCE-1455 test related bug fix from https://issues.apache.org/jira/secure/attachment/12437983/1455.20S.2.fix1.patch

Modified:
    hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestWebUIAuthorization.java

Modified: hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestWebUIAuthorization.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestWebUIAuthorization.java?rev=1077290&r1=1077289&r2=1077290&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestWebUIAuthorization.java (original)
+++ hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestWebUIAuthorization.java Fri Mar  4 04:00:16 2011
@@ -161,8 +161,8 @@ public class TestWebUIAuthorization exte
   }
 
   // starts a sleep job with 1 map task that runs for a long time
-  private RunningJob startSleepJobAsUser(String user, final JobConf conf)
-      throws Exception {
+  private RunningJob startSleepJobAsUser(String user, final JobConf conf,
+      MiniMRCluster cluster) throws Exception {
 	final SleepJob sleepJob = new SleepJob();
     sleepJob.setConf(conf);
     UserGroupInformation jobSubmitterUGI = 
@@ -179,6 +179,9 @@ public class TestWebUIAuthorization exte
           return runningJob;
         }
       });
+    JobID jobId = job.getID();
+    getTIPId(cluster, jobId);//wait till the map task starts running
+
     return job;
   }
 
@@ -200,6 +203,17 @@ public class TestWebUIAuthorization exte
       tipId = r.getTaskID();
       break;// because we have only one map
     }
+
+    JobTracker jt = cluster.getJobTrackerRunner().getJobTracker();
+    // wait till we see an attempt actually running
+    while (jt.getTaskStatuses(tipId).length == 0) {
+      try {
+        Thread.sleep(100);
+      } catch(InterruptedException e) {
+        LOG.warn("Interrupted while waiting for map attempt to be started");
+      }
+    }
+
     return tipId;
   }
 
@@ -215,15 +229,17 @@ public class TestWebUIAuthorization exte
   private void confirmJobDetailsJSPKillJobAsUser(MiniMRCluster cluster,
       JobConf conf, String jtURL, String jobTrackerJSP, String user)
       throws Exception {
-    RunningJob job = startSleepJobAsUser(jobSubmitter, conf);
+    RunningJob job = startSleepJobAsUser(jobSubmitter, conf, cluster);
     org.apache.hadoop.mapreduce.JobID jobid = job.getID();
-    getTIPId(cluster, jobid);// wait till the map task is started
     // jobDetailsJSP killJob url
     String url = jtURL + "/jobdetails.jsp?" +
         "action=kill&jobid="+ jobid.toString();
     try {
       assertEquals(HttpURLConnection.HTTP_OK,
           getHttpStatusCode(url, user, "POST"));
+      waitForKillJobToFinish(job);
+      assertTrue("killJob failed for a job for which user has "
+          + "job-modify permission", job.isComplete());
     } finally {
       if (!job.isComplete()) {
         LOG.info("Killing job " + jobid + " from finally block");
@@ -246,8 +262,6 @@ public class TestWebUIAuthorization exte
         String.valueOf(true));
     props.setProperty("dfs.permissions", "false");
 
-    props.setProperty("mapreduce.job.committer.setup.cleanup.needed",
-        "false");
     props.setProperty(JobConf.MR_SUPERGROUP, "superGroup");
 
     MyGroupsProvider.mapping.put(jobSubmitter, Arrays.asList("group1"));
@@ -395,9 +409,8 @@ public class TestWebUIAuthorization exte
     conf.set(JobContext.JOB_ACL_MODIFY_JOB, " group1,group3");
 
     String jobTrackerJSP =  jtURL + "/jobtracker.jsp?a=b";
-    RunningJob job = startSleepJobAsUser(jobSubmitter, conf);
+    RunningJob job = startSleepJobAsUser(jobSubmitter, conf, cluster);
     org.apache.hadoop.mapreduce.JobID jobid = job.getID();
-    getTIPId(cluster, jobid);// wait till the map task is started
     // jobDetailsJSPKillJobAction url
     String url = jtURL + "/jobdetails.jsp?" +
         "action=kill&jobid="+ jobid.toString();
@@ -410,6 +423,9 @@ public class TestWebUIAuthorization exte
           getHttpStatusCode(url, modifyColleague, "POST"));
       assertEquals(HttpURLConnection.HTTP_OK,
           getHttpStatusCode(url, viewAndModifyColleague, "POST"));
+      waitForKillJobToFinish(job);
+      assertTrue("killJob failed for a job for which user has "
+          + "job-modify permission", job.isComplete());
     } finally {
       if (!job.isComplete()) {
         LOG.info("Killing job " + jobid + " from finally block");
@@ -441,15 +457,17 @@ public class TestWebUIAuthorization exte
       JobConf conf, String jtURL, String user)
       throws Exception {
     String jobTrackerJSP =  jtURL + "/jobtracker.jsp?a=b";
-    RunningJob job = startSleepJobAsUser(jobSubmitter, conf);
+    RunningJob job = startSleepJobAsUser(jobSubmitter, conf, cluster);
     org.apache.hadoop.mapreduce.JobID jobid = job.getID();
-    getTIPId(cluster, jobid);// wait till the map task is started
     // jobTrackerJSP killJob url
     String url = jobTrackerJSP +
         "&killJobs=true&jobCheckBox=" + jobid.toString();
     try {
       assertEquals(HttpURLConnection.HTTP_OK,
           getHttpStatusCode(url, user, "POST"));
+      waitForKillJobToFinish(job);
+      assertTrue("killJob failed for a job for which user has "
+          + "job-modify permission", job.isComplete());
     } finally {
       if (!job.isComplete()) {
         LOG.info("Killing job " + jobid + " from finally block");
@@ -461,14 +479,14 @@ public class TestWebUIAuthorization exte
   }
 
   /**
-   * Waits for a while for the job to become completed
+   * Waits for the job to become completed as we know that killJob is called
    * @param job
    * @throws IOException
    */
   void waitForKillJobToFinish(RunningJob job) throws IOException {
-    for (int i = 0;!job.isComplete() && i < 20;i++) {
+    while (!job.isComplete()) {
       try {
-        Thread.sleep(1000);
+        Thread.sleep(200);
       } catch (InterruptedException e){
         LOG.warn("Interrupted while waiting for killJob() to finish for "
                  + job.getID());
@@ -493,7 +511,7 @@ public class TestWebUIAuthorization exte
     // view-job-acl doesn't matter for killJob from jobtracker jsp page
     conf.set(JobContext.JOB_ACL_VIEW_JOB, "");
     
-    // Let us start jobs as 4 different users(none of these 4 users is
+    // Let us start 4 jobs as 4 different users(none of these 4 users is
     // mrOwner and none of these users is a member of superGroup). So only
     // based on the config JobContext.JOB_ACL_MODIFY_JOB being set here,
     // killJob on each of the jobs will be succeeded.
@@ -501,29 +519,29 @@ public class TestWebUIAuthorization exte
     // start 1st job.
     // Out of these 4 users, only jobSubmitter can do killJob on 1st job
     conf.set(JobContext.JOB_ACL_MODIFY_JOB, "");
-    RunningJob job1 = startSleepJobAsUser(jobSubmitter, conf);
+    RunningJob job1 = startSleepJobAsUser(jobSubmitter, conf, cluster);
     org.apache.hadoop.mapreduce.JobID jobid = job1.getID();
-    getTIPId(cluster, jobid);// wait till the map task is started
     url = url.concat("&jobCheckBox=" + jobid.toString());
+
     // start 2nd job.
     // Out of these 4 users, only viewColleague can do killJob on 2nd job
-    RunningJob job2 = startSleepJobAsUser(viewColleague, conf);
+    RunningJob job2 = startSleepJobAsUser(viewColleague, conf, cluster);
     jobid = job2.getID();
-    getTIPId(cluster, jobid);// wait till the map task is started
     url = url.concat("&jobCheckBox=" + jobid.toString());
+
     // start 3rd job.
     // Out of these 4 users, only modifyColleague can do killJob on 3rd job
-    RunningJob job3 = startSleepJobAsUser(modifyColleague, conf);
+    RunningJob job3 = startSleepJobAsUser(modifyColleague, conf, cluster);
     jobid = job3.getID();
-    getTIPId(cluster, jobid);// wait till the map task is started
     url = url.concat("&jobCheckBox=" + jobid.toString());
+
     // start 4rd job.
     // Out of these 4 users, viewColleague and viewAndModifyColleague
     // can do killJob on 4th job
     conf.set(JobContext.JOB_ACL_MODIFY_JOB, viewColleague);
-    RunningJob job4 = startSleepJobAsUser(viewAndModifyColleague, conf);
+    RunningJob job4 = startSleepJobAsUser(viewAndModifyColleague,
+                                          conf, cluster);
     jobid = job4.getID();
-    getTIPId(cluster, jobid);// wait till the map task is started
     url = url.concat("&jobCheckBox=" + jobid.toString());
 
     try {
@@ -568,9 +586,10 @@ public class TestWebUIAuthorization exte
     props.setProperty(
        JobConf.JOB_LEVEL_AUTHORIZATION_ENABLING_FLAG, String.valueOf(true));
     props.setProperty("dfs.permissions", "false");
-    
+    // let us have enough map slots so that there won't be waiting for slots
+    props.setProperty("mapred.tasktracker.map.tasks.maximum", "6");
+
     props.setProperty(JSPUtil.PRIVATE_ACTIONS_KEY, "true");
-    props.setProperty("mapreduce.job.committer.setup.cleanup.needed", "false");
     props.setProperty(JobConf.MR_SUPERGROUP, "superGroup");
 
     MyGroupsProvider.mapping.put(jobSubmitter, Arrays.asList("group1"));
@@ -596,8 +615,7 @@ public class TestWebUIAuthorization exte
     // viewAndModifyColleague will be able to modify the job
     conf.set(JobContext.JOB_ACL_MODIFY_JOB, " group1,group3");
 
-    RunningJob job = startSleepJobAsUser(jobSubmitter, conf);
-
+    RunningJob job = startSleepJobAsUser(jobSubmitter, conf, cluster);
     org.apache.hadoop.mapreduce.JobID jobid = job.getID();
 
     String jtURL = "http://localhost:" + infoPort;
@@ -619,7 +637,7 @@ public class TestWebUIAuthorization exte
       TaskID tipId = getTIPId(cluster, jobid);
       validateTaskStatsJSPAccess(jobid, jtURL, tipId);
       validateTaskDetailsJSPAccess(jobid, jtURL, tipId);
-      validateJobTrackerJSPKillJobAction(jobid, jtURL);
+      validateJobTrackerJSPKillJobAction(job, jtURL);
     } finally {
       if (!job.isComplete()) { // kill the job(as jobSubmitter) if needed
         LOG.info("Killing job " + jobid + " from finally block");
@@ -648,13 +666,16 @@ public class TestWebUIAuthorization exte
   }
 
   // validate killJob of jobtracker.jsp
-  private void validateJobTrackerJSPKillJobAction(
-      org.apache.hadoop.mapreduce.JobID jobid, String jtURL)
+  private void validateJobTrackerJSPKillJobAction(RunningJob job, String jtURL)
       throws IOException {
+    org.apache.hadoop.mapreduce.JobID jobid = job.getID();
     String jobTrackerJSP =  jtURL + "/jobtracker.jsp?a=b";
     String jobTrackerJSPKillJobAction = jobTrackerJSP +
         "&killJobs=true&jobCheckBox="+ jobid.toString();
     validateModifyJob(jobTrackerJSPKillJobAction, "GET");
+    waitForKillJobToFinish(job);
+    assertTrue("killJob failed for a job for which user has "
+        + "job-modify permission", job.isComplete());
   }
 
   // validate viewing of job of taskdetails.jsp