Skip to content

Commit 62c3ae1

Browse files
committed
fix: avoid reconciling ended leases
Signed-off-by: Benny Zlotnik <bzlotnik@redhat.com> Assited-by: claude-opus-4.6
1 parent 26aee22 commit 62c3ae1

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

controller/internal/controller/lease_controller.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ import (
3434
ctrl "sigs.k8s.io/controller-runtime"
3535
"sigs.k8s.io/controller-runtime/pkg/client"
3636
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
37+
"sigs.k8s.io/controller-runtime/pkg/event"
3738
"sigs.k8s.io/controller-runtime/pkg/log"
39+
"sigs.k8s.io/controller-runtime/pkg/predicate"
3840
)
3941

4042
// LeaseReconciler reconciles a Lease object
@@ -77,6 +79,10 @@ func (r *LeaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl
7779
)
7880
}
7981

82+
if lease.Status.Ended && isLeaseEnded(&lease) {
83+
return ctrl.Result{}, nil
84+
}
85+
8086
var result ctrl.Result
8187
if err := r.reconcileStatusExporterRef(ctx, &result, &lease); err != nil {
8288
return result, err
@@ -585,9 +591,36 @@ func filterOutOfflineExporters(approvedExporters []ApprovedExporter) []ApprovedE
585591
return onlineExporters
586592
}
587593

594+
// isLeaseEnded checks whether a lease object carries the ended label.
595+
func isLeaseEnded(obj client.Object) bool {
596+
if v, ok := obj.GetLabels()[string(jumpstarterdevv1alpha1.LeaseLabelEnded)]; ok {
597+
return v == jumpstarterdevv1alpha1.LeaseLabelEndedValue
598+
}
599+
return false
600+
}
601+
588602
// SetupWithManager sets up the controller with the Manager.
589603
func (r *LeaseReconciler) SetupWithManager(mgr ctrl.Manager) error {
604+
// Skip ended leases: they are immutable and never need further reconciliation.
605+
// The Update funnel still admits the transition *into* ended so the label
606+
// and status update written by the reconciler itself is not swallowed.
607+
skipEnded := predicate.Funcs{
608+
CreateFunc: func(e event.CreateEvent) bool {
609+
return !isLeaseEnded(e.Object)
610+
},
611+
UpdateFunc: func(e event.UpdateEvent) bool {
612+
return !isLeaseEnded(e.ObjectNew)
613+
},
614+
DeleteFunc: func(e event.DeleteEvent) bool {
615+
return true
616+
},
617+
GenericFunc: func(e event.GenericEvent) bool {
618+
return !isLeaseEnded(e.Object)
619+
},
620+
}
621+
590622
return ctrl.NewControllerManagedBy(mgr).
591623
For(&jumpstarterdevv1alpha1.Lease{}).
624+
WithEventFilter(skipEnded).
592625
Complete(r)
593626
}

0 commit comments

Comments
 (0)