diff --git a/pkg/controllers/nodeclaim/disruption/consolidation.go b/pkg/controllers/nodeclaim/disruption/consolidation.go index 1e993129fd..2f70f76525 100644 --- a/pkg/controllers/nodeclaim/disruption/consolidation.go +++ b/pkg/controllers/nodeclaim/disruption/consolidation.go @@ -69,9 +69,9 @@ func (c *Consolidation) Reconcile(ctx context.Context, nodePool *v1.NodePool, no return reconcile.Result{RequeueAfter: consolidatableTime.Sub(c.clock.Now())}, nil } - // 6. Otherwise, add the consolidatable status condition - nodeClaim.StatusConditions().SetTrue(v1.ConditionTypeConsolidatable) + // 3. Otherwise, add the consolidatable status condition if not already set if !hasConsolidatableCondition { + nodeClaim.StatusConditions().SetTrue(v1.ConditionTypeConsolidatable) log.FromContext(ctx).V(1).Info("marking consolidatable") } return reconcile.Result{}, nil diff --git a/pkg/controllers/nodeclaim/disruption/controller.go b/pkg/controllers/nodeclaim/disruption/controller.go index 6d81e37dae..6c52fa19aa 100644 --- a/pkg/controllers/nodeclaim/disruption/controller.go +++ b/pkg/controllers/nodeclaim/disruption/controller.go @@ -18,6 +18,7 @@ package disruption import ( "context" + "time" "go.uber.org/multierr" corev1 "k8s.io/api/core/v1" @@ -110,6 +111,10 @@ func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1.NodeClaim) (re } return reconcile.Result{}, client.IgnoreNotFound(err) } + // We sleep here after a patch operation since we want to ensure that we are able to read our own writes + // so that we avoid duplicating metrics and log lines due to quick re-queues from our node watcher + // USE CAUTION when determining whether to increase this timeout or remove this line + time.Sleep(time.Second) } if errs != nil { return reconcile.Result{}, errs