From 7adaaa1f00b98d500e9223c5c344e4aedeff8f0d Mon Sep 17 00:00:00 2001 From: Martin Sivak Date: Tue, 10 Mar 2026 15:41:25 +0100 Subject: [PATCH 1/2] WIP: Test: requeue PerformanceStatus update when write fails --- .../controller/performanceprofile_controller.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/performanceprofile/controller/performanceprofile_controller.go b/pkg/performanceprofile/controller/performanceprofile_controller.go index cb1fc5c235..89ca73486d 100644 --- a/pkg/performanceprofile/controller/performanceprofile_controller.go +++ b/pkg/performanceprofile/controller/performanceprofile_controller.go @@ -63,6 +63,9 @@ import ( const ( openshiftFinalizer = "foreground-deletion" hypershiftFinalizer = "hypershift.openshift.io/foreground-deletion" + + // statusUpdateRequeueAfter is the delay before retrying reconcile after a failure to update performance profile status. + statusUpdateRequeueAfter = 30 * time.Second ) // PerformanceProfileReconciler reconciles a PerformanceProfile object @@ -502,13 +505,14 @@ func (r *PerformanceProfileReconciler) Reconcile(ctx context.Context, req ctrl.R conditions := status.GetDegradedConditions(status.ConditionReasonComponentsCreationFailed, err.Error()) if err := r.StatusWriter.Update(ctx, instance, conditions); err != nil { klog.Errorf("failed to update performance profile %q status: %v", instance.GetName(), err) - return reconcile.Result{}, err + return reconcile.Result{RequeueAfter: statusUpdateRequeueAfter}, err } return reconcile.Result{}, err } err = r.StatusWriter.UpdateOwnedConditions(ctx, instance) if err != nil { klog.Errorf("failed to update performance profile %q status: %v", instance.GetName(), err) + return ctrl.Result{RequeueAfter: statusUpdateRequeueAfter}, err } return ctrl.Result{}, nil } @@ -538,7 +542,7 @@ func (r *PerformanceProfileReconciler) getAndValidateMCP(ctx context.Context, in conditions := status.GetDegradedConditions(status.ConditionFailedToFindMachineConfigPool, err.Error()) if err := r.StatusWriter.Update(ctx, profile, conditions); err != nil { klog.Errorf("failed to update performance profile %q status: %v", profile.GetName(), err) - return nil, &reconcile.Result{}, err + return nil, &reconcile.Result{RequeueAfter: statusUpdateRequeueAfter}, err } return nil, &reconcile.Result{}, nil } @@ -547,7 +551,7 @@ func (r *PerformanceProfileReconciler) getAndValidateMCP(ctx context.Context, in conditions := status.GetDegradedConditions(status.ConditionBadMachineConfigLabels, err.Error()) if err := r.StatusWriter.Update(ctx, profile, conditions); err != nil { klog.Errorf("failed to update performance profile %q status: %v", profile.GetName(), err) - return nil, &reconcile.Result{}, err + return nil, &reconcile.Result{RequeueAfter: statusUpdateRequeueAfter}, err } return nil, &reconcile.Result{}, nil } From 166b3ad650e1a8bda3241bfe8203dd862269254b Mon Sep 17 00:00:00 2001 From: Martin Sivak Date: Tue, 14 Apr 2026 11:34:58 +0200 Subject: [PATCH 2/2] Do not return err when scheduling controller requeue --- .../controller/performanceprofile_controller.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/performanceprofile/controller/performanceprofile_controller.go b/pkg/performanceprofile/controller/performanceprofile_controller.go index 89ca73486d..f1324e2038 100644 --- a/pkg/performanceprofile/controller/performanceprofile_controller.go +++ b/pkg/performanceprofile/controller/performanceprofile_controller.go @@ -505,14 +505,14 @@ func (r *PerformanceProfileReconciler) Reconcile(ctx context.Context, req ctrl.R conditions := status.GetDegradedConditions(status.ConditionReasonComponentsCreationFailed, err.Error()) if err := r.StatusWriter.Update(ctx, instance, conditions); err != nil { klog.Errorf("failed to update performance profile %q status: %v", instance.GetName(), err) - return reconcile.Result{RequeueAfter: statusUpdateRequeueAfter}, err + return reconcile.Result{RequeueAfter: statusUpdateRequeueAfter}, nil } return reconcile.Result{}, err } err = r.StatusWriter.UpdateOwnedConditions(ctx, instance) if err != nil { klog.Errorf("failed to update performance profile %q status: %v", instance.GetName(), err) - return ctrl.Result{RequeueAfter: statusUpdateRequeueAfter}, err + return ctrl.Result{RequeueAfter: statusUpdateRequeueAfter}, nil } return ctrl.Result{}, nil } @@ -542,7 +542,7 @@ func (r *PerformanceProfileReconciler) getAndValidateMCP(ctx context.Context, in conditions := status.GetDegradedConditions(status.ConditionFailedToFindMachineConfigPool, err.Error()) if err := r.StatusWriter.Update(ctx, profile, conditions); err != nil { klog.Errorf("failed to update performance profile %q status: %v", profile.GetName(), err) - return nil, &reconcile.Result{RequeueAfter: statusUpdateRequeueAfter}, err + return nil, &reconcile.Result{RequeueAfter: statusUpdateRequeueAfter}, nil } return nil, &reconcile.Result{}, nil } @@ -551,7 +551,7 @@ func (r *PerformanceProfileReconciler) getAndValidateMCP(ctx context.Context, in conditions := status.GetDegradedConditions(status.ConditionBadMachineConfigLabels, err.Error()) if err := r.StatusWriter.Update(ctx, profile, conditions); err != nil { klog.Errorf("failed to update performance profile %q status: %v", profile.GetName(), err) - return nil, &reconcile.Result{RequeueAfter: statusUpdateRequeueAfter}, err + return nil, &reconcile.Result{RequeueAfter: statusUpdateRequeueAfter}, nil } return nil, &reconcile.Result{}, nil }