/** * First sets entitlement of queues to zero to prevent new app submission. * Then move all apps in the set of queues to the parent plan queue's default * reservation queue if move is enabled. Finally cleanups the queue by killing * any apps (if move is disabled or move failed) and removing the queue */ protected void cleanupExpiredQueues(String planQueueName, boolean shouldMove, Set<String> toRemove, String defReservationQueue) { for (String expiredReservationId : toRemove) { try { // reduce entitlement to 0 String expiredReservation = getReservationQueueName(planQueueName, expiredReservationId); setQueueEntitlement(planQueueName, expiredReservation, 0.0f, 0.0f); if (shouldMove) { moveAppsInQueueSync(expiredReservation, defReservationQueue); } if (scheduler.getAppsInQueue(expiredReservation).size() > 0) { scheduler.killAllAppsInQueue(expiredReservation); LOG.info("Killing applications in queue: {}", expiredReservation); } else { scheduler.removeQueue(expiredReservation); LOG.info("Queue: " + expiredReservation + " removed"); } } catch (YarnException e) { LOG.warn("Exception while trying to expire reservation: {}", expiredReservationId, e); } } }
Queue planQueue = getPlanQueue(planQueueName); if (planQueue == null) return; Resource planResources = getPlanResources(plan, planQueue, clusterResources); Set<String> curReservationNames = new HashSet<String>(); Resource reservedResources = Resource.newInstance(0, 0); int numRes = getReservedResources(now, currentReservations, curReservationNames, reservedResources); String defReservationId = getReservationIdFromQueueName(planQueueName) + ReservationConstants.DEFAULT_QUEUE_SUFFIX; String defReservationQueue = getReservationQueueName(planQueueName, defReservationId); createDefaultReservationQueue(planQueueName, planQueue, defReservationId); curReservationNames.add(defReservationId); if (arePlanResourcesLessThanReservations(clusterResources, planResources, reservedResources)) { try { List<? extends Queue> resQueues = getChildReservationQueues(planQueue); Set<String> expired = new HashSet<String>(); for (Queue resQueue : resQueues) { String resQueueName = resQueue.getQueueName(); String reservationId = getReservationIdFromQueueName(resQueueName); if (curReservationNames.contains(reservationId)) {
protected void setQueueEntitlement(String planQueueName, String currResId, float targetCapacity, float maxCapacity) throws YarnException { String reservationQueueName = getReservationQueueName(planQueueName, currResId); scheduler.setEntitlement(reservationQueueName, new QueueEntitlement( targetCapacity, maxCapacity)); }
Queue planQueue = getPlanQueue(planQueueName); if (planQueue == null) { return; getPlanResources(plan, planQueue, clusterResources); Set<ReservationAllocation> currentReservations = plan.getReservationsAtTime(now); Set<String> curReservationNames = new HashSet<String>(); Resource reservedResources = Resource.newInstance(0, 0); int numRes = getReservedResources(now, currentReservations, curReservationNames, reservedResources); String defReservationId = getReservationIdFromQueueName(planQueueName) + ReservationConstants.DEFAULT_QUEUE_SUFFIX; String defReservationQueue = getReservationQueueName(planQueueName, defReservationId); createDefaultReservationQueue(planQueueName, planQueue, defReservationId); curReservationNames.add(defReservationId); if (arePlanResourcesLessThanReservations(plan.getResourceCalculator(), clusterResources, planResources, reservedResources)) { if (shouldReplan) { List<? extends Queue> resQueues = getChildReservationQueues(planQueue); Set<String> expired = new HashSet<String>(); for (Queue resQueue : resQueues) { String resQueueName = resQueue.getQueueName(); String reservationId = getReservationIdFromQueueName(resQueueName); if (curReservationNames.contains(reservationId)) {
protected void setQueueEntitlement(String planQueueName, String currResId, float targetCapacity, float maxCapacity) throws YarnException { String reservationQueueName = getReservationQueueName(planQueueName, currResId); scheduler.setEntitlement(reservationQueueName, new QueueEntitlement( targetCapacity, maxCapacity)); }
Queue planQueue = getPlanQueue(planQueueName); if (planQueue == null) return; Resource planResources = getPlanResources(plan, planQueue, clusterResources); Set<String> curReservationNames = new HashSet<String>(); Resource reservedResources = Resource.newInstance(0, 0); int numRes = getReservedResources(now, currentReservations, curReservationNames, reservedResources); String defReservationId = getReservationIdFromQueueName(planQueueName) + ReservationConstants.DEFAULT_QUEUE_SUFFIX; String defReservationQueue = getReservationQueueName(planQueueName, defReservationId); createDefaultReservationQueue(planQueueName, planQueue, defReservationId); curReservationNames.add(defReservationId); if (arePlanResourcesLessThanReservations(clusterResources, planResources, reservedResources)) { try { List<? extends Queue> resQueues = getChildReservationQueues(planQueue); Set<String> expired = new HashSet<String>(); for (Queue resQueue : resQueues) { String resQueueName = resQueue.getQueueName(); String reservationId = getReservationIdFromQueueName(resQueueName); if (curReservationNames.contains(reservationId)) {
/** * First sets entitlement of queues to zero to prevent new app submission. * Then move all apps in the set of queues to the parent plan queue's default * reservation queue if move is enabled. Finally cleanups the queue by killing * any apps (if move is disabled or move failed) and removing the queue */ protected void cleanupExpiredQueues(String planQueueName, boolean shouldMove, Set<String> toRemove, String defReservationQueue) { for (String expiredReservationId : toRemove) { try { // reduce entitlement to 0 String expiredReservation = getReservationQueueName(planQueueName, expiredReservationId); setQueueEntitlement(planQueueName, expiredReservation, 0.0f, 0.0f); if (shouldMove) { moveAppsInQueueSync(expiredReservation, defReservationQueue); } if (scheduler.getAppsInQueue(expiredReservation).size() > 0) { scheduler.killAllAppsInQueue(expiredReservation); LOG.info("Killing applications in queue: {}", expiredReservation); } else { scheduler.removeQueue(expiredReservation); LOG.info("Queue: " + expiredReservation + " removed"); } } catch (YarnException e) { LOG.warn("Exception while trying to expire reservation: {}", expiredReservationId, e); } } }
protected void setQueueEntitlement(String planQueueName, String currResId, float targetCapacity, float maxCapacity) throws YarnException { String reservationQueueName = getReservationQueueName(planQueueName, currResId); scheduler.setEntitlement(reservationQueueName, new QueueEntitlement(targetCapacity, maxCapacity)); }
getReservationQueueName(planQueueName, expiredReservationId); setQueueEntitlement(planQueueName, expiredReservation, 0.0f, 0.0f); if (shouldMove) { moveAppsInQueueSync(expiredReservation, defReservationQueue);