private RunState state(State state, StateData newStateData) { return new AutoValue_RunState( workflowInstance(), state, timestamp(), newStateData, counter()); }
@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"); } }
@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"); } }
private void sendDequeue(InstanceState instanceState, Set<String> resourceIds) { final WorkflowInstance workflowInstance = instanceState.workflowInstance(); final RunState state = instanceState.runState(); if (state.data().tries() == 0) { LOG.info("Executing {}", workflowInstance); } else { LOG.info("Executing {}, retry #{}", workflowInstance, state.data().tries()); } stateManager.receiveIgnoreClosed(Event.dequeue(workflowInstance, resourceIds), instanceState.runState().counter()); }
@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 dequeue(WorkflowInstance workflowInstance, Set<String> resourceIds) { switch (state()) { case QUEUED: return state( PREPARE, data().builder() .retryDelayMillis(empty()) .resourceIds(resourceIds) .build()); default: throw illegalTransition("dequeue"); } }
static StateData zero() { return newBuilder().build(); } }
@Override public String info(WorkflowInstance workflowInstance, Message message) { return message.line(); }
static InstanceState create(WorkflowInstance workflowInstance, RunState runState) { return new AutoValue_InstanceState(workflowInstance, runState); } }
@Override public CompletableFuture<Void> receive(Event event) throws IsClosedException { return receive(event, Long.MAX_VALUE); }
static ResourceWithInstance create(String resource, InstanceState instanceState) { return new AutoValue_StateUtil_ResourceWithInstance(resource, instanceState); } }
static OutputHandler fanOutput(Iterable<OutputHandler> outputHandlers) { return new FanOutputHandler(outputHandlers); } }
private RunState state(State state) { return new AutoValue_RunState( workflowInstance(), state, timestamp(), data(), counter()); }
private boolean wantsPod(RunState runState) { switch (runState.state()) { // Be conservative and only let the pod go when we really know it is not needed anymore. case TERMINATED: case FAILED: case ERROR: case DONE: return false; default: return true; } }