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

Commit b843af4

Browse files
fix subworkflow output during repair (#3232)
1 parent a2a64e6 commit b843af4

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

core/src/main/java/com/netflix/conductor/core/execution/tasks/SubWorkflow.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ private void updateTaskStatus(WorkflowModel subworkflow, TaskModel task) {
205205
task.setExternalOutputPayloadStoragePath(
206206
subworkflow.getExternalOutputPayloadStoragePath());
207207
} else {
208-
task.getOutputData().putAll(subworkflow.getOutput());
208+
task.addOutput(subworkflow.getOutput());
209209
}
210210
if (!status.isSuccessful()) {
211211
task.setReasonForIncompletion(

core/src/main/java/com/netflix/conductor/core/reconciliation/WorkflowRepairService.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,12 @@ boolean verifyAndRepairTask(TaskModel task) {
143143
&& task.getStatus() == TaskModel.Status.IN_PROGRESS) {
144144
WorkflowModel subWorkflow = executionDAO.getWorkflow(task.getSubWorkflowId(), false);
145145
if (subWorkflow.getStatus().isTerminal()) {
146-
repairSubWorkflowTask(task, subWorkflow.getStatus());
146+
LOGGER.info(
147+
"Repairing sub workflow task {} for sub workflow {} in workflow {}",
148+
task.getTaskId(),
149+
task.getSubWorkflowId(),
150+
task.getWorkflowInstanceId());
151+
repairSubWorkflowTask(task, subWorkflow);
147152
return true;
148153
}
149154
}
@@ -165,8 +170,8 @@ private boolean verifyAndRepairWorkflow(String workflowId) {
165170
return false;
166171
}
167172

168-
private void repairSubWorkflowTask(TaskModel task, WorkflowModel.Status subWorkflowStatus) {
169-
switch (subWorkflowStatus) {
173+
private void repairSubWorkflowTask(TaskModel task, WorkflowModel subWorkflow) {
174+
switch (subWorkflow.getStatus()) {
170175
case COMPLETED:
171176
task.setStatus(TaskModel.Status.COMPLETED);
172177
break;
@@ -180,6 +185,7 @@ private void repairSubWorkflowTask(TaskModel task, WorkflowModel.Status subWorkf
180185
task.setStatus(TaskModel.Status.TIMED_OUT);
181186
break;
182187
}
188+
task.addOutput(subWorkflow.getOutput());
183189
executionDAO.updateTask(task);
184190
}
185191
}

core/src/test/java/com/netflix/conductor/core/reconciliation/TestWorkflowRepairService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package com.netflix.conductor.core.reconciliation;
1414

1515
import java.time.Duration;
16+
import java.util.HashMap;
1617
import java.util.Map;
1718

1819
import org.junit.Before;
@@ -239,10 +240,14 @@ public void assertInProgressSubWorkflowSystemTasksAreCheckedAndRepaired() {
239240
task.setTaskId(taskId);
240241
task.setCallbackAfterSeconds(60);
241242
task.setSubWorkflowId(subWorkflowId);
243+
Map<String, Object> outputMap = new HashMap<>();
244+
outputMap.put("subWorkflowId", subWorkflowId);
245+
task.setOutputData(outputMap);
242246

243247
WorkflowModel subWorkflow = new WorkflowModel();
244248
subWorkflow.setWorkflowId(subWorkflowId);
245249
subWorkflow.setStatus(WorkflowModel.Status.TERMINATED);
250+
subWorkflow.setOutput(Map.of("k1", "v1", "k2", "v2"));
246251

247252
when(executionDAO.getWorkflow(subWorkflowId, false)).thenReturn(subWorkflow);
248253

@@ -256,5 +261,9 @@ public void assertInProgressSubWorkflowSystemTasksAreCheckedAndRepaired() {
256261
assertEquals(taskId, argumentCaptor.getValue().getTaskId());
257262
assertEquals(subWorkflowId, argumentCaptor.getValue().getSubWorkflowId());
258263
assertEquals(TaskModel.Status.CANCELED, argumentCaptor.getValue().getStatus());
264+
assertNotNull(argumentCaptor.getValue().getOutputData());
265+
assertEquals(subWorkflowId, argumentCaptor.getValue().getOutputData().get("subWorkflowId"));
266+
assertEquals("v1", argumentCaptor.getValue().getOutputData().get("k1"));
267+
assertEquals("v2", argumentCaptor.getValue().getOutputData().get("k2"));
259268
}
260269
}

0 commit comments

Comments
 (0)