From 280fd1f685aba5e51d75e6d68317ef6c885df61e Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Thu, 17 Jul 2025 11:44:07 +0200 Subject: [PATCH] [platform] Fix stale workloads not being deleted (#1210) Workloads tracking an object undergoing deletion can be reconciled when the object is marked for deletion, but is not yet removed. After the object is deleted, there is no event to trigger another reconciliation of the workload and it might never get deleted until a global reconcile happens or the controller is restarted. This patch ensures they are requeued in the reconciliation loop. ## What this PR does ### Release note ```release-note [platform] Fix stale workloads not being deleted ``` ## Summary by CodeRabbit * **Improvements** * Added a delay before reprocessing items that are being deleted, resulting in more efficient handling of deletions. (cherry picked from commit 7abca1bdf5fb10872cce1c7bdecb104aa8796243) Signed-off-by: Timofei Larkin --- internal/controller/workload_controller.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/controller/workload_controller.go b/internal/controller/workload_controller.go index 3624e0e1..e3e85b01 100644 --- a/internal/controller/workload_controller.go +++ b/internal/controller/workload_controller.go @@ -3,6 +3,7 @@ package controller import ( "context" "strings" + "time" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -15,6 +16,10 @@ import ( cozyv1alpha1 "github.com/cozystack/cozystack/api/v1alpha1" ) +const ( + deletionRequeueDelay = 30 * time.Second +) + // WorkloadMonitorReconciler reconciles a WorkloadMonitor object type WorkloadReconciler struct { client.Client @@ -52,6 +57,9 @@ func (r *WorkloadReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c // found object, nothing to do if err == nil { + if !t.GetDeletionTimestamp().IsZero() { + return ctrl.Result{RequeueAfter: deletionRequeueDelay}, nil + } return ctrl.Result{}, nil }