From a94761d7f6dead74e7e868995b4b3ff08d0d966d Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Tue, 3 Aug 2021 15:26:05 +0800 Subject: [PATCH] tcc global change to TransStatus --- dtmcli/tcc.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/dtmcli/tcc.go b/dtmcli/tcc.go index 8c8293e..86c76b3 100644 --- a/dtmcli/tcc.go +++ b/dtmcli/tcc.go @@ -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 }