protected void handleFailedStagePatch(T state) { ServiceErrorResponse err = state.taskInfo.failure; logWarning("Task failed with: %s", err == null ? "n.a." : err.message); if (err != null && err.stackTrace != null) { logFine("Task failure stack trace: %s", err.stackTrace); } notifyCallerService(state); }
/** * Moves the task to the specified stage/subStage by sending a patch to self. By default the * patch body is empty; use the {@code patchBodyConfigurator} argument to set patch fields that * are required for this stage transition. */ @SuppressWarnings("unchecked") protected void proceedTo(TaskStage stage, E subStage, Consumer<T> patchBodyConfigurator) { T body = null; try { body = (T) getStateType().newInstance(); } catch (InstantiationException | IllegalAccessException e) { throw new RuntimeException(e); } body.taskInfo = new TaskState(); body.taskInfo.stage = stage; body.taskSubStage = subStage; if (patchBodyConfigurator != null) { patchBodyConfigurator.accept(body); } sendRequest(Operation.createPatch(getUri()) .setBody(body) .setCompletion((o, e) -> { if (e != null) { logWarning("Moving task to %s:%s failed: %s", stage, subStage, e.getMessage()); } })); }
private boolean validateNewState(T state, Operation startPost) { if (state.documentVersion > 0) { logWarning("Document version on create is : %s", state.documentVersion); return false; } if (state.serviceTaskCallback == null) { state.serviceTaskCallback = ServiceTaskCallback.createEmpty(); } if (state.taskInfo == null) { state.taskInfo = new TaskState(); state.taskInfo.stage = TaskStage.CREATED; } if (state.taskSubStage == null) { state.taskSubStage = Enum.valueOf(subStageType, DefaultSubStage.CREATED.name()); } if (state.documentExpirationTimeMicros == 0) { state.documentExpirationTimeMicros = ServiceUtils .getDefaultTaskExpirationTimeInMicros(); } return validateStateOnStart(state, startPost); }
logWarning("Task patched to failed when already in failed state. %s", refererLogPart); patch.complete(); return true; && DefaultSubStage.ERROR.name().equals(currentState.taskSubStage.name()) && TaskStage.FAILED == currentState.taskInfo.stage) { logWarning("Task already failed.%s", refererLogPart); logWarning("Can't move from %s(%s) to %s(%s).%s", currentState.taskInfo.stage, currentState.taskSubStage, patchBody.taskInfo.stage, patchBody.taskSubStage, refererLogPart); if (patchBody.taskInfo.stage == currentState.taskInfo.stage && !transientSubStages.contains(patchBody.taskSubStage)) { logWarning("Can't move from %s(%s) to %s(%s).%s", currentState.taskInfo.stage, currentState.taskSubStage, patchBody.taskInfo.stage, patchBody.taskSubStage, refererLogPart);
case STARTED: String errMsg = "Task expired in stage: %s, sub-stage: %s, expirationTime: %s"; logWarning(errMsg, state.taskInfo.stage, state.taskSubStage, state.documentExpirationTimeMicros); if (!state.serviceTaskCallback.isEmpty()) { .setCompletion((o, ex) -> { if (ex != null) { logWarning("Updating state to expired failed: %s", Utils.toString(ex));
@Override public void handleStop(Operation delete) { try { if (delete.hasBody()) { T task = getBody(delete); if (ServiceUtils.isExpired(task)) { handleExpiration(task); } } } catch (Throwable t) { logWarning("Error while stopping task service [%s]: %s", getSelfLink(), Utils.toString(t)); } finally { super.handleStop(delete); } }
public void failTask(String errMsg, Throwable t, boolean logAsWarning) { final Level logLevel = logAsWarning ? Level.WARNING : Level.INFO; final String msg = errMsg == null ? "Unexpected State" : errMsg; if (t != null) { log(logLevel, () -> String.format("%s%s Error: %s", msg, msg.endsWith(".") ? "" : ".", Utils.toString(t))); } else { log(logLevel, () -> msg); } ServiceTaskCallbackResponse body = new ServiceTaskCallbackResponse(); body.taskInfo = new TaskState(); body.taskInfo.stage = TaskStage.FAILED; body.taskSubStage = DefaultSubStage.ERROR; if (t != null) { body.taskInfo.failure = getServiceErrorResponse(t); } else { ServiceErrorResponse rsp = new ServiceErrorResponse(); rsp.message = msg; body.taskInfo.failure = rsp; } sendRequest(Operation.createPatch(getUri()) .setBody(body) .setCompletion((op, ex) -> { if (ex != null) { logWarning("Self patch failed: %s", Utils.toString(ex)); } })); }
TimeUnit.MILLISECONDS); } else { logWarning("Failed to update request tracker: %s. Error: %s", state.requestTrackerLink, Utils.toString(ex));
.setCompletion((o, e) -> { if (e != null) { logWarning("Notifying parent task %s failed: %s", o.getUri(), Utils.toString(e));