tcc global change to TransStatus

This commit is contained in:
yedf2 2021-08-03 15:26:05 +08:00
parent 483c76d015
commit a94761d7f6

View File

@ -22,21 +22,22 @@ type TccGlobalFunc func(tcc *Tcc) (*resty.Response, error)
// dtm dtm服务器地址 // dtm dtm服务器地址
// gid 全局事务id // gid 全局事务id
// tccFunc tcc事务函数里面会定义全局事务的分支 // tccFunc tcc事务函数里面会定义全局事务的分支
func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (ret interface{}, rerr error) { func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (status TransStatus, rerr error) {
data := &M{ data := &M{
"gid": gid, "gid": gid,
"trans_type": "tcc", "trans_type": "tcc",
} }
tcc := &Tcc{Dtm: dtm, Gid: gid} tcc := &Tcc{Dtm: dtm, Gid: gid}
resp, err := CallDtm(dtm, data, "prepare", &TransOptions{}) status, rerr = CallDtm(dtm, data, "prepare", &TransOptions{})
if err != nil { if rerr != nil {
return resp, err return status, rerr
} }
// 小概率情况下prepare成功了但是由于网络状况导致上面Failure那么不执行下面defer的内容等待超时后再回滚标记事务失败也没有问题 // 小概率情况下prepare成功了但是由于网络状况导致上面Failure那么不执行下面defer的内容等待超时后再回滚标记事务失败也没有问题
defer func() { defer func() {
x := recover() x := recover()
var err error
operation := common.If(x == nil && rerr == nil, "submit", "abort").(string) operation := common.If(x == nil && rerr == nil, "submit", "abort").(string)
resp, err = CallDtm(dtm, data, operation, &TransOptions{}) status, err = CallDtm(dtm, data, operation, &TransOptions{})
if rerr == nil { if rerr == nil {
rerr = err rerr = err
} }
@ -44,8 +45,8 @@ func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (ret in
panic(x) panic(x)
} }
}() }()
ret, rerr = tccFunc(tcc) resp, rerr := tccFunc(tcc)
rerr = CheckResult(ret, rerr) rerr = CheckResponse(resp, rerr)
return return
} }