From 5db1825ed6de16582c1b82793635884420ab5e1c Mon Sep 17 00:00:00 2001 From: yedongfu Date: Thu, 8 Jul 2021 23:19:58 +0800 Subject: [PATCH] tcc barrier seems ok --- app/main.go | 5 +++++ dtmcli/barrier.go | 2 +- dtmcli/tcc.go | 9 ++++++++- examples/main_xa.go | 8 ++++++++ examples/types.go | 1 + 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/main.go b/app/main.go index dbe9a62..4354c10 100644 --- a/app/main.go +++ b/app/main.go @@ -55,6 +55,11 @@ func main() { dtmsvr.MainStart() examples.PopulateMysql() examples.SagaBarrierMainStart() + } else if os.Args[1] == "tcc_barrier" { + dtmsvr.PopulateMysql() + dtmsvr.MainStart() + examples.PopulateMysql() + examples.TccBarrierMainStart() } else { logrus.Fatalf("unknown arg: %s", os.Args[1]) } diff --git a/dtmcli/barrier.go b/dtmcli/barrier.go index 258df7f..5daf8fa 100644 --- a/dtmcli/barrier.go +++ b/dtmcli/barrier.go @@ -74,7 +74,7 @@ func ThroughBarrierCall(db *sql.DB, transInfo *TransInfo, busiCall BusiFunc) (re "compensate": "action", }[transInfo.BranchType] originAffected, _ := insertBarrier(tx, transInfo.TransType, transInfo.Gid, transInfo.BranchID, originType) - currentAffected, rerr := insertBarrier(tx, transInfo.TransType, transInfo.Gid, transInfo.BranchID, transInfo.TransType) + currentAffected, rerr := insertBarrier(tx, transInfo.TransType, transInfo.Gid, transInfo.BranchID, transInfo.BranchType) if currentAffected == 0 || (originType == "cancel" || originType == "compensate") && originAffected > 0 { res = "SUCCESS" // 如果被忽略,那么直接返回 "SUCCESS",表示成功,可以进行下一步 return diff --git a/dtmcli/tcc.go b/dtmcli/tcc.go index 92549ca..fdbd400 100644 --- a/dtmcli/tcc.go +++ b/dtmcli/tcc.go @@ -49,10 +49,11 @@ func TccFromReq(c *gin.Context) (*Tcc, error) { } func (t *Tcc) CallBranch(body interface{}, tryUrl string, confirmUrl string, cancelUrl string) (*resty.Response, error) { + branchID := common.GenGid() resp, err := common.RestyClient.R(). SetBody(&M{ "gid": t.Gid, - "branch_id": common.GenGid(), + "branch_id": branchID, "trans_type": "tcc", "status": "prepared", "data": string(common.MustMarshal(body)), @@ -66,5 +67,11 @@ func (t *Tcc) CallBranch(body interface{}, tryUrl string, confirmUrl string, can } return common.RestyClient.R(). SetBody(body). + SetQueryParams(common.MS{ + "gid": t.Gid, + "branch_id": branchID, + "trans_type": "tcc", + "branch_type": "try", + }). Post(tryUrl) } diff --git a/examples/main_xa.go b/examples/main_xa.go index fc3e9e8..48c7003 100644 --- a/examples/main_xa.go +++ b/examples/main_xa.go @@ -20,6 +20,14 @@ type UserAccount struct { func (u *UserAccount) TableName() string { return "user_account" } +type UserAccountTrading struct { + common.ModelBase + UserId int + TradingBalance string +} + +func (u *UserAccountTrading) TableName() string { return "user_account_trading" } + func dbGet() *common.DB { return common.DbGet(Config.Mysql) } diff --git a/examples/types.go b/examples/types.go index d66b64b..9fed90f 100644 --- a/examples/types.go +++ b/examples/types.go @@ -17,6 +17,7 @@ const DtmServer = "http://localhost:8080/api/dtmsvr" const ( SagaBarrierBusiPort = iota + 8090 + TccBarrierBusiPort ) type TransReq struct {