Browse Source

YARN-1243. ResourceManager: Error in handling event type NODE_UPDATE to the scheduler - NPE at SchedulerApp.java:411 (Jason Lowe via jeagles)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1526670 13f79535-47bb-0310-9956-ffa450edef68
Jonathan Turner Eagles 11 years ago
parent
commit
579009ae30

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

@@ -40,6 +40,9 @@ Release 0.23.10 - UNRELEASED
     YARN-1176. RM web services ClusterMetricsInfo total nodes doesn't include
     unhealthy nodes (Jonathan Eagles via tgraves)
 
+    YARN-1243. ResourceManager: Error in handling event type NODE_UPDATE to the
+    scheduler - NPE at SchedulerApp.java:411 (Jason Lowe via jeagles)
+
 Release 0.23.9 - 2013-07-08
 
   INCOMPATIBLE CHANGES

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

@@ -28,6 +28,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.classification.InterfaceAudience.Private;
 import org.apache.hadoop.classification.InterfaceStability.Stable;
+import org.apache.hadoop.yarn.YarnException;
 import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
 import org.apache.hadoop.yarn.api.records.ApplicationId;
 import org.apache.hadoop.yarn.api.records.Container;
@@ -405,6 +406,16 @@ public class SchedulerApp {
       this.reservedContainers.remove(priority);
     }
     
+    // reservedContainer should not be null here
+    if (reservedContainer == null) {
+      String errorMesssage =
+          "Application " + getApplicationId() + " is trying to unreserve "
+              + " on node " + node + ", currently has "
+              + reservedContainers.size() + " at priority " + priority
+              + "; currentReservation " + currentReservation;
+      LOG.warn(errorMesssage);
+      throw new YarnException(errorMesssage);
+    }
     // Reset the re-reservation count
     resetReReservations(priority);
 

+ 4 - 3
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java

@@ -785,9 +785,10 @@ public class LeafQueue implements CSQueue {
     if (reservedContainer != null) {
       SchedulerApp application = 
           getApplication(reservedContainer.getApplicationAttemptId());
-      return 
-          assignReservedContainer(application, node, reservedContainer, 
-              clusterResource); 
+      synchronized (application) {
+        return assignReservedContainer(application, node, reservedContainer,
+          clusterResource);
+      }
     }
     
     // Try to assign containers to applications in order