From 59b20a1ebf591b790c01781acaa5f731f2b7b1bd Mon Sep 17 00:00:00 2001 From: Szilard Nemeth Date: Wed, 10 Jun 2020 18:15:08 +0200 Subject: [PATCH] YARN-10295. CapacityScheduler NPE can cause apps to get stuck without resources. Contributed by Benjamin Teke --- .../scheduler/capacity/CapacityScheduler.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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; }