YARN-6681. Eliminate double-copy of child queues in canAssignToThisQueue. Contributed by Daryn Sharp.

This commit is contained in:
Naganarasimha 2017-07-01 12:58:36 +05:30
parent 8027246306
commit 69480ba686
2 changed files with 13 additions and 2 deletions

View File

@ -22,6 +22,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -455,6 +456,11 @@ public abstract class AbstractCSQueue implements CSQueue {
minimumAllocation);
}
public boolean hasChildQueues() {
List<CSQueue> childQueues = getChildQueues();
return childQueues != null && !childQueues.isEmpty();
}
synchronized boolean canAssignToThisQueue(Resource clusterResource,
String nodePartition, ResourceLimits currentResourceLimits,
Resource resourceCouldBeUnreserved, SchedulingMode schedulingMode) {
@ -479,7 +485,7 @@ public abstract class AbstractCSQueue implements CSQueue {
// When queue is a parent queue: Headroom = limit - used + killable
// When queue is a leaf queue: Headroom = limit - used (leaf queue cannot preempt itself)
Resource usedExceptKillable = nowTotalUsed;
if (null != getChildQueues() && !getChildQueues().isEmpty()) {
if (hasChildQueues()) {
usedExceptKillable = Resources.subtract(nowTotalUsed,
getTotalKillableResource(nodePartition));
}

View File

@ -774,7 +774,12 @@ public class ParentQueue extends AbstractCSQueue {
CSQueueUtils.updateQueueStatistics(resourceCalculator, clusterResource,
minimumAllocation, this, labelManager, null);
}
@Override
public boolean hasChildQueues() {
return true;
}
@Override
public synchronized List<CSQueue> getChildQueues() {
return new ArrayList<CSQueue>(childQueues);