diff --git a/go.mod b/go.mod index 22c764a69e1..c51fc45e595 100644 --- a/go.mod +++ b/go.mod @@ -51,8 +51,8 @@ require ( k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 knative.dev/hack v0.0.0-20251117013754-67a5b048bc27 knative.dev/hack/schema v0.0.0-20251117013754-67a5b048bc27 - knative.dev/pkg v0.0.0-20251118173915-745990698d3c - knative.dev/reconciler-test v0.0.0-20251117013655-1e6de0a87d9a + knative.dev/pkg v0.0.0-20251119125415-ab67eb7f8660 + knative.dev/reconciler-test v0.0.0-20251119135518-4b85657eb33d sigs.k8s.io/randfill v1.0.0 sigs.k8s.io/yaml v1.6.0 ) diff --git a/go.sum b/go.sum index eec6e0aef12..dc3be97a07f 100644 --- a/go.sum +++ b/go.sum @@ -1096,10 +1096,10 @@ knative.dev/hack v0.0.0-20251117013754-67a5b048bc27 h1:yPzDTKOFtSYHxgXB2N7+nWT/3 knative.dev/hack v0.0.0-20251117013754-67a5b048bc27/go.mod h1:L5RzHgbvam0u8QFHfzCX6MKxu/a/gIGEdaRBqNiVbl0= knative.dev/hack/schema v0.0.0-20251117013754-67a5b048bc27 h1:Yg8ck1BY+xNFSCqjk5DBNptDFl4PaxS9qaFUaiYyTSw= knative.dev/hack/schema v0.0.0-20251117013754-67a5b048bc27/go.mod h1:KkibP1IazICP5ClxwN5D26LDSygsqbYnVGuGFTsHNOQ= -knative.dev/pkg v0.0.0-20251118173915-745990698d3c h1:khjCe035kZgoJqE9HwQTEjS/WZCKRpNPlNkbh6Yr+Gc= -knative.dev/pkg v0.0.0-20251118173915-745990698d3c/go.mod h1:iVOYfi7BiB0jQEEiW3NUfBHVOjc0QIbdOqdNs47YEoI= -knative.dev/reconciler-test v0.0.0-20251117013655-1e6de0a87d9a h1:F7BVAA4jO1WoMufJJzrpzxMp+ZP6llJCGcO0M40RhYk= -knative.dev/reconciler-test v0.0.0-20251117013655-1e6de0a87d9a/go.mod h1:F5QJ23fZUKPctfsIwtXVjNz8C33vEdh04cbQNe8WzX8= +knative.dev/pkg v0.0.0-20251119125415-ab67eb7f8660 h1:4lJPD8CTsOZ6cXFYkm3LtZ8bruSY9OQpyIFS6S5NPGQ= +knative.dev/pkg v0.0.0-20251119125415-ab67eb7f8660/go.mod h1:iVOYfi7BiB0jQEEiW3NUfBHVOjc0QIbdOqdNs47YEoI= +knative.dev/reconciler-test v0.0.0-20251119135518-4b85657eb33d h1:bhL+FISn+rD730S83z9jOT6H2Jw4SeTURbkp9m5wlS4= +knative.dev/reconciler-test v0.0.0-20251119135518-4b85657eb33d/go.mod h1:7ZE1xYMvYBBNqqWFAr9vU/cYnGFhKc9h1dAS3ZNVMG4= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/client/injection/reconciler/eventing/v1/broker/reconciler.go b/pkg/client/injection/reconciler/eventing/v1/broker/reconciler.go index bba8b691178..06eca78cd4f 100644 --- a/pkg/client/injection/reconciler/eventing/v1/broker/reconciler.go +++ b/pkg/client/injection/reconciler/eventing/v1/broker/reconciler.go @@ -328,6 +328,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -439,8 +441,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -492,8 +496,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/eventing/v1/trigger/reconciler.go b/pkg/client/injection/reconciler/eventing/v1/trigger/reconciler.go index 4dbb65a7670..f9ed704d5e5 100644 --- a/pkg/client/injection/reconciler/eventing/v1/trigger/reconciler.go +++ b/pkg/client/injection/reconciler/eventing/v1/trigger/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/eventing/v1alpha1/eventpolicy/reconciler.go b/pkg/client/injection/reconciler/eventing/v1alpha1/eventpolicy/reconciler.go index fdc4c972222..31bacf91a16 100644 --- a/pkg/client/injection/reconciler/eventing/v1alpha1/eventpolicy/reconciler.go +++ b/pkg/client/injection/reconciler/eventing/v1alpha1/eventpolicy/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/eventing/v1alpha1/eventtransform/reconciler.go b/pkg/client/injection/reconciler/eventing/v1alpha1/eventtransform/reconciler.go index f3c0fe6156a..f51a24cc432 100644 --- a/pkg/client/injection/reconciler/eventing/v1alpha1/eventtransform/reconciler.go +++ b/pkg/client/injection/reconciler/eventing/v1alpha1/eventtransform/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/eventing/v1alpha1/requestreply/reconciler.go b/pkg/client/injection/reconciler/eventing/v1alpha1/requestreply/reconciler.go index f472f9b6afb..c94a28e01b7 100644 --- a/pkg/client/injection/reconciler/eventing/v1alpha1/requestreply/reconciler.go +++ b/pkg/client/injection/reconciler/eventing/v1alpha1/requestreply/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/eventing/v1beta1/eventtype/reconciler.go b/pkg/client/injection/reconciler/eventing/v1beta1/eventtype/reconciler.go index e3c2f048adb..99f6a08f78e 100644 --- a/pkg/client/injection/reconciler/eventing/v1beta1/eventtype/reconciler.go +++ b/pkg/client/injection/reconciler/eventing/v1beta1/eventtype/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/eventing/v1beta2/eventtype/reconciler.go b/pkg/client/injection/reconciler/eventing/v1beta2/eventtype/reconciler.go index 048d1d22fd3..ec52f6e43a8 100644 --- a/pkg/client/injection/reconciler/eventing/v1beta2/eventtype/reconciler.go +++ b/pkg/client/injection/reconciler/eventing/v1beta2/eventtype/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/eventing/v1beta3/eventtype/reconciler.go b/pkg/client/injection/reconciler/eventing/v1beta3/eventtype/reconciler.go index 4e4c556954d..7885986ac07 100644 --- a/pkg/client/injection/reconciler/eventing/v1beta3/eventtype/reconciler.go +++ b/pkg/client/injection/reconciler/eventing/v1beta3/eventtype/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/flows/v1/parallel/reconciler.go b/pkg/client/injection/reconciler/flows/v1/parallel/reconciler.go index 9a3c809aedb..83bc135addc 100644 --- a/pkg/client/injection/reconciler/flows/v1/parallel/reconciler.go +++ b/pkg/client/injection/reconciler/flows/v1/parallel/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/flows/v1/sequence/reconciler.go b/pkg/client/injection/reconciler/flows/v1/sequence/reconciler.go index 5799d18bab9..98b82635599 100644 --- a/pkg/client/injection/reconciler/flows/v1/sequence/reconciler.go +++ b/pkg/client/injection/reconciler/flows/v1/sequence/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/messaging/v1/channel/reconciler.go b/pkg/client/injection/reconciler/messaging/v1/channel/reconciler.go index 25955d809c5..6fa853e7010 100644 --- a/pkg/client/injection/reconciler/messaging/v1/channel/reconciler.go +++ b/pkg/client/injection/reconciler/messaging/v1/channel/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/messaging/v1/inmemorychannel/reconciler.go b/pkg/client/injection/reconciler/messaging/v1/inmemorychannel/reconciler.go index 195dc36450a..b246ae61566 100644 --- a/pkg/client/injection/reconciler/messaging/v1/inmemorychannel/reconciler.go +++ b/pkg/client/injection/reconciler/messaging/v1/inmemorychannel/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/messaging/v1/subscription/reconciler.go b/pkg/client/injection/reconciler/messaging/v1/subscription/reconciler.go index ab64d374c1f..0ffc819e83e 100644 --- a/pkg/client/injection/reconciler/messaging/v1/subscription/reconciler.go +++ b/pkg/client/injection/reconciler/messaging/v1/subscription/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/sinks/v1alpha1/integrationsink/reconciler.go b/pkg/client/injection/reconciler/sinks/v1alpha1/integrationsink/reconciler.go index b52f97c05a9..1b19f81c13c 100644 --- a/pkg/client/injection/reconciler/sinks/v1alpha1/integrationsink/reconciler.go +++ b/pkg/client/injection/reconciler/sinks/v1alpha1/integrationsink/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/sinks/v1alpha1/jobsink/reconciler.go b/pkg/client/injection/reconciler/sinks/v1alpha1/jobsink/reconciler.go index fb51afa31f9..9b41b16e7b3 100644 --- a/pkg/client/injection/reconciler/sinks/v1alpha1/jobsink/reconciler.go +++ b/pkg/client/injection/reconciler/sinks/v1alpha1/jobsink/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/sources/v1/apiserversource/reconciler.go b/pkg/client/injection/reconciler/sources/v1/apiserversource/reconciler.go index f111783894b..cf4502784cb 100644 --- a/pkg/client/injection/reconciler/sources/v1/apiserversource/reconciler.go +++ b/pkg/client/injection/reconciler/sources/v1/apiserversource/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/sources/v1/containersource/reconciler.go b/pkg/client/injection/reconciler/sources/v1/containersource/reconciler.go index 698c49dfbf3..258beb36d44 100644 --- a/pkg/client/injection/reconciler/sources/v1/containersource/reconciler.go +++ b/pkg/client/injection/reconciler/sources/v1/containersource/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/sources/v1/pingsource/reconciler.go b/pkg/client/injection/reconciler/sources/v1/pingsource/reconciler.go index 4c369e0ff55..b792a9f4055 100644 --- a/pkg/client/injection/reconciler/sources/v1/pingsource/reconciler.go +++ b/pkg/client/injection/reconciler/sources/v1/pingsource/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/sources/v1alpha1/integrationsource/reconciler.go b/pkg/client/injection/reconciler/sources/v1alpha1/integrationsource/reconciler.go index aeb60a1cd21..f1328502d24 100644 --- a/pkg/client/injection/reconciler/sources/v1alpha1/integrationsource/reconciler.go +++ b/pkg/client/injection/reconciler/sources/v1alpha1/integrationsource/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/pkg/client/injection/reconciler/sources/v1beta2/pingsource/reconciler.go b/pkg/client/injection/reconciler/sources/v1beta2/pingsource/reconciler.go index 387cc2b61fe..5421b2e78ad 100644 --- a/pkg/client/injection/reconciler/sources/v1beta2/pingsource/reconciler.go +++ b/pkg/client/injection/reconciler/sources/v1beta2/pingsource/reconciler.go @@ -317,6 +317,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, v1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -428,8 +430,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -481,8 +485,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, v1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, v1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/vendor/knative.dev/pkg/client/injection/apiextensions/reconciler/apiextensions/v1/customresourcedefinition/reconciler.go b/vendor/knative.dev/pkg/client/injection/apiextensions/reconciler/apiextensions/v1/customresourcedefinition/reconciler.go index f28289ba077..972eccc1a47 100644 --- a/vendor/knative.dev/pkg/client/injection/apiextensions/reconciler/apiextensions/v1/customresourcedefinition/reconciler.go +++ b/vendor/knative.dev/pkg/client/injection/apiextensions/reconciler/apiextensions/v1/customresourcedefinition/reconciler.go @@ -309,6 +309,8 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // This is a wrapped error, don't emit an event. } else if ok, _ := controller.IsRequeueKey(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if errors.IsConflict(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, corev1.EventTypeWarning, "InternalError", reconcileEvent.Error()) @@ -418,8 +420,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx context.Con updated, err := patcher.Patch(ctx, resource.Name, types.ApplyPatchType, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(resource, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -471,8 +475,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx context.Context, resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, types.MergePatchType, patch, metav1.PatchOptions{}) if err != nil { - r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !errors.IsConflict(err) { + r.Recorder.Eventf(existing, corev1.EventTypeWarning, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/reconciler/reconciler_reconciler.go b/vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/reconciler/reconciler_reconciler.go index 40ee904f674..b7c11b5513c 100644 --- a/vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/reconciler/reconciler_reconciler.go +++ b/vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/reconciler/reconciler_reconciler.go @@ -134,6 +134,10 @@ func (g *reconcilerReconcilerGenerator) GenerateType(c *generator.Context, t *ty Package: "k8s.io/apimachinery/pkg/api/errors", Name: "IsNotFound", }), + "apierrsIsConflict": c.Universe.Function(types.Name{ + Package: "k8s.io/apimachinery/pkg/api/errors", + Name: "IsConflict", + }), "metav1GetOptions": c.Universe.Function(types.Name{ Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "GetOptions", @@ -573,6 +577,8 @@ func (r *reconcilerImpl) Reconcile(ctx {{.contextContext|raw}}, key string) erro // This is a wrapped error, don't emit an event. } else if ok, _ := {{ .controllerIsRequeueKey|raw }}(reconcileEvent); ok { // This is a wrapped error, don't emit an event. + } else if {{ .apierrsIsConflict|raw }}(reconcileEvent) { + // Conflict errors are expected, don't emit an event. } else { logger.Errorw("Returned an error", zap.Error(reconcileEvent)) r.Recorder.Event(resource, {{.corev1EventTypeWarning|raw}}, "InternalError", reconcileEvent.Error()) @@ -698,8 +704,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredServerSideApply(ctx {{.contextC updated, err := patcher.Patch(ctx, resource.Name, {{.typesApplyPatchType|raw}}, patch, patchOpts) if err != nil { - r.Recorder.Eventf(resource, {{.corev1EventTypeWarning|raw}}, "FinalizerUpdateFailed", - "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + if !{{ .apierrsIsConflict|raw }}(err) { + r.Recorder.Eventf(resource, {{.corev1EventTypeWarning|raw}}, "FinalizerUpdateFailed", + "Failed to update finalizers for %q via server-side apply: %v", resource.Name, err) + } } else { r.Recorder.Eventf(updated, {{.corev1EventTypeNormal|raw}}, "FinalizerUpdate", "Updated finalizers for %q via server-side apply", resource.GetName()) @@ -754,8 +762,10 @@ func (r *reconcilerImpl) updateFinalizersFilteredMergePatch(ctx {{.contextContex resourceName := resource.Name updated, err := patcher.Patch(ctx, resourceName, {{.typesMergePatchType|raw}}, patch, {{.metav1PatchOptions|raw}}{}) if err != nil { - r.Recorder.Eventf(existing, {{.corev1EventTypeWarning|raw}}, "FinalizerUpdateFailed", - "Failed to update finalizers for %q: %v", resourceName, err) + if !{{ .apierrsIsConflict|raw }}(err) { + r.Recorder.Eventf(existing, {{.corev1EventTypeWarning|raw}}, "FinalizerUpdateFailed", + "Failed to update finalizers for %q: %v", resourceName, err) + } } else { r.Recorder.Eventf(updated, {{.corev1EventTypeNormal|raw}}, "FinalizerUpdate", "Updated %q finalizers", resource.GetName()) diff --git a/vendor/knative.dev/pkg/controller/controller.go b/vendor/knative.dev/pkg/controller/controller.go index 6091f55fd9b..184462d0db1 100644 --- a/vendor/knative.dev/pkg/controller/controller.go +++ b/vendor/knative.dev/pkg/controller/controller.go @@ -28,6 +28,7 @@ import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" + apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" @@ -532,23 +533,31 @@ func (c *Impl) processNextWorkItem() bool { } func (c *Impl) handleErr(logger *zap.SugaredLogger, err error, key types.NamespacedName, startTime time.Time) { - if IsSkipKey(err) { + // Check if we should skip this key or if the queue is shutting down. + // We check shutdown here since controller Run might have exited by now + // (since while this item was being processed, queue.Len==0). + if IsSkipKey(err) || c.workQueue.ShuttingDown() { c.workQueue.Forget(key) return } + if ok, delay := IsRequeueKey(err); ok { c.workQueue.AddAfter(key, delay) logger.Debugf("Requeuing key %s (by request) after %v (depth: %d)", safeKey(key), delay, c.workQueue.Len()) return } + // Conflict errors are expected, requeue to retry + if apierrors.IsConflict(err) { + logger.Debugw("Reconcile conflict", zap.Duration("duration", time.Since(startTime))) + c.workQueue.AddRateLimited(key) + return + } + logger.Errorw("Reconcile error", zap.Duration("duration", time.Since(startTime)), zap.Error(err)) // Re-queue the key if it's a transient error. - // We want to check that the queue is shutting down here - // since controller Run might have exited by now (since while this item was - // being processed, queue.Len==0). - if !IsPermanentError(err) && !c.workQueue.ShuttingDown() { + if !IsPermanentError(err) { c.workQueue.AddRateLimited(key) logger.Debugf("Requeuing key %s due to non-permanent error (depth: %d)", safeKey(key), c.workQueue.Len()) return diff --git a/vendor/modules.txt b/vendor/modules.txt index 6796cb4521e..a2883db85c3 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1223,7 +1223,7 @@ knative.dev/hack/schema/commands knative.dev/hack/schema/docs knative.dev/hack/schema/registry knative.dev/hack/schema/schema -# knative.dev/pkg v0.0.0-20251118173915-745990698d3c +# knative.dev/pkg v0.0.0-20251119125415-ab67eb7f8660 ## explicit; go 1.24.0 knative.dev/pkg/apiextensions/storageversion knative.dev/pkg/apiextensions/storageversion/cmd/migrate @@ -1379,7 +1379,7 @@ knative.dev/pkg/webhook/resourcesemantics knative.dev/pkg/webhook/resourcesemantics/conversion knative.dev/pkg/webhook/resourcesemantics/defaulting knative.dev/pkg/webhook/resourcesemantics/validation -# knative.dev/reconciler-test v0.0.0-20251117013655-1e6de0a87d9a +# knative.dev/reconciler-test v0.0.0-20251119135518-4b85657eb33d ## explicit; go 1.24.0 knative.dev/reconciler-test/cmd/eventshub knative.dev/reconciler-test/pkg/environment