.equals(IntraQueuePreemptionOrderPolicy.USERLIMIT_FIRST)) { Resources.subtractFrom(rollingUsedResourcePerUser, c.getAllocatedResource());
.valueOf(config .get( CapacitySchedulerConfiguration.INTRAQUEUE_PREEMPTION_ORDER_POLICY,
&& (!tmpUser.isUserLimitReached(rc, cluster)) && (intraQueuePreemptionOrder .equals(IntraQueuePreemptionOrderPolicy.USERLIMIT_FIRST))) { continue;
Resources.subtract(usedResource, c.getAllocatedResource()), userLimit) && context.getIntraQueuePreemptionOrderPolicy() .equals(IntraQueuePreemptionOrderPolicy.USERLIMIT_FIRST);
private void calculateToBePreemptedResourcePerApp(Resource clusterResource, TreeSet<TempAppPerPartition> orderedApps, Resource preemptionLimit) { for (TempAppPerPartition tmpApp : orderedApps) { if (Resources.lessThanOrEqual(rc, clusterResource, preemptionLimit, Resources.none()) || Resources.lessThanOrEqual(rc, clusterResource, tmpApp.getUsed(), Resources.none())) { continue; } Resource preemtableFromApp = Resources.subtract(tmpApp.getUsed(), tmpApp.idealAssigned); Resources.subtractFromNonNegative(preemtableFromApp, tmpApp.selected); Resources.subtractFromNonNegative(preemtableFromApp, tmpApp.getAMUsed()); if (context.getIntraQueuePreemptionOrderPolicy() .equals(IntraQueuePreemptionOrderPolicy.USERLIMIT_FIRST)) { Resources.subtractFromNonNegative(preemtableFromApp, tmpApp.getFiCaSchedulerApp().getCSLeafQueue().getMinimumAllocation()); } // Calculate toBePreempted from apps as follows: // app.preemptable = min(max(app.used - app.selected - app.ideal, 0), // intra_q_preemptable) tmpApp.toBePreempted = Resources.min(rc, clusterResource, Resources .max(rc, clusterResource, preemtableFromApp, Resources.none()), Resources.clone(preemptionLimit)); preemptionLimit = Resources.subtractFromNonNegative(preemptionLimit, tmpApp.toBePreempted); } }