in internal/handler/operation.go [69:95]
func (o *OperationHandler) EnsureNotExpired(ctx context.Context) (reconciler.OperationResult, error) {
o.logger.V(1).Info("Operation EnsureNotExpired")
if len(o.operation.Spec.ExpireAt) == 0 {
return reconciler.ContinueProcessing()
}
if o.phaseIn(v1alpha1.OperationPhaseDeleted, v1alpha1.OperationPhaseDeleting) {
return reconciler.ContinueProcessing()
}
expireTime, err := time.Parse(time.RFC3339, o.operation.Spec.ExpireAt)
if err != nil {
o.logger.Error(err, fmt.Sprintf("Failed to parse expire time: %s", o.operation.Spec.ExpireAt))
o.recorder.Event(o.operation, "Warning", "InvalidExpireTime", "Failed to parse expire time")
return reconciler.ContinueProcessing()
}
if time.Now().Before(expireTime) {
return reconciler.ContinueProcessing()
}
// Expired
o.logger.Info("deleting expired operation", "expireAt", o.operation.Spec.ExpireAt)
if err := o.client.Delete(ctx, o.operation, client.PropagationPolicy(metav1.DeletePropagationBackground)); client.IgnoreNotFound(err) != nil {
o.logger.Error(err, "Failed to delete expired operation")
o.recorder.Event(o.operation, "Warning", "DeleteFailed", "Failed to delete expired operation")
return reconciler.RequeueWithError(err)
}
// Stop processing if the operation is deleted
return reconciler.ContinueProcessing()
}