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
3 changes: 2 additions & 1 deletion release-notes/current.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ new features: |

bug fixes: |
Fixed %ROUTE_KIND% operator to be lower-cased when used by clusterStatName in EnvoyProxy API.
Fixed maxAcceptPerSocketEvent being ignored in ClientTrafficPolicy
Fixed maxAcceptPerSocketEvent being ignored in ClientTrafficPolicy.
Fixed the topologyInjectorDisabled and the local cluster was not defined.
Fixed log formatting of improper key-value pairs to avoid DPANIC in controller-runtime logger.
Fixed handling of context-related transient errors to prevent incorrect state reconciliation and unintended behavior.

# Enhancements that improve performance.
performance improvements: |
Expand Down