Przeglądaj źródła

Merge -r 755985:755986 from trunk to branch 0.20 to fix HADOOP-5534.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.20@755988 13f79535-47bb-0310-9956-ffa450edef68
Hemanth Yamijala 16 lat temu
rodzic
commit
cad6369e7b

+ 3 - 0
CHANGES.txt

@@ -770,6 +770,9 @@ Release 0.20.0 - Unreleased
     HADOOP-5471. Fixes a problem to do with updating the log.index file in the 
     case where a cleanup task is run. (Amareshwari Sriramadasu via ddas)
 
+    HADOOP-5534. Fixed a deadlock in Fair scheduler's servlet.
+    (Rahul Kumar Singh via yhemanth)
+
 Release 0.19.2 - Unreleased
 
   BUG FIXES

+ 21 - 20
src/contrib/fairscheduler/src/java/org/apache/hadoop/mapred/FairSchedulerServlet.java

@@ -87,35 +87,36 @@ public class FairSchedulerServlet extends HttpServlet {
     }
     if (request.getParameter("setPool") != null) {
       Collection<JobInProgress> runningJobs = jobTracker.getRunningJobs();
+      PoolManager poolMgr = null;
       synchronized (scheduler) {
-        PoolManager poolMgr = scheduler.getPoolManager();
-        String pool = request.getParameter("setPool");
-        String jobId = request.getParameter("jobid");
-        for (JobInProgress job: runningJobs) {
-          if (job.getProfile().getJobID().toString().equals(jobId)) {
+        poolMgr = scheduler.getPoolManager();
+      }
+      String pool = request.getParameter("setPool");
+      String jobId = request.getParameter("jobid");
+      for (JobInProgress job: runningJobs) {
+        if (job.getProfile().getJobID().toString().equals(jobId)) {
+          synchronized(scheduler){
             poolMgr.setPool(job, pool);
-            scheduler.update();
-            break;
           }
+          scheduler.update();
+          break;
         }
-      }
+      }      
       response.sendRedirect("/scheduler" + (advancedView ? "?advanced" : ""));
       return;
     }
     if (request.getParameter("setPriority") != null) {
-      Collection<JobInProgress> runningJobs = jobTracker.getRunningJobs();
-      synchronized (scheduler) {
-        JobPriority priority = JobPriority.valueOf(request.getParameter(
-            "setPriority"));
-        String jobId = request.getParameter("jobid");
-        for (JobInProgress job: runningJobs) {
-          if (job.getProfile().getJobID().toString().equals(jobId)) {
-            job.setPriority(priority);
-            scheduler.update();
-            break;
-          }
+      Collection<JobInProgress> runningJobs = jobTracker.getRunningJobs();      
+      JobPriority priority = JobPriority.valueOf(request.getParameter(
+          "setPriority"));
+      String jobId = request.getParameter("jobid");
+      for (JobInProgress job: runningJobs) {
+        if (job.getProfile().getJobID().toString().equals(jobId)) {
+          job.setPriority(priority);
+          scheduler.update();
+          break;
         }
-      }
+      }      
       response.sendRedirect("/scheduler" + (advancedView ? "?advanced" : ""));
       return;
     }