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/FSPreemptionThread.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/FSPreemptionThread.java index 6ed90f816a5..000eb0fea11 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/FSPreemptionThread.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/FSPreemptionThread.java @@ -122,12 +122,14 @@ public void run() { // Don't preempt AM containers just to satisfy local requests if relax // locality is enabled. - if (bestContainers != null - && bestContainers.numAMContainers > 0 - && !ResourceRequest.isAnyLocation(rr.getResourceName()) - && rr.getRelaxLocality()) { + if (rr.getRelaxLocality() + && !ResourceRequest.isAnyLocation(rr.getResourceName()) + && bestContainers != null && bestContainers.numAMContainers > 0) { + List nodesToCheck = + scheduler.getNodeTracker().getAllNodes(); + nodesToCheck.removeAll(potentialNodes); bestContainers = identifyContainersToPreemptForOneContainer( - scheduler.getNodeTracker().getAllNodes(), rr); + nodesToCheck, rr); } if (bestContainers != null) {