Rollback live sessions on panic
Signed-off-by: Sean Du <do4suki@gmail.com>
This commit is contained in:
@@ -130,6 +130,22 @@ func (ss *Session) FinalizeOrRollback() {
|
||||
ss.Finalize()
|
||||
}
|
||||
|
||||
// FinalizeOrRollbackAfter runs cleanup only on the normal completion path.
|
||||
func (ss *Session) FinalizeOrRollbackAfter(cleanup func()) {
|
||||
defer func() {
|
||||
if recovered := recover(); recovered != nil {
|
||||
ss.Rollback()
|
||||
panic(recovered)
|
||||
}
|
||||
}()
|
||||
|
||||
if ss.done {
|
||||
return
|
||||
}
|
||||
cleanup()
|
||||
ss.Finalize()
|
||||
}
|
||||
|
||||
func (ss *Session) Rollback() {
|
||||
if ss.done {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user