@Override protected void handleStartedStagePatch(ClosureProvisionTaskState state) { switch (state.taskSubStage) { case CREATED: startClosureExecutions(state); break; case CLOSURE_EXECUTING: break; case COMPLETED: complete(); break; case ERROR: completeWithError(); break; default: break; } }
private void startClosureExecutions(ClosureProvisionTaskState state) { for (String closureLink : state.resourceLinks) { startClosureExecution(state, closureLink); } }
private void startClosureExecution(ClosureProvisionTaskState state, String closureLink) { getClosureDescription(closureLink, (closure) -> { closure.serviceTaskCallback = ServiceTaskCallback .create(state.documentSelfLink, TaskState.TaskStage.STARTED, SubStage.COMPLETED, TaskState.TaskStage.STARTED, SubStage.ERROR); sendRequest(Operation.createPost(this.getHost(), closureLink) .setBody(closure) .setCompletion((o, ex) -> { if (ex != null) { logWarning("Failed to execute closure: %s", Utils.toString(ex)); proceedTo(SubStage.ERROR); } })); }); proceedTo(SubStage.CLOSURE_EXECUTING); }
private void getClosureDescription(String closureLink, Consumer<Closure> callbackFunction) { sendRequest(Operation.createGet(this, closureLink) .setCompletion( (o, e) -> { if (e != null) { failTask("Failure retrieving closure description.", e); return; } Closure desc = o.getBody(Closure.class); callbackFunction.accept(desc); })); }
@Override protected ServiceTaskCallback.ServiceTaskCallbackResponse getFinishedCallbackResponse( ClosureProvisionTaskState state) { CallbackCompleteResponse finishedResponse = new CallbackCompleteResponse(); finishedResponse.copy(state.serviceTaskCallback.getFinishedResponse()); finishedResponse.resourceLinks = state.resourceLinks; if (state.resourceLinks == null || state.resourceLinks.isEmpty()) { logWarning("No resourceLinks found for provisioned closure resources."); } return finishedResponse; }