diff --git a/dtmcli/types.go b/dtmcli/types.go index 06e8d75..1db9227 100644 --- a/dtmcli/types.go +++ b/dtmcli/types.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "net/url" + "strings" ) // M a short name @@ -45,12 +46,6 @@ func (g *IDGenerator) CurrentBranchID() string { return g.parentID + fmt.Sprintf("%02d", g.branchID) } -// TransResult dtm 返回的结果 -type TransResult struct { - DtmResult string `json:"dtm_result"` - Message string -} - // TransOptions transaction options type TransOptions struct { WaitResult bool `json:"wait_result,omitempty" gorm:"-"` @@ -91,13 +86,12 @@ func TransBaseFromQuery(qs url.Values) *TransBase { // callDtm 调用dtm服务器,返回事务的状态 func (tb *TransBase) callDtm(body interface{}, operation string) error { resp, err := RestyClient.R(). - SetResult(&TransResult{}).SetBody(body).Post(fmt.Sprintf("%s/%s", tb.Dtm, operation)) + SetBody(body).Post(fmt.Sprintf("%s/%s", tb.Dtm, operation)) if err != nil { return err } - tr := resp.Result().(*TransResult) - if tr.DtmResult == ResultFailure { - return errors.New("FAILURE: " + tr.Message) + if strings.Contains(resp.String(), ResultFailure) { + return errors.New(resp.String()) } return nil } diff --git a/examples/http_tcc_barrier.go b/examples/http_tcc_barrier.go index 5bae2d5..5eec99d 100644 --- a/examples/http_tcc_barrier.go +++ b/examples/http_tcc_barrier.go @@ -22,7 +22,8 @@ func init() { dtmcli.Logf("tcc transaction begin") gid := dtmcli.MustGenGid(DtmServer) err := dtmcli.TccGlobalTransaction(DtmServer, gid, func(tcc *dtmcli.Tcc) (*resty.Response, error) { - resp, err := tcc.CallBranch(&TransReq{Amount: 30}, Busi+"/TccBTransOutTry", Busi+"/TccBTransOutConfirm", Busi+"/TccBTransOutCancel") + resp, err := tcc.CallBranch(&TransReq{Amount: 30}, Busi+"/TccBTransOutTry", + Busi+"/TccBTransOutConfirm", Busi+"/TccBTransOutCancel") if err != nil { return resp, err } @@ -37,7 +38,8 @@ const transInUID = 1 const transOutUID = 2 func adjustTrading(db dtmcli.DB, uid int, amount int) error { - affected, err := dtmcli.DBExec(db, "update dtm_busi.user_account set trading_balance=trading_balance+? where user_id=? and trading_balance + ? + balance >= 0", amount, uid, amount) + affected, err := dtmcli.DBExec(db, `update dtm_busi.user_account set trading_balance=trading_balance+? + where user_id=? and trading_balance + ? + balance >= 0`, amount, uid, amount) if err == nil && affected == 0 { return fmt.Errorf("update error, maybe balance not enough") } @@ -45,7 +47,8 @@ func adjustTrading(db dtmcli.DB, uid int, amount int) error { } func adjustBalance(db dtmcli.DB, uid int, amount int) error { - affected, err := dtmcli.DBExec(db, "update dtm_busi.user_account set trading_balance=trading_balance-?, balance=balance+? where user_id=?;", amount, amount, uid) + affected, err := dtmcli.DBExec(db, `update dtm_busi.user_account set trading_balance=trading_balance-?, + balance=balance+? where user_id=?`, amount, amount, uid) if err == nil && affected == 0 { return fmt.Errorf("update user_account 0 rows") } diff --git a/test/barrier_tcc_test.go b/test/barrier_tcc_test.go index d0ee9dd..78ffc66 100644 --- a/test/barrier_tcc_test.go +++ b/test/barrier_tcc_test.go @@ -71,19 +71,18 @@ func tccBarrierDisorder(t *testing.T) { })) // 注册子事务 resp, err := dtmcli.RestyClient.R(). - SetResult(&dtmcli.TransResult{}).SetBody(M{ - "gid": tcc.Gid, - "branch_id": branchID, - "trans_type": "tcc", - "status": dtmcli.StatusPrepared, - "data": string(dtmcli.MustMarshal(body)), - dtmcli.BranchTry: tryURL, - dtmcli.BranchConfirm: confirmURL, - dtmcli.BranchCancel: cancelURL, - }).Post(fmt.Sprintf("%s/%s", tcc.Dtm, "registerTccBranch")) + SetBody(M{ + "gid": tcc.Gid, + "branch_id": branchID, + "trans_type": "tcc", + "status": dtmcli.StatusPrepared, + "data": string(dtmcli.MustMarshal(body)), + dtmcli.BranchTry: tryURL, + dtmcli.BranchConfirm: confirmURL, + dtmcli.BranchCancel: cancelURL, + }).Post(fmt.Sprintf("%s/%s", tcc.Dtm, "registerTccBranch")) assert.Nil(t, err) - tr := resp.Result().(*dtmcli.TransResult) - assert.Equal(t, dtmcli.ResultSuccess, tr.DtmResult) + assert.Contains(t, resp.String(), dtmcli.ResultSuccess) go func() { dtmcli.Logf("sleeping to wait for tcc try timeout")