in myriad-scheduler/src/main/java/org/apache/myriad/scheduler/MyriadOperations.java [159:209]
public void flexDownAService(int numInstancesToScaleDown, String serviceName) {
LOGGER.info("About to flex down {} instances of {}", numInstancesToScaleDown, serviceName);
int numScaledDown = 0;
// Flex down Pending tasks, if any
if (numScaledDown < numInstancesToScaleDown) {
Collection<Protos.TaskID> pendingTasks = this.schedulerState.getPendingTaskIds(serviceName);
for (Protos.TaskID taskId : pendingTasks) {
this.schedulerState.makeTaskKillable(taskId);
numScaledDown++;
if (numScaledDown >= numInstancesToScaleDown) {
break;
}
}
}
int numPendingTasksScaledDown = numScaledDown;
// Flex down Staging tasks, if any
if (numScaledDown < numInstancesToScaleDown) {
Collection<Protos.TaskID> stagingTasks = this.schedulerState.getStagingTaskIds(serviceName);
for (Protos.TaskID taskId : stagingTasks) {
this.schedulerState.makeTaskKillable(taskId);
numScaledDown++;
if (numScaledDown >= numInstancesToScaleDown) {
break;
}
}
}
int numStagingTasksScaledDown = numScaledDown - numPendingTasksScaledDown;
Set<NodeTask> activeTasks = this.schedulerState.getActiveTasksByType(serviceName);
if (numScaledDown < numInstancesToScaleDown) {
for (NodeTask nodeTask : activeTasks) {
this.schedulerState.makeTaskKillable(nodeTask.getTaskStatus().getTaskId());
numScaledDown++;
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Marked NodeTask {} on host {} for kill.", nodeTask.getTaskStatus().getTaskId(), nodeTask.getHostname());
}
if (numScaledDown >= numInstancesToScaleDown) {
break;
}
}
}
LOGGER.info("Flexed down {} of {} instances including {} staging instances, and {} pending instances of {}", numScaledDown,
numInstancesToScaleDown, numStagingTasksScaledDown, numPendingTasksScaledDown, serviceName);
}