Skip to content

Commit c8ae4c0

Browse files
authored
Use TypedControllerManagedby in clusterqueue controller (#4650)
Signed-off-by: Yuki Iwai <[email protected]>
1 parent 69a9538 commit c8ae4c0

File tree

1 file changed

+37
-48
lines changed

1 file changed

+37
-48
lines changed

pkg/controller/core/clusterqueue_controller.go

+37-48
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,13 @@ import (
3535
"k8s.io/utils/clock"
3636
"k8s.io/utils/ptr"
3737
ctrl "sigs.k8s.io/controller-runtime"
38+
"sigs.k8s.io/controller-runtime/pkg/builder"
3839
"sigs.k8s.io/controller-runtime/pkg/client"
3940
"sigs.k8s.io/controller-runtime/pkg/controller"
4041
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
4142
"sigs.k8s.io/controller-runtime/pkg/event"
4243
"sigs.k8s.io/controller-runtime/pkg/handler"
44+
"sigs.k8s.io/controller-runtime/pkg/predicate"
4345
"sigs.k8s.io/controller-runtime/pkg/reconcile"
4446
"sigs.k8s.io/controller-runtime/pkg/source"
4547

@@ -79,6 +81,9 @@ type ClusterQueueReconciler struct {
7981
clock clock.Clock
8082
}
8183

84+
var _ reconcile.Reconciler = (*ClusterQueueReconciler)(nil)
85+
var _ predicate.TypedPredicate[*kueue.ClusterQueue] = (*ClusterQueueReconciler)(nil)
86+
8287
type ClusterQueueReconcilerOptions struct {
8388
Watchers []ClusterQueueUpdateWatcher
8489
ReportResourceMetrics bool
@@ -311,87 +316,66 @@ func (r *ClusterQueueReconciler) NotifyAdmissionCheckUpdate(oldAc, newAc *kueue.
311316
// Event handlers return true to signal the controller to reconcile the
312317
// ClusterQueue associated with the event.
313318

314-
func (r *ClusterQueueReconciler) Create(e event.CreateEvent) bool {
315-
cq, match := e.Object.(*kueue.ClusterQueue)
316-
if !match {
317-
// No need to interact with the cache for other objects.
318-
return true
319-
}
320-
defer r.notifyWatchers(nil, cq)
319+
func (r *ClusterQueueReconciler) Create(e event.TypedCreateEvent[*kueue.ClusterQueue]) bool {
320+
defer r.notifyWatchers(nil, e.Object)
321321

322-
log := r.log.WithValues("clusterQueue", klog.KObj(cq))
322+
log := r.log.WithValues("clusterQueue", klog.KObj(e.Object))
323323
log.V(2).Info("ClusterQueue create event")
324324
ctx := ctrl.LoggerInto(context.Background(), log)
325-
if err := r.cache.AddClusterQueue(ctx, cq); err != nil {
325+
if err := r.cache.AddClusterQueue(ctx, e.Object); err != nil {
326326
log.Error(err, "Failed to add clusterQueue to cache")
327327
}
328328

329-
if err := r.qManager.AddClusterQueue(ctx, cq); err != nil {
329+
if err := r.qManager.AddClusterQueue(ctx, e.Object); err != nil {
330330
log.Error(err, "Failed to add clusterQueue to queue manager")
331331
}
332332

333333
if r.reportResourceMetrics {
334-
recordResourceMetrics(cq)
334+
recordResourceMetrics(e.Object)
335335
}
336336

337337
return true
338338
}
339339

340-
func (r *ClusterQueueReconciler) Delete(e event.DeleteEvent) bool {
341-
cq, match := e.Object.(*kueue.ClusterQueue)
342-
if !match {
343-
// No need to interact with the cache for other objects.
344-
return true
345-
}
346-
defer r.notifyWatchers(cq, nil)
340+
func (r *ClusterQueueReconciler) Delete(e event.TypedDeleteEvent[*kueue.ClusterQueue]) bool {
341+
defer r.notifyWatchers(e.Object, nil)
347342

348-
r.log.V(2).Info("ClusterQueue delete event", "clusterQueue", klog.KObj(cq))
349-
r.cache.DeleteClusterQueue(cq)
350-
r.qManager.DeleteClusterQueue(cq)
351-
r.qManager.DeleteSnapshot(cq)
343+
r.log.V(2).Info("ClusterQueue delete event", "clusterQueue", klog.KObj(e.Object))
344+
r.cache.DeleteClusterQueue(e.Object)
345+
r.qManager.DeleteClusterQueue(e.Object)
346+
r.qManager.DeleteSnapshot(e.Object)
352347

353-
metrics.ClearClusterQueueResourceMetrics(cq.Name)
354-
r.log.V(2).Info("Cleared resource metrics for deleted ClusterQueue.", "clusterQueue", klog.KObj(cq))
348+
metrics.ClearClusterQueueResourceMetrics(e.Object.Name)
349+
r.log.V(2).Info("Cleared resource metrics for deleted ClusterQueue.", "clusterQueue", klog.KObj(e.Object))
355350

356351
return true
357352
}
358353

359-
func (r *ClusterQueueReconciler) Update(e event.UpdateEvent) bool {
360-
oldCq, match := e.ObjectOld.(*kueue.ClusterQueue)
361-
if !match {
362-
// No need to interact with the cache for other objects.
363-
return true
364-
}
365-
newCq, match := e.ObjectNew.(*kueue.ClusterQueue)
366-
if !match {
367-
// No need to interact with the cache for other objects.
368-
return true
369-
}
370-
371-
log := r.log.WithValues("clusterQueue", klog.KObj(newCq))
354+
func (r *ClusterQueueReconciler) Update(e event.TypedUpdateEvent[*kueue.ClusterQueue]) bool {
355+
log := r.log.WithValues("clusterQueue", klog.KObj(e.ObjectNew))
372356
log.V(2).Info("ClusterQueue update event")
373357

374-
if newCq.DeletionTimestamp != nil {
358+
if e.ObjectNew.DeletionTimestamp != nil {
375359
return true
376360
}
377-
defer r.notifyWatchers(oldCq, newCq)
378-
specUpdated := !equality.Semantic.DeepEqual(oldCq.Spec, newCq.Spec)
361+
defer r.notifyWatchers(e.ObjectOld, e.ObjectNew)
362+
specUpdated := !equality.Semantic.DeepEqual(e.ObjectOld.Spec, e.ObjectNew.Spec)
379363

380-
if err := r.cache.UpdateClusterQueue(newCq); err != nil {
364+
if err := r.cache.UpdateClusterQueue(e.ObjectNew); err != nil {
381365
log.Error(err, "Failed to update clusterQueue in cache")
382366
}
383-
if err := r.qManager.UpdateClusterQueue(context.Background(), newCq, specUpdated); err != nil {
367+
if err := r.qManager.UpdateClusterQueue(context.Background(), e.ObjectNew, specUpdated); err != nil {
384368
log.Error(err, "Failed to update clusterQueue in queue manager")
385369
}
386370

387371
if r.reportResourceMetrics {
388-
updateResourceMetrics(oldCq, newCq)
372+
updateResourceMetrics(e.ObjectOld, e.ObjectNew)
389373
}
390374
return true
391375
}
392376

393-
func (r *ClusterQueueReconciler) Generic(e event.GenericEvent) bool {
394-
r.log.V(2).Info("Got generic event", "obj", klog.KObj(e.Object), "kind", e.Object.GetObjectKind().GroupVersionKind())
377+
func (r *ClusterQueueReconciler) Generic(e event.TypedGenericEvent[*kueue.ClusterQueue]) bool {
378+
r.log.V(3).Info("Got ClusterQueue generic event", "clusterQueue", klog.KObj(e.Object))
395379
return true
396380
}
397381

@@ -595,13 +579,18 @@ func (r *ClusterQueueReconciler) SetupWithManager(mgr ctrl.Manager, cfg *config.
595579
snapHandler := cqSnapshotHandler{
596580
queueVisibilityUpdateInterval: r.queueVisibilityUpdateInterval,
597581
}
598-
return ctrl.NewControllerManagedBy(mgr).
599-
For(&kueue.ClusterQueue{}).
582+
return builder.TypedControllerManagedBy[reconcile.Request](mgr).
583+
Named("clusterqueue_controller").
584+
WatchesRawSource(source.TypedKind(
585+
mgr.GetCache(),
586+
&kueue.ClusterQueue{},
587+
&handler.TypedEnqueueRequestForObject[*kueue.ClusterQueue]{},
588+
r,
589+
)).
600590
WithOptions(controller.Options{NeedLeaderElection: ptr.To(false)}).
601591
Watches(&corev1.Namespace{}, &nsHandler).
602592
WatchesRawSource(source.Channel(r.snapUpdateCh, &snapHandler)).
603593
WatchesRawSource(source.Channel(r.nonCQObjectUpdateCh, &nonCQObjectHandler{})).
604-
WithEventFilter(r).
605594
Complete(WithLeadingManager(mgr, r, &kueue.ClusterQueue{}, cfg))
606595
}
607596

0 commit comments

Comments
 (0)