Преглед на файлове

MAPREDUCE-5206. Ensure that a job doesn't get added to RetiredJobs multiple times in JobTracker. Contributed by Arun C. Murthy.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1@1479589 13f79535-47bb-0310-9956-ffa450edef68
Arun Murthy преди 12 години
родител
ревизия
24d1a2340d
променени са 2 файла, в които са добавени 16 реда и са изтрити 3 реда
  1. 3 0
      CHANGES.txt
  2. 13 3
      src/mapred/org/apache/hadoop/mapred/JobTracker.java

+ 3 - 0
CHANGES.txt

@@ -667,6 +667,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

+ 13 - 3
src/mapred/org/apache/hadoop/mapred/JobTracker.java

@@ -652,15 +652,25 @@ public class JobTracker implements MRConstants, InterTrackerProtocol,
               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);