我们是把整个函数视为事务,先更新数据库 如果 minio 失败了就往 mysql txn 报错,这样就自动回滚事务了
伪代码:
txn=dbClient.Begin()
defer HandleErrorCh(errorChan).
ErrorWillDo(
txn.Rollback()
}).
SuccessWillDo(
_ = txn.Commit()
}).Do()
err=txn.update(xxxx)
if err!=nil{
txn.report(err)
}
err=minio.uploadfile(xxx,yyy)
if err!=nil{
txn.report(err)
} |