public Response flexDown()

in myriad-scheduler/src/main/java/org/apache/myriad/api/ClustersResource.java [142:172]


  public Response flexDown(FlexDownClusterRequest request) {
    Preconditions.checkNotNull(request, "request object cannot be null or empty");

    Integer instances = request.getInstances();
    String profile = request.getProfile();
    List<String> constraints = request.getConstraints();
    LOGGER.info("Received flex down request. Profile: {}, Instances: {}, Constraints: {}", profile, instances, constraints);

    Response.ResponseBuilder response = Response.status(Response.Status.ACCEPTED);
    boolean isValidRequest = validateProfile(profile, response);
    isValidRequest = isValidRequest && validateInstances(instances, response);
    isValidRequest = isValidRequest && validateConstraints(constraints, response);

    if (isValidRequest) {
      Integer numFlexedUp = this.getNumFlexedupNMs(profile);
      if (numFlexedUp < instances) {
        String message = String.format("Number of requested instances for flexdown is greater than the number of " +
            "Node Managers previously flexed up for profile '%s'. Requested: %d, Previously flexed Up: %d. " +
            "Only %d Node Managers will be flexed down.", profile, instances, numFlexedUp, numFlexedUp);
        response.entity(message);
        LOGGER.warn(message);
      }
    }

    Response returnResponse = response.build();
    if (returnResponse.getStatus() == Response.Status.ACCEPTED.getStatusCode()) {
      String constraint = constraints != null && !constraints.isEmpty() ? constraints.get(0) : null;
      this.myriadOperations.flexDownCluster(profileManager.get(profile), ConstraintFactory.createConstraint(constraint), instances);
    }
    return returnResponse;
  }