Skip to content
4 changes: 3 additions & 1 deletion internal/provider/kubernetes/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,9 @@ func isTransientError(err error) bool {
kerrors.IsServiceUnavailable(err) ||
kerrors.IsStoreReadError(err) ||
kerrors.IsInternalError(err) ||
kerrors.IsUnexpectedServerError(err)
kerrors.IsUnexpectedServerError(err) ||
errors.Is(err, context.Canceled) ||
errors.Is(err, context.DeadlineExceeded)
}

// Reconcile handles reconciling all resources in a single call. Any resource event should enqueue the
Expand Down
10 changes: 10 additions & 0 deletions internal/provider/kubernetes/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1603,6 +1603,12 @@ func TestIsTransientError(t *testing.T) {
serviceUnavailableErr := kerrors.NewServiceUnavailable("service unavailable")
badRequestErr := kerrors.NewBadRequest("bad request")

// new test errors for context
canceledErr := context.Canceled
deadlineExceededErr := context.DeadlineExceeded
wrappedCanceledErr := fmt.Errorf("wrapped: %w", context.Canceled)
wrappedDeadlineExceededErr := fmt.Errorf("wrapped: %w", context.DeadlineExceeded)

testCases := []struct {
name string
err error
Expand All @@ -1614,6 +1620,10 @@ func TestIsTransientError(t *testing.T) {
{"ServiceUnavailable", serviceUnavailableErr, true},
{"BadRequest", badRequestErr, false},
{"NilError", nil, false},
{"ContextCanceled", canceledErr, true},
{"ContextDeadlineExceeded", deadlineExceededErr, true},
{"WrappedContextCanceled", wrappedCanceledErr, true},
{"WrappedContextDeadlineExceeded", wrappedDeadlineExceededErr, true},
}

for _, tc := range testCases {
Expand Down