in frontend/server/src/main/java/com/amazonaws/ml/mms/http/ManagementRequestHandler.java [280:330]
private void updateModelWorkers(
final ChannelHandlerContext ctx,
final String modelName,
int minWorkers,
int maxWorkers,
boolean synchronous,
final Function<Void, Void> onError) {
ModelManager modelManager = ModelManager.getInstance();
CompletableFuture<HttpResponseStatus> future =
modelManager.updateModel(modelName, minWorkers, maxWorkers);
if (!synchronous) {
NettyUtils.sendJsonResponse(
ctx,
new StatusResponse("Processing worker updates..."),
HttpResponseStatus.ACCEPTED);
return;
}
future.thenApply(
v -> {
boolean status = modelManager.scaleRequestStatus(modelName);
if (HttpResponseStatus.OK.equals(v)) {
if (status) {
NettyUtils.sendJsonResponse(
ctx, new StatusResponse("Workers scaled"), v);
} else {
NettyUtils.sendJsonResponse(
ctx,
new StatusResponse("Workers scaling in progress..."),
new HttpResponseStatus(210, "Partial Success"));
}
} else {
NettyUtils.sendError(
ctx,
v,
new InternalServerException("Failed to start workers"));
if (onError != null) {
onError.apply(null);
}
}
return v;
})
.exceptionally(
(e) -> {
if (onError != null) {
onError.apply(null);
}
NettyUtils.sendError(ctx, HttpResponseStatus.INTERNAL_SERVER_ERROR, e);
return null;
});
}