@Override public RunState dequeue(WorkflowInstance workflowInstance, Set<String> resourceIds) { switch (state()) { case QUEUED: return state( PREPARE, data().builder() .retryDelayMillis(empty()) .resourceIds(resourceIds) .build()); default: throw illegalTransition("dequeue"); } }
@Override public RunState retryAfter(WorkflowInstance workflowInstance, long delayMillis) { switch (state()) { case TERMINATED: case FAILED: case QUEUED: return state( QUEUED, data().builder() .retryDelayMillis(delayMillis) .executionId(empty()) .executionDescription(empty()) .resourceIds(empty()) .build()); default: throw illegalTransition("retryAfter"); } }
@Override public RunState info(WorkflowInstance workflowInstance, Message message) { switch (state()) { case QUEUED: return state( QUEUED, data().builder() .messages(message) .build()); default: throw illegalTransition("info"); } }
@Deprecated @Override public RunState timeTrigger(WorkflowInstance workflowInstance) { switch (state()) { case NEW: return state( // for backwards compatibility SUBMITTED, data().builder() .trigger(Trigger.unknown("UNKNOWN")) .triggerId("UNKNOWN") // for backwards compatibility .build()); default: throw illegalTransition("timeTrigger"); } }
@Override public RunState submit(WorkflowInstance workflowInstance, ExecutionDescription executionDescription, String executionId) { switch (state()) { case QUEUED: // for backwards compatibility case PREPARE: return state( SUBMITTING, data().builder() .executionDescription(executionDescription) .executionId(executionId) .build()); default: throw illegalTransition("submit"); } }
@Override public RunState submitted(WorkflowInstance workflowInstance, String executionId) { switch (state()) { case SUBMITTING: return state( SUBMITTED, data().builder() .tries(data().tries() + 1) // backwards compatibility .executionId(data().executionId().orElse(executionId)) .build()); default: throw illegalTransition("submitted"); } }
@Override public RunState triggerExecution(WorkflowInstance workflowInstance, Trigger trigger, TriggerParameters parameters) { switch (state()) { case NEW: return state( QUEUED, data().builder() .trigger(trigger) .triggerId(TriggerUtil.triggerId(trigger)) // for backwards compatibility .triggerParameters(parameters) .build()); default: throw illegalTransition("triggerExecution"); } }
@Deprecated @Override public RunState created(WorkflowInstance workflowInstance, String executionId, String dockerImage) { switch (state()) { case PREPARE: case QUEUED: return state( SUBMITTED, // for backwards compatibility data().builder() .executionId(executionId) .executionDescription(ExecutionDescription.forImage(dockerImage)) .tries(data().tries() + 1) .build()); default: throw illegalTransition("created"); } }
@Override public RunState terminate(WorkflowInstance workflowInstance, Optional<Integer> exitCode) { switch (state()) { case RUNNING: final double cost = exitCost(exitCode); final int consecutiveFailures = consecutiveFailures(data(), exitCode); final MessageLevel level = messageLevel(exitCode); final StateData newStateData = data().builder() .retryCost(data().retryCost() + cost) .lastExit(exitCode) .consecutiveFailures(consecutiveFailures) .messages(Message.create(level, "Exit code: " + exitCode.map(String::valueOf).orElse("-"))) .build(); return state(TERMINATED, newStateData); default: throw illegalTransition("terminate"); } }
@Override public RunState runError(WorkflowInstance workflowInstance, String message) { switch (state()) { case QUEUED: case SUBMITTING: case SUBMITTED: case RUNNING: case PREPARE: final StateData newStateData = data().builder() .retryCost(data().retryCost() + FAILURE_COST) .lastExit(empty()) .consecutiveFailures(data().consecutiveFailures() + 1) .messages(Message.error(message)) .build(); return state(FAILED, newStateData); default: throw illegalTransition("runError"); } }