Author: acmurthy
Date: Mon May  6 14:46:32 2013
New Revision: 1479591

URL: http://svn.apache.org/r1479591
Log:
Merge -c 1479589 from branch-1 to branch-1.2 to fix MAPREDUCE-5206. Ensure that 
a job doesn't get added to RetiredJobs multiple times in JobTracker. 
Contributed by Arun C. Murthy.

Modified:
    hadoop/common/branches/branch-1.2/CHANGES.txt
    
hadoop/common/branches/branch-1.2/src/mapred/org/apache/hadoop/mapred/JobTracker.java

Modified: hadoop/common/branches/branch-1.2/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1.2/CHANGES.txt?rev=1479591&r1=1479590&r2=1479591&view=diff
==============================================================================
--- hadoop/common/branches/branch-1.2/CHANGES.txt (original)
+++ hadoop/common/branches/branch-1.2/CHANGES.txt Mon May  6 14:46:32 2013
@@ -624,6 +624,9 @@ Release 1.2.0 - 2013.05.05
 
     HADOOP-9544. Backport UTF8 encoding fixes.  (Chris Nauroth via szetszwo)
 
+    MAPREDUCE-5206. Ensure that a job doesn't get added to RetiredJobs
+    multiple times in JobTracker. (acmurthy)
+
 Release 1.1.2 - 2013.01.30
 
   INCOMPATIBLE CHANGES

Modified: 
hadoop/common/branches/branch-1.2/src/mapred/org/apache/hadoop/mapred/JobTracker.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1.2/src/mapred/org/apache/hadoop/mapred/JobTracker.java?rev=1479591&r1=1479590&r2=1479591&view=diff
==============================================================================
--- 
hadoop/common/branches/branch-1.2/src/mapred/org/apache/hadoop/mapred/JobTracker.java
 (original)
+++ 
hadoop/common/branches/branch-1.2/src/mapred/org/apache/hadoop/mapred/JobTracker.java
 Mon May  6 14:46:32 2013
@@ -652,15 +652,25 @@ public class JobTracker implements MRCon
               Map.Entry<String, ArrayList<JobInProgress>> entry = 
                 userToJobsMapIt.next();
               ArrayList<JobInProgress> userJobs = entry.getValue();
+
+              // Remove retiredJobs from userToJobsMap to ensure we don't 
+              // retire them multiple times
               Iterator<JobInProgress> it = userJobs.iterator();
-              while (it.hasNext() && 
-                  userJobs.size() > MAX_COMPLETE_USER_JOBS_IN_MEMORY) {
+              while (it.hasNext()) {
                 JobInProgress jobUser = it.next();
                 if (retiredJobs.contains(jobUser)) {
                   LOG.info("Removing from userToJobsMap: " + 
                       jobUser.getJobID());
                   it.remove();
-                } else if (minConditionToRetire(jobUser, now)) {
+                }
+              }
+              
+              // Now, check for #jobs per user
+              it = userJobs.iterator();
+              while (it.hasNext() && 
+                  userJobs.size() > MAX_COMPLETE_USER_JOBS_IN_MEMORY) {
+                JobInProgress jobUser = it.next();
+                if (minConditionToRetire(jobUser, now)) {
                   LOG.info("User limit exceeded. Marking job: " + 
                       jobUser.getJobID() + " for retire.");
                   retiredJobs.add(jobUser);


Reply via email to