only do updated when needed

This commit is contained in:
jandre 2021-02-14 10:25:21 +01:00
parent aa76aa2128
commit bce58d5f65

View File

@ -168,18 +168,26 @@ func (r *RestoreSessionReconciler) StatusUpdate() error {
} }
switch r.RestoreSession.Status.SessionState { switch r.RestoreSession.Status.SessionState {
case formolv1alpha1.New: case formolv1alpha1.New:
r.RestoreSession.Status.SessionState = formolv1alpha1.Running
targetStatus, err := startNextTask() targetStatus, err := startNextTask()
if err != nil { if err != nil {
return err return err
} }
log.V(0).Info("New restore. Start the first task", "task", targetStatus.Name) log.V(0).Info("New restore. Start the first task", "target", targetStatus)
r.RestoreSession.Status.SessionState = formolv1alpha1.Running
if err = r.Status().Update(ctx, r.RestoreSession); err != nil {
log.Error(err, "unable to update restoresession")
return err
}
case formolv1alpha1.Running: case formolv1alpha1.Running:
currentTargetStatus := r.RestoreSession.Status.Targets[len(r.RestoreSession.Status.Targets)-1] currentTargetStatus := r.RestoreSession.Status.Targets[len(r.RestoreSession.Status.Targets)-1]
switch currentTargetStatus.SessionState { switch currentTargetStatus.SessionState {
case formolv1alpha1.Failure: case formolv1alpha1.Failure:
log.V(0).Info("last restore task failed. Stop here", "target", currentTargetStatus.Name) log.V(0).Info("last restore task failed. Stop here", "target", currentTargetStatus.Name)
r.RestoreSession.Status.SessionState = formolv1alpha1.Failure r.RestoreSession.Status.SessionState = formolv1alpha1.Failure
if err := r.Status().Update(ctx, r.RestoreSession); err != nil {
log.Error(err, "unable to update restoresession")
return err
}
case formolv1alpha1.Running: case formolv1alpha1.Running:
log.V(0).Info("task is still running", "target", currentTargetStatus.Name) log.V(0).Info("task is still running", "target", currentTargetStatus.Name)
return nil return nil
@ -191,14 +199,15 @@ func (r *RestoreSessionReconciler) StatusUpdate() error {
} }
if targetStatus == nil { if targetStatus == nil {
// No more task to start. The restore is over // No more task to start. The restore is over
log.V(0).Info("No more task to run. Restore is over")
r.RestoreSession.Status.SessionState = formolv1alpha1.Success r.RestoreSession.Status.SessionState = formolv1alpha1.Success
} }
if err := r.Status().Update(ctx, r.RestoreSession); err != nil {
log.Error(err, "unable to update restoresession")
return err
}
} }
} }
if err := r.Status().Update(ctx, r.RestoreSession); err != nil {
log.Error(err, "unable to update restoresession")
return err
}
return nil return nil
} }
@ -206,6 +215,7 @@ func (r *RestoreSessionReconciler) StatusUpdate() error {
// +kubebuilder:rbac:groups=formol.desmojim.fr,resources=restoresessions/status,verbs=get;update;patch // +kubebuilder:rbac:groups=formol.desmojim.fr,resources=restoresessions/status,verbs=get;update;patch
func (r *RestoreSessionReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { func (r *RestoreSessionReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
time.Sleep(500 * time.Millisecond)
ctx := context.Background() ctx := context.Background()
log := r.Log.WithValues("restoresession", req.NamespacedName) log := r.Log.WithValues("restoresession", req.NamespacedName)
@ -230,10 +240,12 @@ func (r *RestoreSessionReconciler) Reconcile(req ctrl.Request) (ctrl.Result, err
} }
if r.RestoreSession.Status.ObservedGeneration == r.RestoreSession.ObjectMeta.Generation { if r.RestoreSession.Status.ObservedGeneration == r.RestoreSession.ObjectMeta.Generation {
// status update // status update. the restore has already started and the status got updated.
// let's see what happened and figure out what are the next actions
log.V(0).Info("status update") log.V(0).Info("status update")
return ctrl.Result{}, r.StatusUpdate() return ctrl.Result{}, r.StatusUpdate()
} }
// a new restore session has been created.
r.RestoreSession.Status.ObservedGeneration = r.RestoreSession.ObjectMeta.Generation r.RestoreSession.Status.ObservedGeneration = r.RestoreSession.ObjectMeta.Generation
r.RestoreSession.Status.SessionState = formolv1alpha1.New r.RestoreSession.Status.SessionState = formolv1alpha1.New
r.RestoreSession.Status.StartTime = &metav1.Time{Time: time.Now()} r.RestoreSession.Status.StartTime = &metav1.Time{Time: time.Now()}
@ -241,7 +253,7 @@ func (r *RestoreSessionReconciler) Reconcile(req ctrl.Request) (ctrl.Result, err
if err := r.Status().Update(ctx, r.RestoreSession); err != nil { if err := r.Status().Update(ctx, r.RestoreSession); err != nil {
log.Error(err, "unable to update restoresession") log.Error(err, "unable to update restoresession")
return ctrl.Result{}, err return reschedule, err
} }
return reschedule, nil return reschedule, nil