From 00e58207d6f00c6f64c2ac2449af8d6b349bb57e Mon Sep 17 00:00:00 2001 From: Daniel Lohse Date: Fri, 26 Sep 2025 15:08:14 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Respect=20a=20requeue=20after=20if=20it?= =?UTF-8?q?=E2=80=99s=20set=20in=20case=20the=20error=20wraps=20`ErrQuiet`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Lohse --- reconcilers/resource.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reconcilers/resource.go b/reconcilers/resource.go index 8aa40f2..67ac764 100644 --- a/reconcilers/resource.go +++ b/reconcilers/resource.go @@ -298,6 +298,9 @@ func (r *ResourceReconciler[T]) Reconcile(ctx context.Context, req Request) (Res result, err := r.AfterReconcile(ctx, req, AggregateResults(beforeResult, reconcileResult), err) if errors.Is(err, ErrQuiet) { // suppress error, while forcing a requeue + if result.RequeueAfter > 0 { // honor requeue after returned by reconciler + return result, nil + } return Result{Requeue: true}, nil } return result, err From 662d8695252de8c8ec95da3279e296dfaf1c217d Mon Sep 17 00:00:00 2001 From: Daniel Lohse Date: Fri, 26 Sep 2025 15:09:57 +0200 Subject: [PATCH 2/2] Honor the requeue after in the ResourceReconciler after updating the status Signed-off-by: Daniel Lohse --- reconcilers/resource.go | 6 +++++- reconcilers/resource_test.go | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/reconcilers/resource.go b/reconcilers/resource.go index 67ac764..a18a29b 100644 --- a/reconcilers/resource.go +++ b/reconcilers/resource.go @@ -384,7 +384,11 @@ func (r *ResourceReconciler[T]) reconcileOuter(ctx context.Context, req Request) } // Suppress result. Let the informer discover the resource mutation and requeue. Requeueing - // now may result in re-processing a stale cache. + // now may result in re-processing a stale cache. Honor the requeue after if it was set. + if result.RequeueAfter > 0 { + return result, nil + } + return Result{}, nil } diff --git a/reconcilers/resource_test.go b/reconcilers/resource_test.go index d545614..c5062e0 100644 --- a/reconcilers/resource_test.go +++ b/reconcilers/resource_test.go @@ -964,7 +964,7 @@ func TestResourceReconciler(t *testing.T) { resource.Status.Fields = map[string]string{} } resource.Status.Fields["Reconciler"] = "ran" - // the result is ignored because the status is updated + // the result is honored return reconcilers.Result{RequeueAfter: 10}, nil }, } @@ -974,6 +974,9 @@ func TestResourceReconciler(t *testing.T) { rtesting.NewEvent(givenResource, scheme, corev1.EventTypeNormal, "StatusUpdated", `Updated status`), }, + ExpectedResult: reconcile.Result{ + RequeueAfter: 10, + }, ExpectStatusUpdates: []client.Object{ givenResource.StatusDie(func(d *dies.TestResourceStatusDie) { d.AddField("Reconciler", "ran")