if (workflow.getStatus().isTerminal()) {
@Override public String updateWorkflow(Workflow workflow) { try { workflow.setUpdateTime(System.currentTimeMillis()); if (workflow.getStatus().isTerminal()) { workflow.setEndTime(System.currentTimeMillis()); } List<Task> tasks = workflow.getTasks(); workflow.setTasks(new LinkedList<>()); String payload = toJson(workflow); recordCassandraDaoRequests("createWorkflow", "n/a", workflow.getWorkflowName()); recordCassandraDaoPayloadSize("createWorkflow", payload.length(), "n/a", workflow.getWorkflowName()); session.execute(updateWorkflowStatement.bind(payload, UUID.fromString(workflow.getWorkflowId()))); workflow.setTasks(tasks); return workflow.getWorkflowId(); } catch (Exception e) { Monitors.error(CLASS_NAME, "updateWorkflow"); String errorMsg = String.format("Failed to update workflow: %s", workflow.getWorkflowId()); LOGGER.error(errorMsg, e); throw new ApplicationException(ApplicationException.Code.BACKEND_ERROR, errorMsg); } }
private void terminate(final Workflow workflow, TerminateWorkflowException tw) { if (!workflow.getStatus().isTerminal()) { workflow.setStatus(tw.workflowStatus); } String failureWorkflow = workflow.getWorkflowDefinition().getFailureWorkflow(); if (failureWorkflow != null) { if (failureWorkflow.startsWith("$")) { String[] paramPathComponents = failureWorkflow.split("\\."); String name = paramPathComponents[2]; // name of the input parameter failureWorkflow = (String) workflow.getInput().get(name); } } if (tw.task != null) { executionDAOFacade.updateTask(tw.task); } terminateWorkflow(workflow, tw.getMessage(), failureWorkflow); }
Preconditions.checkNotNull(workflow, "workflow object cannot be null"); if (workflow.getStatus().isTerminal()) { workflow.setEndTime(System.currentTimeMillis()); if (workflow.getStatus().isTerminal()) { dynoClient.srem(nsKey(PENDING_WORKFLOWS, workflow.getWorkflowName()), workflow.getWorkflowId()); } else {
/** * @param workflowId the id of the workflow for which callbacks are to be reset * @throws ApplicationException if the workflow is in terminal state */ public void resetCallbacksForInProgressTasks(String workflowId) { Workflow workflow = executionDAOFacade.getWorkflowById(workflowId, true); if (workflow.getStatus().isTerminal()) { throw new ApplicationException(CONFLICT, "Workflow is in terminal state. Status =" + workflow.getStatus()); } // Get tasks that are in progress and have callbackAfterSeconds > 0 // and set the callbackAfterSeconds to 0; for (Task task : workflow.getTasks()) { if (task.getStatus().equals(IN_PROGRESS) && task.getCallbackAfterSeconds() > 0) { if (queueDAO.setOffsetTime(QueueUtils.getQueueName(task), task.getTaskId(), 0)) { task.setCallbackAfterSeconds(0); executionDAOFacade.updateTask(task); } } } }
@Override public boolean execute(Workflow workflow, Task task, WorkflowExecutor provider) { String workflowId = (String) task.getOutputData().get(SUB_WORKFLOW_ID); if (workflowId == null) { workflowId = (String) task.getInputData().get(SUB_WORKFLOW_ID); //Backward compatibility } if(StringUtils.isEmpty(workflowId)) { return false; } Workflow subWorkflow = provider.getWorkflow(workflowId, false); WorkflowStatus subWorkflowStatus = subWorkflow.getStatus(); if(!subWorkflowStatus.isTerminal()){ return false; } task.getOutputData().putAll(subWorkflow.getOutput()); if (subWorkflowStatus.isSuccessful()) { task.setStatus(Status.COMPLETED); } else { task.setReasonForIncompletion(subWorkflow.getReasonForIncompletion()); task.setStatus(Status.FAILED); } return true; }
private void terminate(final Workflow workflow, TerminateWorkflowException tw) { if (!workflow.getStatus().isTerminal()) { workflow.setStatus(tw.workflowStatus); } String failureWorkflow = workflow.getWorkflowDefinition().getFailureWorkflow(); if (failureWorkflow != null) { if (failureWorkflow.startsWith("$")) { String[] paramPathComponents = failureWorkflow.split("\\."); String name = paramPathComponents[2]; // name of the input parameter failureWorkflow = (String) workflow.getInput().get(name); } } if (tw.task != null) { executionDAOFacade.updateTask(tw.task); } terminateWorkflow(workflow, tw.getMessage(), failureWorkflow); }
/** * @throws ApplicationException */ public void pauseWorkflow(String workflowId) { WorkflowStatus status = WorkflowStatus.PAUSED; Workflow workflow = executionDAOFacade.getWorkflowById(workflowId, false); if (workflow.getStatus().isTerminal()) { throw new ApplicationException(CONFLICT, "Workflow id " + workflowId + " has ended, status cannot be updated."); } if (workflow.getStatus().equals(status)) { return; //Already paused! } workflow.setStatus(status); executionDAOFacade.updateWorkflow(workflow); }
if (workflowInstance.getStatus().isTerminal()) {
if (!workflow.getStatus().isTerminal()) { workflow.setStatus(WorkflowStatus.TERMINATED);
if (workflow.getStatus().isTerminal()) { LOGGER.warn("Workflow {} has been completed for {}/{}", workflow.getWorkflowId(), systemTask.getName(), task.getTaskId()); if (!task.getStatus().isTerminal()) {
if (workflow.getStatus().isTerminal()) { String msg = "Workflow has already been completed. Current status " + workflow.getStatus(); throw new ApplicationException(CONFLICT, msg);
Workflow workflow = workflowExecutionService.getExecutionStatus(id, true); assertNotNull(workflow); assertTrue(workflow.getReasonForIncompletion(), !workflow.getStatus().isTerminal()); assertEquals(1, workflow.getTasks().size()); Task task = workflow.getTasks().get(0);
if (!workflow.getStatus().isTerminal()) { throw new ApplicationException(CONFLICT, "Workflow is still running. status=" + workflow.getStatus());
if (!workflow.getStatus().isTerminal()) { throw new ApplicationException(CONFLICT, "Workflow is still running. status=" + workflow.getStatus());
Preconditions.checkNotNull(workflow, "workflow object cannot be null"); if (workflow.getStatus().isTerminal()) { workflow.setEndTime(System.currentTimeMillis()); if (workflow.getStatus().isTerminal()) { dynoClient.srem(nsKey(PENDING_WORKFLOWS, workflow.getWorkflowName()), workflow.getWorkflowId()); } else {
private String insertOrUpdateWorkflow(Workflow workflow, boolean update) { Preconditions.checkNotNull(workflow, "workflow object cannot be null"); boolean terminal = workflow.getStatus().isTerminal(); if (terminal) { workflow.setEndTime(System.currentTimeMillis()); } List<Task> tasks = workflow.getTasks(); workflow.setTasks(Lists.newLinkedList()); withTransaction(tx -> { if (!update) { addWorkflow(tx, workflow); addWorkflowDefToWorkflowMapping(tx, workflow); } else { updateWorkflow(tx, workflow); } if (terminal) { removePendingWorkflow(tx, workflow.getWorkflowName(), workflow.getWorkflowId()); } else { addPendingWorkflow(tx, workflow.getWorkflowName(), workflow.getWorkflowId()); } }); workflow.setTasks(tasks); return workflow.getWorkflowId(); }
@Override public boolean execute(Workflow workflow, Task task, WorkflowExecutor provider) { String workflowId = (String) task.getOutputData().get(SUB_WORKFLOW_ID); if (workflowId == null) { workflowId = (String) task.getInputData().get(SUB_WORKFLOW_ID); //Backward compatibility } if(StringUtils.isEmpty(workflowId)) { return false; } Workflow subWorkflow = provider.getWorkflow(workflowId, false); WorkflowStatus subWorkflowStatus = subWorkflow.getStatus(); if(!subWorkflowStatus.isTerminal()){ return false; } task.getOutputData().putAll(subWorkflow.getOutput()); if (subWorkflowStatus.isSuccessful()) { task.setStatus(Status.COMPLETED); } else { task.setReasonForIncompletion(subWorkflow.getReasonForIncompletion()); task.setStatus(Status.FAILED); } return true; }
/** * @param workflowId the id of the workflow for which callbacks are to be reset * @throws ApplicationException if the workflow is in terminal state */ public void resetCallbacksForInProgressTasks(String workflowId) { Workflow workflow = executionDAOFacade.getWorkflowById(workflowId, true); if (workflow.getStatus().isTerminal()) { throw new ApplicationException(CONFLICT, "Workflow is in terminal state. Status =" + workflow.getStatus()); } // Get tasks that are in progress and have callbackAfterSeconds > 0 // and set the callbackAfterSeconds to 0; for (Task task : workflow.getTasks()) { if (task.getStatus().equals(IN_PROGRESS) && task.getCallbackAfterSeconds() > 0) { if (queueDAO.setOffsetTime(QueueUtils.getQueueName(task), task.getTaskId(), 0)) { task.setCallbackAfterSeconds(0); executionDAOFacade.updateTask(task); } } } }
/** * @throws ApplicationException */ public void pauseWorkflow(String workflowId) { WorkflowStatus status = WorkflowStatus.PAUSED; Workflow workflow = executionDAOFacade.getWorkflowById(workflowId, false); if (workflow.getStatus().isTerminal()) { throw new ApplicationException(CONFLICT, "Workflow id " + workflowId + " has ended, status cannot be updated."); } if (workflow.getStatus().equals(status)) { return; //Already paused! } workflow.setStatus(status); executionDAOFacade.updateWorkflow(workflow); }