/** * This method is visible to allow sub-classes to override the behavior, * specifically for federation purposes we do not want to cap resources as it * is done here. * * @param rc the {@code ResourceCalculator} to be used * @param clusterResource the total cluster resources * @param offered the resources offered to this queue * @return the amount of resources accepted after considering max and * deducting assigned. */ protected Resource filterByMaxDeductAssigned(ResourceCalculator rc, Resource clusterResource, Resource offered) { if (null == children || children.isEmpty()) { Resource maxOfGuranteedAndUsedDeductAssigned = Resources.subtract( Resources.max(rc, clusterResource, getUsed(), getGuaranteed()), idealAssigned); maxOfGuranteedAndUsedDeductAssigned = Resources.max(rc, clusterResource, maxOfGuranteedAndUsedDeductAssigned, Resources.none()); offered = Resources.min(rc, clusterResource, offered, maxOfGuranteedAndUsedDeductAssigned); } return offered; }
public void assignPreemption(float scalingFactor, ResourceCalculator rc, Resource clusterResource) { Resource usedDeductKillable = Resources.subtract(getUsed(), killable); Resource totalResource = Resources.add(getUsed(), pending); // The minimum resource that we need to keep for a queue is: // max(idealAssigned, min(used + pending, guaranteed)). // // Doing this because when we calculate ideal allocation doesn't consider // reserved resource, ideal-allocation calculated could be less than // guaranteed and total. We should avoid preempt from a queue if it is // already // <= its guaranteed resource. Resource minimumQueueResource = Resources.max(rc, clusterResource, Resources.min(rc, clusterResource, totalResource, getGuaranteed()), idealAssigned); if (Resources.greaterThan(rc, clusterResource, usedDeductKillable, minimumQueueResource)) { toBePreempted = Resources.multiply( Resources.subtract(usedDeductKillable, minimumQueueResource), scalingFactor); } else { toBePreempted = Resources.none(); } }
/** * Do we allow the demanding queue preempt resource from other queues? * A satisfied queue is not allowed to preempt resource from other queues. * @param demandingQueue * @return allowed/not */ private boolean isQueueSatisfied(String demandingQueue, String partition) { TempQueuePerPartition tq = preemptionContext.getQueueByPartition( demandingQueue, partition); if (null == tq) { return false; } Resource guaranteed = tq.getGuaranteed(); Resource usedDeductReservd = Resources.subtract(tq.getUsed(), tq.getReserved()); Resource markedToPreemptFromOtherQueue = toPreemptedFromOtherQueues.get( demandingQueue, partition); if (null == markedToPreemptFromOtherQueue) { markedToPreemptFromOtherQueue = Resources.none(); } // return Used - reserved + to-preempt-from-other-queue >= guaranteed boolean flag = Resources.greaterThanOrEqual(rc, clusterResource, Resources.add(usedDeductReservd, markedToPreemptFromOtherQueue), guaranteed); return flag; }
for (Iterator<TempQueuePerPartition> i = qAlloc.iterator(); i.hasNext(); ) { TempQueuePerPartition q = i.next(); Resource used = q.getUsed(); Resources.componentwiseMin(q.getGuaranteed(), q.getUsed()), q.untouchableExtra); } else{ Resource curPlusPend = Resources.add(q.getUsed(), q.pending); if (Resources.lessThan(rc, totGuarant, q.idealAssigned, curPlusPend)) { orderedByNeed.add(q);
qT.getUsed(), Resources .multiply(qT.getGuaranteed(), 1.0 + context.getMaxIgnoreOverCapacity()))) {
preemptableExtra = Resources.none(); Resource extra = Resources.subtract(getUsed(), getGuaranteed()); if (Resources.lessThan(rc, totalPartitionResource, extra, Resources.none())) {
Resource queueReassignableResource = Resources.subtract(tq.getUsed(), tq.getActuallyToBePreempted());
assertEquals(0, tempQueueAPartition.untouchableExtra.getMemorySize()); long extraForQueueA = tempQueueAPartition.getUsed().getMemorySize() - tempQueueAPartition .getGuaranteed().getMemorySize(); assertEquals(extraForQueueA,
assertEquals(0, tempQueueAPartition.untouchableExtra.getMemorySize()); long extraForQueueA = tempQueueAPartition.getUsed().getMemorySize() - tempQueueAPartition .getGuaranteed().getMemorySize(); assertEquals(extraForQueueA,
.subtract(Resources.add(getUsed(), (considersReservedResource ? pending : pendingDeductReserved)), idealAssigned)));