in pkg/controller/core/resourceflavor_controller.go [70:107]
func (r *ResourceFlavorReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
var flavor kueue.ResourceFlavor
if err := r.client.Get(ctx, req.NamespacedName, &flavor); err != nil {
// we'll ignore not-found errors, since there is nothing to do.
return ctrl.Result{}, client.IgnoreNotFound(err)
}
log := ctrl.LoggerFrom(ctx).WithValues("resourceFlavor", klog.KObj(&flavor))
ctx = ctrl.LoggerInto(ctx, log)
log.V(2).Info("Reconciling ResourceFlavor")
if flavor.ObjectMeta.DeletionTimestamp.IsZero() {
// Although we'll add the finalizer via webhook mutation now, this is still useful
// as a fallback.
if !controllerutil.ContainsFinalizer(&flavor, kueue.ResourceInUseFinalizerName) {
controllerutil.AddFinalizer(&flavor, kueue.ResourceInUseFinalizerName)
if err := r.client.Update(ctx, &flavor); err != nil {
return ctrl.Result{}, err
}
}
} else {
if controllerutil.ContainsFinalizer(&flavor, kueue.ResourceInUseFinalizerName) {
if cqs := r.cache.ClusterQueuesUsingFlavor(flavor.Name); len(cqs) != 0 {
log.V(3).Info("resourceFlavor is still in use", "ClusterQueues", cqs)
// We avoid to return error here to prevent backoff requeue, which is passive and wasteful.
// Instead, we drive the removal of finalizer by ClusterQueue Update/Delete events
// when resourceFlavor is no longer in use.
return ctrl.Result{}, nil
}
controllerutil.RemoveFinalizer(&flavor, kueue.ResourceInUseFinalizerName)
if err := r.client.Update(ctx, &flavor); err != nil {
return ctrl.Result{}, err
}
}
}
return ctrl.Result{}, nil
}