@Override public void cancel(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; } Workflow subWorkflow = provider.getWorkflow(workflowId, false); subWorkflow.setStatus(WorkflowStatus.TERMINATED); provider.terminateWorkflow(subWorkflow, "Parent workflow has been terminated with status " + workflow.getStatus(), null); }
task = executor.getTask(taskId); } else if (StringUtils.isNotEmpty(workflowId) && StringUtils.isNotEmpty(taskRefName)) { Workflow workflow = executor.getWorkflow(workflowId, true); if (workflow == null) { replaced.put("error", "No workflow found with ID: " + workflowId);
@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; }
@Test public void testDeciderUpdate() { metadataService.getWorkflowDef(LINEAR_WORKFLOW_T1_T2, 1); String correlationId = "unit_test_1" + UUID.randomUUID().toString(); Map<String, Object> input = new HashMap<String, Object>(); String inputParam1 = "p1 value"; input.put("param1", inputParam1); input.put("param2", "p2 value"); String wfid = startOrLoadWorkflowExecution(LINEAR_WORKFLOW_T1_T2, 1, correlationId, input, null, null); assertNotNull(wfid); Workflow workflow = workflowExecutor.getWorkflow(wfid, false); long updated1 = workflow.getUpdateTime(); Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); workflowExecutor.decide(wfid); workflow = workflowExecutor.getWorkflow(wfid, false); long updated2 = workflow.getUpdateTime(); assertEquals(updated1, updated2); Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); workflowExecutor.terminateWorkflow(wfid, "done"); workflow = workflowExecutor.getWorkflow(wfid, false); updated2 = workflow.getUpdateTime(); assertTrue("updated1[" + updated1 + "] >? updated2[" + updated2 + "]", updated2 > updated1); }
@Test public void testCompleteTask() throws Exception { TaskDetails taskDetails = new TaskDetails(); taskDetails.setWorkflowId("${workflowId}"); taskDetails.setTaskRefName("testTask"); Action action = new Action(); action.setAction(Type.complete_task); action.setComplete_task(taskDetails); Object payload = new ObjectMapper().readValue("{\"workflowId\":\"workflow_1\"}", Object.class); Task task = new Task(); task.setReferenceTaskName("testTask"); Workflow workflow = new Workflow(); workflow.getTasks().add(task); when(workflowExecutor.getWorkflow(eq("workflow_1"), anyBoolean())).thenReturn(workflow); actionProcessor.execute(action, payload, "testEvent", "testMessage"); ArgumentCaptor<TaskResult> argumentCaptor = ArgumentCaptor.forClass(TaskResult.class); verify(workflowExecutor).updateTask(argumentCaptor.capture()); assertEquals(Status.COMPLETED, argumentCaptor.getValue().getStatus()); assertEquals("testMessage", argumentCaptor.getValue().getOutputData().get("conductor.event.messageId")); assertEquals("testEvent", argumentCaptor.getValue().getOutputData().get("conductor.event.name")); assertEquals("workflow_1", argumentCaptor.getValue().getOutputData().get("workflowId")); assertEquals("testTask", argumentCaptor.getValue().getOutputData().get("taskRefName")); }
Workflow workflow = new Workflow(); workflow.setTasks(Collections.singletonList(task)); when(workflowExecutor.getWorkflow(completeTaskAction.getComplete_task().getWorkflowId(), true)).thenReturn(workflow);
for (int i = 0; i < 10; i++) { String id = ids[i]; Workflow workflow = workflowExecutor.getWorkflow(id, true); assertNotNull(workflow); assertEquals(1, workflow.getTasks().size());
String workflowId = startOrLoadWorkflowExecution(DYNAMIC_FORK_JOIN_WF, 1, "dynfanouttest1", workflowInput, null, null); System.out.println("testDynamicForkJoin.wfid=" + workflowId); Workflow workflow = workflowExecutor.getWorkflow(workflowId, true); assertNotNull(workflow); assertEquals(workflow.getReasonForIncompletion(), RUNNING, workflow.getStatus()); workflow = workflowExecutor.getWorkflow(workflowId, true); assertNotNull(workflow); assertEquals("Found " + workflow.getTasks().stream().map(Task::getTaskType).collect(Collectors.toList()), 5, workflow.getTasks().size());
Workflow workflow = workflowExecutor.getWorkflow(workflowId, true); assertNotNull(workflow);
assertNotNull(workflowId); Workflow workflow = workflowExecutor.getWorkflow(workflowId, false); assertNotNull(workflow); workflow = workflowExecutionService.getExecutionStatus(workflowId, true);
Workflow workflow = workflowExecutor.getWorkflow(workflowId, true); assertNotNull(workflow); assertEquals(1, workflow.getTasks().size());
assertNotNull(workflowId); Workflow workflow = workflowExecutor.getWorkflow(workflowId, false); assertNotNull(workflow);
Workflow workflow = workflowExecutor.getWorkflow(workflowId, true); assertNotNull(workflow);
@Override public void cancel(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; } Workflow subWorkflow = provider.getWorkflow(workflowId, false); subWorkflow.setStatus(WorkflowStatus.TERMINATED); provider.terminateWorkflow(subWorkflow, "Parent workflow has been terminated with status " + workflow.getStatus(), null); }
task = executor.getTask(taskId); } else if (StringUtils.isNotEmpty(workflowId) && StringUtils.isNotEmpty(taskRefName)) { Workflow workflow = executor.getWorkflow(workflowId, true); if (workflow == null) { replaced.put("error", "No workflow found with ID: " + workflowId);
@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; }