private void handledLeasedState(Operation op, Closure closure) { logInfo("Closure is already being executed by : %s", closure.documentSelfLink); op.setStatusCode(Operation.STATUS_CODE_BAD_REQUEST); op.fail(new IllegalArgumentException( String.format("Closure has already been executed: %s", closure.documentSelfLink))); }
private boolean isTaskExpired(Closure closure, ClosureDescription taskDef) { if (closure.state != TaskStage.STARTED) { return false; } if (taskDef.resources == null) { logWarning("No constraints constraints bound to closure."); } if (closure.lastLeasedTimeMillis == null) { return false; } long timeElapsed = System.currentTimeMillis() - closure.lastLeasedTimeMillis; if (timeElapsed > (taskDef.resources.timeoutSeconds * 1000)) { logInfo("Timeout elapsed=%s, timeout=%s of closure=%s", timeElapsed, taskDef.resources.timeoutSeconds * 1000, closure.documentSelfLink); return true; } return false; }
private void handleDoneState(Operation op, Closure closure) { logInfo("Closure has already been executed: %s", closure.documentSelfLink); op.setStatusCode(Operation.STATUS_CODE_BAD_REQUEST); op.fail(new IllegalArgumentException( String.format("Closure has already been executed: %s", closure.documentSelfLink))); }
private void completeCancelTask(ClosureDescription closureDesc, Closure closure) { String errorMsg = "Configured timeout of [%s] seconds has expired. Closure %s is" + " cancelled."; logInfo(errorMsg, closureDesc.resources.timeoutSeconds, closure.documentSelfLink); closure.state = TaskStage.CANCELLED; closure.errorMsg = String.format(errorMsg, closureDesc.resources.timeoutSeconds, closure.documentSelfLink); closure.endTimeMillis = System.currentTimeMillis(); sendSelfPatch(closure); getExecutionDriver(closureDesc) .cleanClosure(closure, (error) -> logWarning("Unable to clean resources for %s", closure.documentSelfLink)); }
private void fetchLogs(Closure closure, Runnable operation) { if (closure.resourceLinks == null || closure.resourceLinks.size() <= 0) { return; } String resourceLink = closure.resourceLinks.iterator().next(); String containerId = UriUtils.getLastPathSegment(resourceLink); String logsURI = ManagementUriParts.CONTAINER_LOGS + "?id=" + containerId; sendRequest(Operation .createGet(this, logsURI) .setCompletion((op, ex) -> { if (ex != null) { logWarning("Failed to fetch logs for closure! %s Reason: %s", closure.documentSelfLink, ex.getMessage()); } else { logInfo("Logs fetched successfully for closure: %s", closure.documentSelfLink); LogServiceState logState = op.getBody(LogServiceState.class); byte[] fetchedLogs = shrinkToMaxAllowedSize(logState.logs); if (shouldUpdateLogs(closure.logs, fetchedLogs)) { closure.logs = fetchedLogs; sendSelfPatch(closure); } operation.run(); } })); }
private void callWebhook(String webHookUriStr, Closure closure) { logInfo("Calling execution container for closure: %s", closure.documentSelfLink); URI webHookUri = UriUtils.buildUri(webHookUriStr); sendRequest(Operation .createPost(webHookUri) .setExpiration(Utils.fromNowMicrosUtc(TimeUnit.SECONDS .toMicros(ClosureProps.DEFAULT_WEB_HOOK_EXPIRATION_TIMEOUT))) .setBody(closure) .setCompletion((op, ex) -> { if (ex != null) { logWarning("Unable to send closure state to: %s. Reason: %s", webHookUriStr, Utils.toString(ex)); } else { logInfo("Successfully sent closure state to: %s", webHookUri); } })); }
private void sendRequestStateToExternalUrl(String callbackReference, Closure state) { // send put with the RequestState as the body logInfo("Calling callback URI: %s", callbackReference); try { URI callbackUri = URI.create(callbackReference); sendRequest(Operation.createPost(callbackUri) .setBody(state) .forceRemote() .setCompletion((op, ex) -> { if (ex != null) { logSevere("Failure calling callback '%s' for registry state: %s", op.getUri(), Utils.toString(ex)); } })); } catch (Exception e) { logSevere(e); } }
@Override public void handleStart(Operation startOp) { if (!hasBody(startOp)) { return; } Closure closure = startOp.getBody(Closure.class); logInfo("Closure state: %s, closure definition: %s", closure.state, closure.descriptionLink); if (isNotValid(startOp, closure)) { return; } if (closure.state == TaskStage.CREATED || closure.state == TaskStage.CANCELLED) { initializeTask(startOp, closure); } else { this.setState(startOp, closure); startOp.setBody(closure).complete(); } }
private void createRequestTracker(ClosureTaskState state) { sendRequest(Operation.createPost(this, ManagementUriParts.REQUEST_STATUS) .setBodyNoCloning(fromTask(state)) .setCompletion((o, e) -> { if (e != null) { logWarning("Failed to create request tracker for: " + state.documentSelfLink, e); return; } state.requestTrackerLink = o.getBody(TaskStatusState.class).documentSelfLink; logInfo("Created request tracker: %s", state.requestTrackerLink); updateRequestTracker(state, ClosureProps.RETRIES_COUNT); })); }
&& closure.state != TaskStage.CANCELLED) { logInfo("Cleaning execution container for closure: %s", closure.documentSelfLink); getExecutionDriver(closureDesc).cleanClosure(closure,
} else { currentClosure = updateState(patchOp, requestedState); logInfo("Closure state: %s, closure definition: %s", currentClosure.state, currentClosure.descriptionLink);