workflowParams.put("output", workflow.getOutput()); workflowParams.put("status", workflow.getStatus()); workflowParams.put("workflowId", 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; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Workflow workflow = (Workflow) o; return getEndTime() == workflow.getEndTime() && getWorkflowVersion() == workflow.getWorkflowVersion() && getSchemaVersion() == workflow.getSchemaVersion() && getStatus() == workflow.getStatus() && Objects.equals(getWorkflowId(), workflow.getWorkflowId()) && Objects.equals(getParentWorkflowId(), workflow.getParentWorkflowId()) && Objects.equals(getParentWorkflowTaskId(), workflow.getParentWorkflowTaskId()) && Objects.equals(getTasks(), workflow.getTasks()) && Objects.equals(getInput(), workflow.getInput()) && Objects.equals(getOutput(), workflow.getOutput()) && Objects.equals(getWorkflowName(), workflow.getWorkflowName()) && Objects.equals(getCorrelationId(), workflow.getCorrelationId()) && Objects.equals(getReRunFromWorkflowId(), workflow.getReRunFromWorkflowId()) && Objects.equals(getReasonForIncompletion(), workflow.getReasonForIncompletion()) && Objects.equals(getEvent(), workflow.getEvent()) && Objects.equals(getTaskToDomain(), workflow.getTaskToDomain()) && Objects.equals(getFailedReferenceTaskNames(), workflow.getFailedReferenceTaskNames()) && Objects.equals(getExternalInputPayloadStoragePath(), workflow.getExternalInputPayloadStoragePath()) && Objects.equals(getExternalOutputPayloadStoragePath(), workflow.getExternalOutputPayloadStoragePath()) && Objects.equals(getWorkflowDefinition(), workflow.getWorkflowDefinition()); }
@SuppressWarnings("unchecked") @Test public void testUpdateWorkflowOutput() { Workflow workflow = new Workflow(); workflow.setWorkflowDefinition(new WorkflowDef()); deciderService.updateWorkflowOutput(workflow, null); assertNotNull(workflow.getOutput()); assertTrue(workflow.getOutput().isEmpty()); Task task = new Task(); Map<String, Object> taskOutput = new HashMap<>(); taskOutput.put("taskKey", "taskValue"); task.setOutputData(taskOutput); workflow.getTasks().add(task); WorkflowDef workflowDef = new WorkflowDef(); when(metadataDAO.get(anyString(), anyInt())).thenReturn(Optional.of(workflowDef)); deciderService.updateWorkflowOutput(workflow, null); assertNotNull(workflow.getOutput()); assertEquals("taskValue", workflow.getOutput().get("taskKey")); }
@SuppressWarnings("unchecked") @Test public void testUploadWorkflowPayload() throws IOException { AtomicInteger uploadCount = new AtomicInteger(0); InputStream stream = ExternalPayloadStorageUtilsTest.class.getResourceAsStream("/payload.json"); Map<String, Object> payload = objectMapper.readValue(stream, Map.class); when(externalPayloadStorage.getLocation(ExternalPayloadStorage.Operation.WRITE, ExternalPayloadStorage.PayloadType.WORKFLOW_OUTPUT, "")).thenReturn(location); doAnswer(invocation -> { uploadCount.incrementAndGet(); return null; }).when(externalPayloadStorage).upload(anyString(), any(), anyLong()); Workflow workflow = new Workflow(); workflow.setOutput(payload); externalPayloadStorageUtils.verifyAndUpload(workflow, ExternalPayloadStorage.PayloadType.WORKFLOW_OUTPUT); assertNull(workflow.getOutput()); assertEquals(1, uploadCount.get()); assertNotNull(workflow.getExternalOutputPayloadStoragePath()); }
Map<String, Object> wfmap = new HashMap<>(); wfmap.put("input", workflow.getInput()); wfmap.put("output", workflow.getOutput()); wfi.put("workflow", wfmap);
); workflow.getOutput().put("conductor.failure_workflow", failureWFId); } catch (Exception e) { LOGGER.error("Failed to start error workflow", e); workflow.getOutput().put("conductor.failure_workflow", "Error workflow " + failureWorkflow + " failed to start. reason: " + e.getMessage()); Monitors.recordWorkflowStartError(failureWorkflow, WorkflowContext.get().getClientApp());
assertNotNull(es); assertEquals(WorkflowStatus.COMPLETED, es.getStatus()); assertNotNull(es.getOutput()); assertTrue(es.getOutput().containsKey("o1")); assertTrue(es.getOutput().containsKey("o2")); assertEquals("sub workflow input param1", es.getOutput().get("o1")); assertEquals(uuid, es.getOutput().get("o2"));
@Override public int hashCode() { return Objects.hash( getStatus(), getEndTime(), getWorkflowId(), getParentWorkflowId(), getParentWorkflowTaskId(), getTasks(), getInput(), getOutput(), getWorkflowName(), getWorkflowVersion(), getCorrelationId(), getReRunFromWorkflowId(), getReasonForIncompletion(), getSchemaVersion(), getEvent(), getTaskToDomain(), getFailedReferenceTaskNames(), getWorkflowDefinition(), getExternalInputPayloadStoragePath(), getExternalOutputPayloadStoragePath() ); } }
workflow.setOutput(wf.getOutput()); workflow.setExternalOutputPayloadStoragePath(wf.getExternalOutputPayloadStoragePath()); executionDAOFacade.updateWorkflow(workflow);
to.putInput( pair.getKey(), toProto( pair.getValue() ) ); for (Map.Entry<String, Object> pair : from.getOutput().entrySet()) { to.putOutput( pair.getKey(), toProto( pair.getValue() ) );
assertEquals(1, junit_task_1.getRetryCount()); //Configured retries at the task definition level assertEquals(0, t1.getRetryCount()); //Actual retries done on the task assertEquals(true, es.getOutput().containsKey("o1")); assertEquals("p1 value", es.getOutput().get("o1")); assertEquals(es.getOutput().get("validationErrors").toString(), "There was a terminal error");
assertEquals(taskOutputPath, workflow.getTasks().get(0).getExternalOutputPayloadStoragePath()); assertEquals("task/input", workflow.getTasks().get(1).getExternalInputPayloadStoragePath()); assertTrue(workflow.getOutput().isEmpty()); assertNotNull(workflow.getExternalOutputPayloadStoragePath()); assertEquals("workflow/output", workflow.getExternalOutputPayloadStoragePath());
assertEquals("task/input", workflow.getTasks().get(1).getExternalInputPayloadStoragePath()); assertEquals("task/input", workflow.getTasks().get(2).getExternalInputPayloadStoragePath()); assertTrue(workflow.getOutput().isEmpty()); assertNotNull(workflow.getExternalOutputPayloadStoragePath()); assertEquals("workflow/output", workflow.getExternalOutputPayloadStoragePath());