Skip to content
This repository has been archived by the owner on Dec 13, 2023. It is now read-only.

Avoid creating subworkflow object every time #1954

Merged
merged 1 commit into from
Nov 5, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1686,15 +1686,7 @@ protected boolean updateParentWorkflow(Task subWorkflowTask, Workflow subWorkflo
} else if (subWorkflowTask.getStatus().equals(IN_PROGRESS)) {
LOGGER.debug("Subworkflow: {} is {}, updating parent workflow: {}",
subWorkflow.getWorkflowId(), subWorkflow.getStatus().name(), parentWorkflow.getWorkflowId());
SubWorkflow subWorkflowSystemTask = new SubWorkflow();
subWorkflowSystemTask.execute(subWorkflow, subWorkflowTask, this);
// Keep Subworkflow task's data consistent with Subworkflow's.
if (subWorkflowTask.getStatus().isTerminal() && subWorkflowTask.getExternalOutputPayloadStoragePath() != null && !subWorkflowTask.getOutputData().isEmpty()) {
Map<String, Object> parentWorkflowTaskOutputData = subWorkflowTask.getOutputData();
deciderService.populateTaskData(subWorkflowTask);
subWorkflowTask.getOutputData().putAll(parentWorkflowTaskOutputData);
deciderService.externalizeTaskData(subWorkflowTask);
}
executeSubworkflowTaskAndSyncData(subWorkflow, subWorkflowTask);
return true;
} else {
LOGGER.warn("Unable to evaluate parent workflow: {} in status: {}, and subworkflow: {} in status: {}",
Expand Down Expand Up @@ -1733,15 +1725,20 @@ protected boolean updateParentWorkflow(Task subWorkflowTask, Workflow subWorkflo

@VisibleForTesting
void updateParentWorkflowTask(Workflow subWorkflow) {
SubWorkflow subWorkflowSystemTask = new SubWorkflow();
Task subWorkflowTask = executionDAOFacade.getTaskById(subWorkflow.getParentWorkflowTaskId());
executeSubworkflowTaskAndSyncData(subWorkflow, subWorkflowTask);
executionDAOFacade.updateTask(subWorkflowTask);
}

private void executeSubworkflowTaskAndSyncData(Workflow subWorkflow, Task subWorkflowTask) {
WorkflowSystemTask subWorkflowSystemTask = WorkflowSystemTask.get(SubWorkflow.NAME);
subWorkflowSystemTask.execute(subWorkflow, subWorkflowTask, this);
// Keep Subworkflow task's data consistent with Subworkflow's.
if (subWorkflowTask.getStatus().isTerminal() && subWorkflowTask.getExternalOutputPayloadStoragePath() != null && !subWorkflowTask.getOutputData().isEmpty()) {
Map<String, Object> parentWorkflowTaskOutputData = subWorkflowTask.getOutputData();
deciderService.populateTaskData(subWorkflowTask);
subWorkflowTask.getOutputData().putAll(parentWorkflowTaskOutputData);
deciderService.externalizeTaskData(subWorkflowTask);
}
executionDAOFacade.updateTask(subWorkflowTask);
}
}