Skip to content

Commit e503995

Browse files
authoredOct 14, 2024··
Fix nexus_task_execution_failed to include OperationError outcome in start requests (#1664)
1 parent 3671c99 commit e503995

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed
 

Diff for: ‎internal/internal_nexus_task_poller.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,12 @@ func (ntp *nexusTaskPoller) ProcessTask(task interface{}) error {
152152

153153
// Execution latency (in-SDK processing time).
154154
metricsHandler.Timer(metrics.NexusTaskExecutionLatency).Record(time.Since(executionStartTime))
155-
if err != nil || failure != nil {
155+
156+
// Increment failure in all forms of errors:
157+
// Internal error processing the task.
158+
// Failure from user handler.
159+
// Special case for the start response with operation error.
160+
if err != nil || failure != nil || res.Response.GetStartOperation().GetOperationError() != nil {
156161
metricsHandler.Counter(metrics.NexusTaskExecutionFailedCounter).Inc(1)
157162
}
158163

Diff for: ‎test/nexus_test.go

+21
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,13 @@ func TestNexusSyncOperation(t *testing.T) {
251251
require.ErrorAs(t, err, &unsuccessfulOperationErr)
252252
require.Equal(t, nexus.OperationStateFailed, unsuccessfulOperationErr.State)
253253
require.Equal(t, "fail", unsuccessfulOperationErr.Failure.Message)
254+
255+
require.EventuallyWithT(t, func(t *assert.CollectT) {
256+
tc.requireTimer(t, metrics.NexusTaskEndToEndLatency, service.Name, syncOp.Name())
257+
tc.requireTimer(t, metrics.NexusTaskScheduleToStartLatency, service.Name, syncOp.Name())
258+
tc.requireTimer(t, metrics.NexusTaskExecutionLatency, service.Name, syncOp.Name())
259+
tc.requireCounter(t, metrics.NexusTaskExecutionFailedCounter, service.Name, syncOp.Name())
260+
}, time.Second*3, time.Millisecond*100)
254261
})
255262

256263
t.Run("fmt-errorf", func(t *testing.T) {
@@ -259,6 +266,13 @@ func TestNexusSyncOperation(t *testing.T) {
259266
var unexpectedResponseErr *nexus.UnexpectedResponseError
260267
require.ErrorAs(t, err, &unexpectedResponseErr)
261268
require.Contains(t, unexpectedResponseErr.Message, `"500 Internal Server Error": arbitrary error message`)
269+
270+
require.EventuallyWithT(t, func(t *assert.CollectT) {
271+
tc.requireTimer(t, metrics.NexusTaskEndToEndLatency, service.Name, syncOp.Name())
272+
tc.requireTimer(t, metrics.NexusTaskScheduleToStartLatency, service.Name, syncOp.Name())
273+
tc.requireTimer(t, metrics.NexusTaskExecutionLatency, service.Name, syncOp.Name())
274+
tc.requireCounter(t, metrics.NexusTaskExecutionFailedCounter, service.Name, syncOp.Name())
275+
}, time.Second*3, time.Millisecond*100)
262276
})
263277

264278
t.Run("handlererror", func(t *testing.T) {
@@ -327,6 +341,13 @@ func TestNexusSyncOperation(t *testing.T) {
327341
require.ErrorAs(t, err, &unexpectedResponseErr)
328342
require.Equal(t, 500, unexpectedResponseErr.Response.StatusCode)
329343
require.Contains(t, unexpectedResponseErr.Message, "panic: panic requested")
344+
345+
require.EventuallyWithT(t, func(t *assert.CollectT) {
346+
tc.requireTimer(t, metrics.NexusTaskEndToEndLatency, service.Name, syncOp.Name())
347+
tc.requireTimer(t, metrics.NexusTaskScheduleToStartLatency, service.Name, syncOp.Name())
348+
tc.requireTimer(t, metrics.NexusTaskExecutionLatency, service.Name, syncOp.Name())
349+
tc.requireCounter(t, metrics.NexusTaskExecutionFailedCounter, service.Name, syncOp.Name())
350+
}, time.Second*3, time.Millisecond*100)
330351
})
331352
}
332353

0 commit comments

Comments
 (0)
Please sign in to comment.