diff --git a/pkg/reconciler/managed/api.go b/pkg/reconciler/managed/api.go index 59f52307e..669e4f2d2 100644 --- a/pkg/reconciler/managed/api.go +++ b/pkg/reconciler/managed/api.go @@ -212,7 +212,9 @@ func NewRetryingCriticalAnnotationUpdater(c client.Client) *RetryingCriticalAnno // case of a conflict error. func (u *RetryingCriticalAnnotationUpdater) UpdateCriticalAnnotations(ctx context.Context, o client.Object) error { a := o.GetAnnotations() - err := retry.OnError(retry.DefaultRetry, resource.IsAPIError, func() error { + err := retry.OnError(retry.DefaultRetry, func(err error) bool { + return !errors.Is(err, context.Canceled) + }, func() error { err := u.client.Update(ctx, o) if kerrors.IsConflict(err) { if getErr := u.client.Get(ctx, client.ObjectKeyFromObject(o), o); getErr != nil { diff --git a/pkg/reconciler/managed/reconciler.go b/pkg/reconciler/managed/reconciler.go index 37dc9507c..dbeb8b2f9 100644 --- a/pkg/reconciler/managed/reconciler.go +++ b/pkg/reconciler/managed/reconciler.go @@ -1051,10 +1051,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu // issue we'll be requeued implicitly when we update our status with // the new error condition. If not, we requeue explicitly, which will trigger backoff. log.Debug("Cannot create external resource", "error", err) - if kerrors.IsConflict(err) { - return reconcile.Result{Requeue: true}, nil + if !kerrors.IsConflict(err) { + record.Event(managed, event.Warning(reasonCannotCreate, err)) } - record.Event(managed, event.Warning(reasonCannotCreate, err)) // We handle annotations specially here because it's // critical that they are persisted to the API server.