diff --git a/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 b/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 index bb3d7ca1cf3..e450e2a55c6 100644 --- a/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 +++ b/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 @@ -1599,11 +1599,14 @@ private CSAssignment allocateContainerOnSingleNode( } // Do not schedule if there are any reservations to fulfill on the node - if (node.getReservedContainer() != null) { + // node.getReservedContainer() is saved to the reservedContainer variable + // to ensure that a NPE described in YARN-10295 won't occur + reservedContainer = node.getReservedContainer(); + if (reservedContainer != null) { if (LOG.isDebugEnabled()) { LOG.debug("Skipping scheduling since node " + node.getNodeID() - + " is reserved by application " + node.getReservedContainer() - .getContainerId().getApplicationAttemptId()); + + " is reserved by application " + reservedContainer + .getContainerId().getApplicationAttemptId()); } return null; }