diff --git a/persistent/workflows/workflows.go b/persistent/workflows/workflows.go index ab1642a..9baa21c 100644 --- a/persistent/workflows/workflows.go +++ b/persistent/workflows/workflows.go @@ -50,11 +50,11 @@ func UpdateStatus(db *sql.DB, workflow int64, status string) error { return err } -func GetLastStatus(db *sql.DB, name string) (string, error) { - var status string +func GetLastStatus(db *sql.DB, name string) (*string, error) { + var status *string row := db.QueryRow("SELECT status FROM workflows WHERE name = ? ORDER BY id DESC LIMIT 1", name) - if err := row.Scan(&status); err != nil { + if err := row.Scan(&status); err != sql.ErrNoRows && err != nil { return status, err } diff --git a/workflow/pworkflow.go b/workflow/pworkflow.go index 3a36248..2b2d51d 100644 --- a/workflow/pworkflow.go +++ b/workflow/pworkflow.go @@ -16,14 +16,17 @@ type PWorkflow struct { db persistent.DBClient } -func checkIfLastFailed(db *sql.DB, name string) (bool, error) { +func checkIfCanCreate(db *sql.DB, name string) (bool, error) { status, err := workflows.GetLastStatus(db, name) if err != nil { return true, err } - log.Printf("Last status for %s is %s\n", name, status) - return (status == workflows.FailedRollbackStatus), nil + if status == nil { + return false, nil + } + + return (*status == workflows.FinishedStatus || *status == workflows.RollbackedStatus), nil } func NewPWorkflow(name string, tasks []task, client persistent.DBClient) (PWorkflow, error) { @@ -33,12 +36,12 @@ func NewPWorkflow(name string, tasks []task, client persistent.DBClient) (PWorkf } defer db.Close() - lastFailed, err := checkIfLastFailed(db, name) + canCreate, err := checkIfCanCreate(db, name) if err != nil { return PWorkflow{}, err } - if lastFailed == true { + if canCreate == false { return PWorkflow{}, errors.New(fmt.Sprintf("Cannot create new workflow %s. Last workflow failed to rollback", name)) }