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()); }
@VisibleForTesting static String stateInfo(RunState state) { switch (state.state()) { case NEW: case PREPARE: case ERROR: case DONE: return format("tries:%d", state.data().tries()); case SUBMITTED: case RUNNING: case FAILED: return format("tries:%d execId:%s", state.data().tries(), state.data().executionId()); case TERMINATED: return format("tries:%d execId:%s exitCode:%s", state.data().tries(), state.data().executionId(), state.data().lastExit().map( String::valueOf).orElse("-")); case QUEUED: return format("tries:%d delayMs:%s", state.data().tries(), state.data().retryDelayMillis()); default: return ""; } } }
@Override public void printStates(RunStateDataPayload runStateDataPayload) { System.out.println(String.format(" %-20s %-12s %-47s %-7s %s", "WORKFLOW INSTANCE", "STATE", "EXECUTION ID", "TRIES", "PREVIOUS EXECUTION MESSAGE")); CliUtil.groupStates(runStateDataPayload.activeStates()).entrySet().forEach(entry -> { System.out.println(); System.out.println(String.format("%s %s", colored(CYAN, entry.getKey().componentId()), colored(BLUE, entry.getKey().id()))); entry.getValue().forEach(runStateData -> { final StateData stateData = runStateData.stateData(); final Ansi ansiState = getAnsiForState(runStateData); final Message lastMessage = stateData.message().orElse(Message.create(Message.MessageLevel.UNKNOWN, "No info")); final Ansi ansiMessage = colored(messageColor(lastMessage.level()), lastMessage.line()); System.out.println(String.format(" %-20s %-20s %-47s %-7d %s", runStateData.workflowInstance().parameter(), ansiState, stateData.executionId().orElse("<no-execution-id>"), stateData.tries(), ansiMessage)); }); }); }
@Override public void printStates(RunStateDataPayload runStateDataPayload) { SortedMap<WorkflowId, SortedSet<RunStateDataPayload.RunStateData>> groupedStates = CliUtil.groupStates(runStateDataPayload.activeStates()); groupedStates.forEach((workflowId, value) -> value.forEach(RunStateData -> { final StateData stateData = RunStateData.stateData(); System.out.println(String.format( "%s %s %s %s %s %d %s", workflowId.componentId(), workflowId.id(), RunStateData.workflowInstance().parameter(), RunStateData.state(), stateData.executionId().orElse("<no-execution-id>"), stateData.tries(), stateData.message().map(Message::line).orElse("No info") )); })); }
@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 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"); } }
.set(PROPERTY_STATE, state.state().toString()) .set(PROPERTY_STATE_TIMESTAMP, state.timestamp()) .set(PROPERTY_STATE_TRIES, state.data().tries()) .set(PROPERTY_STATE_CONSECUTIVE_FAILURES, state.data().consecutiveFailures()) .set(PROPERTY_STATE_RETRY_COST, state.data().retryCost())