From 879376fc48f807abe86518a9b59b9cb49a70c93b Mon Sep 17 00:00:00 2001 From: Guy Baron Date: Sat, 3 Aug 2019 15:41:58 +0300 Subject: [PATCH] return an error from the saga store when deleting a saga if saga can not be found In order to deal with concurrent deletes of the sage saga instance we would wan't to indicate that deleting the saga failed if the saga is not stored so callers can take proper action --- gbus/tx/sagastore.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/gbus/tx/sagastore.go b/gbus/tx/sagastore.go index c7e1547..6032f36 100644 --- a/gbus/tx/sagastore.go +++ b/gbus/tx/sagastore.go @@ -4,6 +4,7 @@ import ( "bytes" "database/sql" "encoding/gob" + "errors" "fmt" "reflect" "regexp" @@ -116,8 +117,16 @@ func (store *SagaStore) RegisterSagaType(saga gbus.Saga) { func (store *SagaStore) DeleteSaga(tx *sql.Tx, instance *saga.Instance) error { tblName := store.GetSagatableName() deleteSQL := `DELETE FROM ` + tblName + ` WHERE saga_id= ?` - _, err := tx.Exec(deleteSQL, instance.ID) - return err + result, err := tx.Exec(deleteSQL, instance.ID) + if err != nil { + return err + } + rowsEffected, e := result.RowsAffected() + if rowsEffected == 0 || e != nil { + return errors.New("couldn't delete saga, saga not found orr an error occurred") + } + + return nil } //GetSagaByID implements interface method store.GetSagaByID