This is an automated email from the ASF dual-hosted git repository. taoyang pushed a commit to branch branch-3.4 in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.4 by this push: new 0fc27df8511 YARN-11732. Fix potential NPE when calling SchedulerNode#reservedContainer for CapacityScheduler (#7065). Contributed by Tao Yang. 0fc27df8511 is described below commit 0fc27df85111a545aa20f5a2803fce2812de9b0a Author: Tao Yang <taoy...@apache.org> AuthorDate: Wed Oct 16 21:11:31 2024 +0800 YARN-11732. Fix potential NPE when calling SchedulerNode#reservedContainer for CapacityScheduler (#7065). Contributed by Tao Yang. Reviewed-by: Syed Shameerur Rahman <syedthame...@gmail.com> Signed-off-by: He Xiaoqiao <hexiaoq...@apache.org> --- .../monitor/capacity/ReservedContainerCandidatesSelector.java | 3 +++ .../server/resourcemanager/scheduler/AbstractYarnScheduler.java | 5 ++--- .../scheduler/capacity/allocator/RegularContainerAllocator.java | 5 +++-- .../resourcemanager/scheduler/common/fica/FiCaSchedulerApp.java | 8 ++++---- 4 files changed, 12 insertions(+), 9 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/monitor/capacity/ReservedContainerCandidatesSelector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/ReservedContainerCandidatesSelector.java index 1aafbdc73f7..5a3bcff4870 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/ReservedContainerCandidatesSelector.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/ReservedContainerCandidatesSelector.java @@ -170,6 +170,9 @@ public class ReservedContainerCandidatesSelector Map<ApplicationAttemptId, Set<RMContainer>> selectedCandidates, Resource totalPreemptionAllowed, boolean readOnly) { RMContainer reservedContainer = node.getReservedContainer(); + if (reservedContainer == null) { + return null; + } Resource available = Resources.clone(node.getUnallocatedResource()); Resource totalSelected = Resources.createResource(0); List<RMContainer> sortedRunningContainers = 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/AbstractYarnScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java index 4ccc30ce39f..587b91e6883 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java @@ -757,10 +757,9 @@ public abstract class AbstractYarnScheduler RMContainer rmContainer, ContainerStatus containerStatus, RMContainerEventType event) { N schedulerNode = getSchedulerNode(rmContainer.getNodeId()); - if (schedulerNode != null && - schedulerNode.getReservedContainer() != null) { + if (schedulerNode != null) { RMContainer resContainer = schedulerNode.getReservedContainer(); - if (resContainer.getReservedSchedulerKey() != null) { + if (resContainer != null && resContainer.getReservedSchedulerKey() != null) { ContainerId containerToUpdate = resContainer .getReservedSchedulerKey().getContainerToUpdate(); if (containerToUpdate != null && 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/allocator/RegularContainerAllocator.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/allocator/RegularContainerAllocator.java index f211b65b34f..032005c57a7 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/allocator/RegularContainerAllocator.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/allocator/RegularContainerAllocator.java @@ -858,12 +858,13 @@ public class RegularContainerAllocator extends AbstractContainerAllocator { FiCaSchedulerNode node = iter.next(); // Do not schedule if there are any reservations to fulfill on the node + RMContainer nodeReservedContainer = node.getReservedContainer(); if (iter.hasNext() && - node.getReservedContainer() != null && + nodeReservedContainer != null && isSkipAllocateOnNodesWithReservedContainer()) { LOG.debug("Skipping scheduling on node {} since it has already been" + " reserved by {}", node.getNodeID(), - node.getReservedContainer().getContainerId()); + nodeReservedContainer.getContainerId()); ActivitiesLogger.APP.recordSkippedAppActivityWithoutAllocation( activitiesManager, node, application, schedulerKey, ActivityDiagnosticConstant.NODE_HAS_BEEN_RESERVED, ActivityLevel.NODE); 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/common/fica/FiCaSchedulerApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerApp.java index 3a0fd347e5a..6f4ae921248 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerApp.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerApp.java @@ -520,13 +520,13 @@ public class FiCaSchedulerApp extends SchedulerApplicationAttempt { // When reserve a resource (state == NEW is for new container, // state == RUNNING is for increase container). // Just check if the node is not already reserved by someone - if (schedulerContainer.getSchedulerNode().getReservedContainer() - != null) { + RMContainer reservedContainer = + schedulerContainer.getSchedulerNode().getReservedContainer(); + if (reservedContainer != null) { if (LOG.isDebugEnabled()) { LOG.debug("Try to reserve a container, but the node is " + "already reserved by another container=" - + schedulerContainer.getSchedulerNode() - .getReservedContainer().getContainerId()); + + reservedContainer.getContainerId()); } return false; } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org