@PUT @Path("/request/{requestId}/instances") @ApiOperation( value = "Scale the number of instances up or down for a specific Request", response = SingularityRequest.class) @ApiResponses({ @ApiResponse(code = 400, message = "Posted object did not match Request ID"), @ApiResponse(code = 404, message = "No Request with that ID"), }) public SingularityRequest updateInstances( @ApiParam("The Request ID to scale") @PathParam("requestId") String requestId, @ApiParam("Username of the person requesting the scale") @QueryParam("user") Optional<String> user, @ApiParam("Object to hold number of instances to request") SingularityRequestInstances newInstances) { checkBadRequest( requestId != null && newInstances.getId() != null && requestId.equals(newInstances.getId()), "Update for request instance must pass a matching non-null requestId in path (%s) and object (%s)", requestId, newInstances.getId()); checkConflict( !requestManager.cleanupRequestExists(requestId), "Request %s is currently cleaning. Try again after a few moments", requestId); SingularityRequest oldRequest = fetchRequest(requestId); Optional<SingularityRequest> maybeOldRequest = Optional.of(oldRequest); SingularityRequestDeployHolder deployHolder = getDeployHolder(newInstances.getId()); SingularityRequest newRequest = oldRequest.toBuilder().setInstances(newInstances.getInstances()).build(); validator.checkSingularityRequest( newRequest, maybeOldRequest, deployHolder.getActiveDeploy(), deployHolder.getPendingDeploy()); final long now = System.currentTimeMillis(); requestManager.update(newRequest, now, user); checkReschedule(newRequest, maybeOldRequest, now); return newRequest; }