func()

in internal/controllers/resourceslice/slicecleanup.go [74:128]


func (c *cleanupController) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	logger := logr.FromContextOrDiscard(ctx).WithValues("resourceSliceName", req.Name, "resourceSliceNamespace", req.Namespace)

	slice := &apiv1.ResourceSlice{}
	err := c.client.Get(ctx, req.NamespacedName, slice)
	if errors.IsNotFound(err) {
		return ctrl.Result{}, nil
	}
	if err != nil {
		logger.Error(err, "failed to get resource slice")
		return ctrl.Result{}, err
	}
	logger = logger.WithValues("synthesisUUID", slice.Spec.SynthesisUUID)

	owner := metav1.GetControllerOf(slice)
	if owner != nil {
		logger = logger.WithValues("compositionName", owner.Name, "compositionNamespace", req.Namespace)
	}
	ctx = logr.NewContext(ctx, logger)

	if slice.DeletionTimestamp != nil {
		return c.removeFinalizer(ctx, slice, owner)
	}

	// Don't bother checking on brand new resource slices
	if delta := time.Since(slice.CreationTimestamp.Time); delta < 5*time.Second {
		return ctrl.Result{RequeueAfter: delta}, nil
	}

	del, err := c.shouldDelete(ctx, c.client, slice, owner)
	if err != nil {
		logger.Error(err, "failed to check if resource slice should be deleted (cached)")
		return ctrl.Result{}, err
	}
	if !del {
		return ctrl.Result{}, nil // fail safe for stale cache
	}

	del, err = c.shouldDelete(ctx, c.noCacheReader, slice, owner)
	if err != nil {
		logger.Error(err, "failed to check if resource slice should be deleted")
		return ctrl.Result{}, err
	}
	if !del {
		return ctrl.Result{}, nil
	}

	if err := c.client.Delete(ctx, slice, &client.Preconditions{UID: &slice.UID}); err != nil {
		logger.Error(err, "failed to delete resource slice")
		return ctrl.Result{}, err
	}
	logger.V(0).Info("deleted unused resource slice", "age", time.Since(slice.CreationTimestamp.Time).Milliseconds())

	return ctrl.Result{}, nil
}