diff --git a/pkg/controller.v1alpha3/suggestion/suggestion_controller.go b/pkg/controller.v1alpha3/suggestion/suggestion_controller.go index 571d8103bde..6564f5d485b 100644 --- a/pkg/controller.v1alpha3/suggestion/suggestion_controller.go +++ b/pkg/controller.v1alpha3/suggestion/suggestion_controller.go @@ -149,6 +149,11 @@ func (r *ReconcileSuggestion) Reconcile(request reconcile.Request) (reconcile.Re if err != nil { r.recorder.Eventf(instance, corev1.EventTypeWarning, consts.ReconcileErrorReason, err.Error()) + + // Try updating just the status condition when possible + // Status conditions might need to be updated even in error + // Ignore all other status fields else it will be inconsistent during retry + _ = r.updateStatusCondition(instance, oldS) logger.Error(err, "Reconcile Suggestion error") return reconcile.Result{}, err } diff --git a/pkg/controller.v1alpha3/suggestion/suggestion_controller_status.go b/pkg/controller.v1alpha3/suggestion/suggestion_controller_status.go index eea85e5ed75..0259070f9f1 100644 --- a/pkg/controller.v1alpha3/suggestion/suggestion_controller_status.go +++ b/pkg/controller.v1alpha3/suggestion/suggestion_controller_status.go @@ -25,3 +25,15 @@ func (r *ReconcileSuggestion) updateStatus(s *suggestionsv1alpha3.Suggestion, ol } return nil } + +func (r *ReconcileSuggestion) updateStatusCondition(s *suggestionsv1alpha3.Suggestion, oldS *suggestionsv1alpha3.Suggestion) error { + if !equality.Semantic.DeepEqual(s.Status.Conditions, oldS.Status.Conditions) { + newConditions := s.Status.Conditions + s.Status = oldS.Status + s.Status.Conditions = newConditions + if err := r.Status().Update(context.TODO(), s); err != nil { + return err + } + } + return nil +}