YARN-6681. Eliminate double-copy of child queues in canAssignToThisQueue. Contributed by Daryn Sharp.
This commit is contained in:
parent
8027246306
commit
69480ba686
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue