public void flexDownAService()

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);
  }