Need WaitingForJob special state for SnapshotKind

This commit is contained in:
Jean-Marc ANDRE 2023-04-14 20:48:08 +02:00
parent 61f45a7940
commit 8975f77e58
2 changed files with 19 additions and 10 deletions

View File

@ -24,15 +24,16 @@ import (
type SessionState string type SessionState string
const ( const (
New SessionState = "New" New SessionState = "New"
Initializing SessionState = "Initializing" Initializing SessionState = "Initializing"
Initialized SessionState = "Initialized" Initialized SessionState = "Initialized"
Running SessionState = "Running" Running SessionState = "Running"
Waiting SessionState = "Waiting" Waiting SessionState = "Waiting"
Finalize SessionState = "Finalize" WaitingForJob SessionState = "WaitingForJob"
Success SessionState = "Success" Finalize SessionState = "Finalize"
Failure SessionState = "Failure" Success SessionState = "Success"
Deleted SessionState = "Deleted" Failure SessionState = "Failure"
//Deleted SessionState = "Deleted"
) )
type TargetStatus struct { type TargetStatus struct {

View File

@ -54,7 +54,7 @@ func (s Session) checkSessionState(
backupConf formolv1alpha1.BackupConfiguration, backupConf formolv1alpha1.BackupConfiguration,
currentState formolv1alpha1.SessionState, currentState formolv1alpha1.SessionState,
waitState formolv1alpha1.SessionState, waitState formolv1alpha1.SessionState,
nextState formolv1alpha1.SessionState) formolv1alpha1.SessionState { nextState formolv1alpha1.SessionState) (sessionState formolv1alpha1.SessionState) {
for i, targetStatus := range tss { for i, targetStatus := range tss {
s.Log.V(0).Info("Target status", "target", targetStatus.TargetName, "session state", targetStatus.SessionState) s.Log.V(0).Info("Target status", "target", targetStatus.TargetName, "session state", targetStatus.SessionState)
switch targetStatus.SessionState { switch targetStatus.SessionState {
@ -77,6 +77,14 @@ func (s Session) checkSessionState(
// target is still busy with its current state. Wait until it is done. // target is still busy with its current state. Wait until it is done.
s.Log.V(0).Info("Waiting for one target to finish", "waitState", waitState) s.Log.V(0).Info("Waiting for one target to finish", "waitState", waitState)
return "" return ""
case formolv1alpha1.WaitingForJob:
// SnapshotKind special case
// A Job is scheduled to do the backup from a Volume Snapshot. It might take some time.
// We still want to run Finalize for all the targets (continue)
// but we also don't want to move the global BackupSession to Success (rewrite sessionState)
// When the Job is over, it will move the target state to Finalized and we'll be fine
defer func() { sessionState = "" }()
continue
default: default:
if i == len(tss)-1 { if i == len(tss)-1 {
s.Log.V(0).Info("Moving to next state", "nextState", nextState) s.Log.V(0).Info("Moving to next state", "nextState", nextState)