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 40f575d1791..71ff8068764 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 @@ -1554,11 +1554,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; }