Browse Source

remove set result

pull/52/head
yedf2 4 years ago
parent
commit
d1b338ea93
  1. 14
      dtmcli/types.go
  2. 9
      examples/http_tcc_barrier.go
  3. 23
      test/barrier_tcc_test.go

14
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
}

9
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")
}

23
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")

Loading…
Cancel
Save