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/fair/FSAppAttempt.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java index 3778cba..c8e3e2a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java @@ -458,8 +458,9 @@ public Container createContainer( * the container is {@code alreadyReserved} on the node, simply * update relevant bookeeping. This dispatches ro relevant handlers * in {@link FSSchedulerNode}.. + * return whether do reservation respect to limitation */ - private void reserve(Priority priority, FSSchedulerNode node, + private boolean reserve(Priority priority, FSSchedulerNode node, Container container, NodeType type, boolean alreadyReserved) { if (!reservationExceedsThreshold(node, type)) { @@ -477,7 +478,9 @@ private void reserve(Priority priority, FSSchedulerNode node, node.reserveResource(this, priority, rmContainer); setReservation(node); } + return true; } + return false; } private boolean reservationExceedsThreshold(FSSchedulerNode node, @@ -627,10 +630,9 @@ private Resource assignContainer( return container.getResource(); } - if (isReservable(container)) { + if (isReservable(container) && + reserve(request.getPriority(), node, container, type, reserved)) { // The desired container won't fit here, so reserve - reserve(request.getPriority(), node, container, type, reserved); - return FairScheduler.CONTAINER_RESERVED; } else { if (LOG.isDebugEnabled()) {