-
Notifications
You must be signed in to change notification settings - Fork 680
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Bug] correctly set task execution phase for terminal array node #5136
Changes from all commits
344bde3
059bec4
0e0d7c4
6cc769f
8e4f4fa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -202,40 +202,56 @@ func createNodeExecutionContext(dataStore *storage.DataStore, eventRecorder inte | |||||
|
||||||
func TestAbort(t *testing.T) { | ||||||
ctx := context.Background() | ||||||
scope := promutils.NewTestScope() | ||||||
dataStore, err := storage.NewDataStore(&storage.Config{ | ||||||
Type: storage.TypeMemory, | ||||||
}, scope) | ||||||
assert.NoError(t, err) | ||||||
|
||||||
nodeHandler := &mocks.NodeHandler{} | ||||||
nodeHandler.OnAbortMatch(mock.Anything, mock.Anything, mock.Anything).Return(nil) | ||||||
nodeHandler.OnFinalizeMatch(mock.Anything, mock.Anything, mock.Anything).Return(nil) | ||||||
|
||||||
// initialize ArrayNodeHandler | ||||||
arrayNodeHandler, err := createArrayNodeHandler(ctx, t, nodeHandler, dataStore, scope) | ||||||
assert.NoError(t, err) | ||||||
|
||||||
tests := []struct { | ||||||
name string | ||||||
inputMap map[string][]int64 | ||||||
subNodePhases []v1alpha1.NodePhase | ||||||
subNodeTaskPhases []core.Phase | ||||||
expectedExternalResourcePhases []idlcore.TaskExecution_Phase | ||||||
arrayNodeState v1alpha1.ArrayNodePhase | ||||||
expectedTaskExecutionPhase idlcore.TaskExecution_Phase | ||||||
}{ | ||||||
{ | ||||||
name: "Success", | ||||||
name: "Aborted after failed", | ||||||
inputMap: map[string][]int64{ | ||||||
"foo": []int64{0, 1, 2}, | ||||||
}, | ||||||
subNodePhases: []v1alpha1.NodePhase{v1alpha1.NodePhaseSucceeded, v1alpha1.NodePhaseRunning, v1alpha1.NodePhaseNotYetStarted}, | ||||||
subNodeTaskPhases: []core.Phase{core.PhaseSuccess, core.PhaseRunning, core.PhaseUndefined}, | ||||||
Comment on lines
+220
to
+221
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Consider using constants for test phases
Consider using constants or enums for the node phases and task phases arrays to improve readability and maintainability. The array literals Code suggestionCheck the AI-generated fix before applying
Code Review Run #5e4929 Is this a valid issue, or was it incorrectly flagged by the Agent?
|
||||||
expectedExternalResourcePhases: []idlcore.TaskExecution_Phase{idlcore.TaskExecution_ABORTED}, | ||||||
arrayNodeState: v1alpha1.ArrayNodePhaseFailing, | ||||||
expectedTaskExecutionPhase: idlcore.TaskExecution_FAILED, | ||||||
}, | ||||||
{ | ||||||
name: "Aborted while running", | ||||||
inputMap: map[string][]int64{ | ||||||
"foo": []int64{0, 1, 2}, | ||||||
}, | ||||||
subNodePhases: []v1alpha1.NodePhase{v1alpha1.NodePhaseSucceeded, v1alpha1.NodePhaseRunning, v1alpha1.NodePhaseNotYetStarted}, | ||||||
subNodeTaskPhases: []core.Phase{core.PhaseSuccess, core.PhaseRunning, core.PhaseUndefined}, | ||||||
expectedExternalResourcePhases: []idlcore.TaskExecution_Phase{idlcore.TaskExecution_ABORTED}, | ||||||
arrayNodeState: v1alpha1.ArrayNodePhaseExecuting, | ||||||
expectedTaskExecutionPhase: idlcore.TaskExecution_ABORTED, | ||||||
}, | ||||||
} | ||||||
|
||||||
for _, test := range tests { | ||||||
t.Run(test.name, func(t *testing.T) { | ||||||
scope := promutils.NewTestScope() | ||||||
dataStore, err := storage.NewDataStore(&storage.Config{ | ||||||
Type: storage.TypeMemory, | ||||||
}, scope) | ||||||
assert.NoError(t, err) | ||||||
|
||||||
nodeHandler := &mocks.NodeHandler{} | ||||||
nodeHandler.OnAbortMatch(mock.Anything, mock.Anything, mock.Anything).Return(nil) | ||||||
nodeHandler.OnFinalizeMatch(mock.Anything, mock.Anything, mock.Anything).Return(nil) | ||||||
|
||||||
// initialize ArrayNodeHandler | ||||||
arrayNodeHandler, err := createArrayNodeHandler(ctx, t, nodeHandler, dataStore, scope) | ||||||
assert.NoError(t, err) | ||||||
|
||||||
// initialize universal variables | ||||||
literalMap := convertMapToArrayLiterals(test.inputMap) | ||||||
|
||||||
|
@@ -250,7 +266,7 @@ func TestAbort(t *testing.T) { | |||||
|
||||||
// initialize ArrayNodeState | ||||||
arrayNodeState := &handler.ArrayNodeState{ | ||||||
Phase: v1alpha1.ArrayNodePhaseFailing, | ||||||
Phase: test.arrayNodeState, | ||||||
} | ||||||
for _, item := range []struct { | ||||||
arrayReference *bitarray.CompactArray | ||||||
|
@@ -279,12 +295,13 @@ func TestAbort(t *testing.T) { | |||||
nCtx := createNodeExecutionContext(dataStore, eventRecorder, nil, literalMap, &arrayNodeSpec, arrayNodeState, 0, workflowMaxParallelism) | ||||||
|
||||||
// evaluate node | ||||||
err := arrayNodeHandler.Abort(ctx, nCtx, "foo") | ||||||
err = arrayNodeHandler.Abort(ctx, nCtx, "foo") | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Consider declaring err variable explicitly
Consider declaring Code suggestionCheck the AI-generated fix before applying
Suggested change
Code Review Run #5e4929 Is this a valid issue, or was it incorrectly flagged by the Agent?
|
||||||
assert.NoError(t, err) | ||||||
|
||||||
nodeHandler.AssertNumberOfCalls(t, "Abort", len(test.expectedExternalResourcePhases)) | ||||||
if len(test.expectedExternalResourcePhases) > 0 { | ||||||
assert.Equal(t, 1, len(eventRecorder.taskExecutionEvents)) | ||||||
assert.Equal(t, test.expectedTaskExecutionPhase, eventRecorder.taskExecutionEvents[0].GetPhase()) | ||||||
|
||||||
externalResources := eventRecorder.taskExecutionEvents[0].GetMetadata().GetExternalResources() | ||||||
assert.Equal(t, len(test.expectedExternalResourcePhases), len(externalResources)) | ||||||
|
@@ -1296,6 +1313,9 @@ func TestHandleArrayNodePhaseSucceeding(t *testing.T) { | |||||
assert.Equal(t, int64(*outputValue), collection.GetLiterals()[i].GetScalar().GetPrimitive().GetInteger()) | ||||||
} | ||||||
} | ||||||
|
||||||
assert.Equal(t, 1, len(eventRecorder.taskExecutionEvents)) | ||||||
assert.Equal(t, idlcore.TaskExecution_SUCCEEDED, eventRecorder.taskExecutionEvents[0].GetPhase()) | ||||||
}) | ||||||
} | ||||||
} | ||||||
|
@@ -1374,6 +1394,9 @@ func TestHandleArrayNodePhaseFailing(t *testing.T) { | |||||
assert.Equal(t, test.expectedArrayNodePhase, arrayNodeState.Phase) | ||||||
assert.Equal(t, test.expectedTransitionPhase, transition.Info().GetPhase()) | ||||||
nodeHandler.AssertNumberOfCalls(t, "Abort", test.expectedAbortCalls) | ||||||
|
||||||
assert.Equal(t, 1, len(eventRecorder.taskExecutionEvents)) | ||||||
assert.Equal(t, idlcore.TaskExecution_FAILED, eventRecorder.taskExecutionEvents[0].GetPhase()) | ||||||
}) | ||||||
} | ||||||
} | ||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider handling the error case more gracefully by logging the error and continuing execution rather than returning early. The current implementation may cause unnecessary aborts.
Code suggestion
Code Review Run #e4c107
Is this a valid issue, or was it incorrectly flagged by the Agent?