private static String getPartitionByNodeId( CapacitySchedulerPreemptionContext context, NodeId nodeId) { return context.getScheduler().getSchedulerNode(nodeId).getPartition(); }
for (FiCaSchedulerNode node : preemptionContext.getScheduler() .getAllNodes()) { if (node.getReservedContainer() != null) {
QueuePriorityContainerCandidateSelector( CapacitySchedulerPreemptionContext preemptionContext) { super(preemptionContext); // Initialize parameters CapacitySchedulerConfiguration csc = preemptionContext.getScheduler().getConfiguration(); minTimeout = csc.getPUOrderingPolicyUnderUtilizedPreemptionDelay(); allowMoveReservation = csc.getPUOrderingPolicyUnderUtilizedPreemptionMoveReservation(); }
private void tryToMakeBetterReservationPlacement( RMContainer reservedContainer, List<FiCaSchedulerNode> allSchedulerNodes) { for (FiCaSchedulerNode targetNode : allSchedulerNodes) { // Precheck if we can move the rmContainer to the new targetNode if (!preChecksForMovingReservedContainerToNode(reservedContainer, targetNode)) { continue; } if (canPreemptEnoughResourceForAsked( reservedContainer.getReservedResource(), reservedContainer.getQueueName(), targetNode, true, null)) { NodeId fromNode = reservedContainer.getNodeId(); // We can place container to this targetNode, so just go ahead and notify // scheduler if (preemptionContext.getScheduler().moveReservedContainer( reservedContainer, targetNode)) { LOG.info("Successfully moved reserved container=" + reservedContainer .getContainerId() + " from targetNode=" + fromNode + " to targetNode=" + targetNode.getNodeID()); touchedNodes.add(targetNode.getNodeID()); } } } }
private boolean preChecksForMovingReservedContainerToNode( RMContainer reservedContainer, FiCaSchedulerNode newNode) { // Don't do this if it has hard-locality preferences if (reservedContainer.getReservedSchedulerKey().getContainerToUpdate() != null) { // This means a container update request (like increase / promote) return false; } // For normal requests FiCaSchedulerApp app = preemptionContext.getScheduler().getApplicationAttempt( reservedContainer.getApplicationAttemptId()); if (!app.getAppSchedulingInfo().canDelayTo( reservedContainer.getAllocatedSchedulerKey(), ResourceRequest.ANY)) { // This is a hard locality request return false; } // Check if newNode's partition matches requested partition if (!StringUtils.equals(reservedContainer.getNodeLabelExpression(), newNode.getPartition())) { return false; } return true; }
for (Set<RMContainer> containers : selectedCandidates.values()) { for (RMContainer c : containers) { SchedulerNode schedulerNode = context.getScheduler() .getSchedulerNode(c.getAllocatedNode()); if (null == schedulerNode) {
preemptionContext.getScheduler().getAllNodes(); for (FiCaSchedulerNode node : allSchedulerNodes) { RMContainer reservedContainer = node.getReservedContainer(); FiCaSchedulerNode node = preemptionContext.getScheduler().getNode( reservedContainer.getReservedNode()); if (null == node) {
String partition = context.getScheduler() .getSchedulerNode(c.getAllocatedNode()).getPartition(); TempQueuePerPartition tq = context.getQueueByPartition(app.getQueueName(),