tcc global change to TransStatus
This commit is contained in:
parent
483c76d015
commit
a94761d7f6
@ -22,21 +22,22 @@ type TccGlobalFunc func(tcc *Tcc) (*resty.Response, error)
|
||||
// dtm dtm服务器地址
|
||||
// gid 全局事务id
|
||||
// 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{
|
||||
"gid": gid,
|
||||
"trans_type": "tcc",
|
||||
}
|
||||
tcc := &Tcc{Dtm: dtm, Gid: gid}
|
||||
resp, err := CallDtm(dtm, data, "prepare", &TransOptions{})
|
||||
if err != nil {
|
||||
return resp, err
|
||||
status, rerr = CallDtm(dtm, data, "prepare", &TransOptions{})
|
||||
if rerr != nil {
|
||||
return status, rerr
|
||||
}
|
||||
// 小概率情况下,prepare成功了,但是由于网络状况导致上面Failure,那么不执行下面defer的内容,等待超时后再回滚标记事务失败,也没有问题
|
||||
defer func() {
|
||||
x := recover()
|
||||
var err error
|
||||
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 {
|
||||
rerr = err
|
||||
}
|
||||
@ -44,8 +45,8 @@ func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (ret in
|
||||
panic(x)
|
||||
}
|
||||
}()
|
||||
ret, rerr = tccFunc(tcc)
|
||||
rerr = CheckResult(ret, rerr)
|
||||
resp, rerr := tccFunc(tcc)
|
||||
rerr = CheckResponse(resp, rerr)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user