From 38f76f6ad0b6b81f91c07fe246789453edfda4e6 Mon Sep 17 00:00:00 2001 From: Timofei Larkin Date: Wed, 16 Jul 2025 23:32:33 +0300 Subject: [PATCH] [platform] Fix stale workloads not being deleted 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. 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 }