Bladeren bron

YARN-460. CS user left in list of active users for the queue even when application finished (tgraves)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1462497 13f79535-47bb-0310-9956-ffa450edef68
Thomas Graves 12 jaren geleden
bovenliggende
commit
a263542be9

+ 3 - 0
hadoop-yarn-project/CHANGES.txt

@@ -84,6 +84,9 @@ Release 0.23.7 - UNRELEASED
     YARN-109. .tmp file is not deleted for localized archives (Mayank Bansal 
     via bobby)
 
+    YARN-460. CS user left in list of active users for the queue even when
+    application finished (tgraves)
+
 Release 0.23.6 - 2013-02-06
 
   INCOMPATIBLE CHANGES

+ 14 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApp.java

@@ -82,6 +82,8 @@ public class SchedulerApp {
   = new HashMap<ContainerId, RMContainer>();
   private List<RMContainer> newlyAllocatedContainers = 
       new ArrayList<RMContainer>();
+  
+  private boolean isStopped = false;
 
   final Map<Priority, Map<NodeId, RMContainer>> reservedContainers = 
       new HashMap<Priority, Map<NodeId, RMContainer>>();
@@ -125,7 +127,9 @@ public class SchedulerApp {
 
   public synchronized void updateResourceRequests(
       List<ResourceRequest> requests) {
-    this.appSchedulingInfo.updateResourceRequests(requests);
+    if (!isStopped) {
+      this.appSchedulingInfo.updateResourceRequests(requests);
+    }
   }
 
   public Map<String, ResourceRequest> getResourceRequests(Priority priority) {
@@ -159,6 +163,10 @@ public class SchedulerApp {
   public boolean isPending() {
     return this.appSchedulingInfo.isPending();
   }
+  
+  public synchronized boolean isStopped() {
+    return this.isStopped;
+  }
 
   public String getQueueName() {
     return this.appSchedulingInfo.getQueueName();
@@ -174,6 +182,7 @@ public class SchedulerApp {
 
   public synchronized void stop(RMAppAttemptState rmAppAttemptFinalState) {
     // Cleanup all scheduling information
+    this.isStopped = true;
     this.appSchedulingInfo.stop(rmAppAttemptFinalState);
   }
 
@@ -226,6 +235,10 @@ public class SchedulerApp {
       Priority priority, ResourceRequest request, 
       Container container) {
     
+    if (isStopped) {
+      return null;
+    }
+    
     // Required sanity check - AM can call 'allocate' to update resource 
     // request without locking the scheduler, hence we need to check
     if (getTotalRequiredResources(priority) <= 0) {

+ 8 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java

@@ -481,6 +481,14 @@ implements ResourceScheduler, CapacitySchedulerContext, Configurable {
     }
 
     synchronized (application) {
+      
+      // make sure we aren't stopping/removing the application
+      // when the allocate comes in
+      if (application.isStopped()) {
+        LOG.info("Calling allocate on a stopped " +
+            "application " + applicationAttemptId);
+        return EMPTY_ALLOCATION;
+      }
 
       if (!ask.isEmpty()) {
 

+ 9 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java

@@ -245,6 +245,15 @@ public class FifoScheduler implements ResourceScheduler, Configurable {
     }
 
     synchronized (application) {
+
+      // make sure we aren't stopping/removing the application
+      // when the allocate comes in
+      if (application.isStopped()) {
+        LOG.info("Calling allocate on a stopped " +
+            "application " + applicationAttemptId);
+        return EMPTY_ALLOCATION;
+      }
+
       if (!ask.isEmpty()) {
         LOG.debug("allocate: pre-update" +
             " applicationId=" + applicationAttemptId +