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

Commit

Permalink
Merge pull request #1954 from Netflix/jun-he-patch-3
Browse files Browse the repository at this point in the history
Avoid creating subworkflow object every time when handling subworkflow tasks.
  • Loading branch information
jun-he committed Nov 5, 2020
2 parents 185e436 + 63fc840 commit 35683b5
Showing 1 changed file with 8 additions and 11 deletions.
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);
}
}

0 comments on commit 35683b5

Please sign in to comment.