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