dtmcli no gin dependency
This commit is contained in:
parent
3ddcee2878
commit
0270648c6c
@ -6,8 +6,6 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/url"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// BusiFunc type for busi func
|
||||
@ -25,13 +23,6 @@ func (t *TransInfo) String() string {
|
||||
return fmt.Sprintf("transInfo: %s %s %s %s", t.TransType, t.Gid, t.BranchID, t.BranchType)
|
||||
}
|
||||
|
||||
// MustGetTrans construct transaction info from request
|
||||
func MustGetTrans(c *gin.Context) *TransInfo {
|
||||
ti, err := TransInfoFromQuery(c.Request.URL.Query())
|
||||
e2p(err)
|
||||
return ti
|
||||
}
|
||||
|
||||
// TransInfoFromQuery construct transaction info from request
|
||||
func TransInfoFromQuery(qs url.Values) (*TransInfo, error) {
|
||||
ti := &TransInfo{
|
||||
|
||||
@ -2,8 +2,8 @@ package dtmcli
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-resty/resty/v2"
|
||||
)
|
||||
|
||||
@ -47,14 +47,14 @@ func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (rerr e
|
||||
return
|
||||
}
|
||||
|
||||
// TccFromReq tcc from request info
|
||||
func TccFromReq(c *gin.Context) (*Tcc, error) {
|
||||
// TccFromQuery tcc from request info
|
||||
func TccFromQuery(qs url.Values) (*Tcc, error) {
|
||||
tcc := &Tcc{
|
||||
TransBase: *TransBaseFromReq(c),
|
||||
Gid: c.Query("gid"),
|
||||
TransBase: *TransBaseFromQuery(qs),
|
||||
Gid: qs.Get("gid"),
|
||||
}
|
||||
if tcc.Dtm == "" || tcc.Gid == "" {
|
||||
return nil, fmt.Errorf("bad tcc info. dtm: %s, gid: %s", tcc.Dtm, tcc.Gid)
|
||||
return nil, fmt.Errorf("bad tcc info. dtm: %s, gid: %s parentID: %s", tcc.Dtm, tcc.Gid, tcc.parentID)
|
||||
}
|
||||
return tcc, nil
|
||||
}
|
||||
|
||||
@ -4,9 +4,9 @@ import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-resty/resty/v2"
|
||||
)
|
||||
|
||||
@ -146,11 +146,11 @@ type TransBase struct {
|
||||
WaitResult bool
|
||||
}
|
||||
|
||||
// TransBaseFromReq construct xa info from request
|
||||
func TransBaseFromReq(c *gin.Context) *TransBase {
|
||||
// TransBaseFromQuery construct transaction info from request
|
||||
func TransBaseFromQuery(qs url.Values) *TransBase {
|
||||
return &TransBase{
|
||||
IDGenerator: IDGenerator{parentID: c.Query("branch_id")},
|
||||
Dtm: c.Query("dtm"),
|
||||
IDGenerator: IDGenerator{parentID: qs.Get("branch_id")},
|
||||
Dtm: qs.Get("dtm"),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
18
dtmcli/xa.go
18
dtmcli/xa.go
@ -5,7 +5,6 @@ import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-resty/resty/v2"
|
||||
)
|
||||
|
||||
@ -33,9 +32,13 @@ type Xa struct {
|
||||
TransBase
|
||||
}
|
||||
|
||||
// XaFromReq construct xa info from request
|
||||
func XaFromReq(c *gin.Context) *Xa {
|
||||
return &Xa{TransBase: *TransBaseFromReq(c), Gid: c.Query("gid")}
|
||||
// XaFromQuery construct xa info from request
|
||||
func XaFromQuery(qs url.Values) (*Xa, error) {
|
||||
xa := &Xa{TransBase: *TransBaseFromQuery(qs), Gid: qs.Get("gid")}
|
||||
if xa.Gid == "" || xa.parentID == "" {
|
||||
return nil, fmt.Errorf("bad xa info: gid: %s parentid: %s", xa.Gid, xa.parentID)
|
||||
}
|
||||
return xa, nil
|
||||
}
|
||||
|
||||
// NewXaClient construct a xa client
|
||||
@ -64,8 +67,11 @@ func (xc *XaClient) HandleCallback(gid string, branchID string, action string) (
|
||||
}
|
||||
|
||||
// XaLocalTransaction start a xa local transaction
|
||||
func (xc *XaClient) XaLocalTransaction(c *gin.Context, xaFunc XaLocalFunc) (ret interface{}, rerr error) {
|
||||
xa := XaFromReq(c)
|
||||
func (xc *XaClient) XaLocalTransaction(qs url.Values, xaFunc XaLocalFunc) (ret interface{}, rerr error) {
|
||||
xa, rerr := XaFromQuery(qs)
|
||||
if rerr != nil {
|
||||
return
|
||||
}
|
||||
xa.Dtm = xc.Server
|
||||
branchID := xa.NewBranchID()
|
||||
xaBranch := xa.Gid + "-" + branchID
|
||||
|
||||
@ -41,13 +41,13 @@ func sagaBarrierTransIn(c *gin.Context) (interface{}, error) {
|
||||
if req.TransInResult != "" {
|
||||
return req.TransInResult, nil
|
||||
}
|
||||
return dtmcli.ThroughBarrierCall(sdbGet(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(sdbGet(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return sagaBarrierAdjustBalance(sdb, 1, req.Amount)
|
||||
})
|
||||
}
|
||||
|
||||
func sagaBarrierTransInCompensate(c *gin.Context) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(sdbGet(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(sdbGet(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return sagaBarrierAdjustBalance(sdb, 1, -reqFrom(c).Amount)
|
||||
})
|
||||
}
|
||||
@ -57,13 +57,13 @@ func sagaBarrierTransOut(c *gin.Context) (interface{}, error) {
|
||||
if req.TransInResult != "" {
|
||||
return req.TransInResult, nil
|
||||
}
|
||||
return dtmcli.ThroughBarrierCall(sdbGet(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(sdbGet(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return sagaBarrierAdjustBalance(sdb, 2, -req.Amount)
|
||||
})
|
||||
}
|
||||
|
||||
func sagaBarrierTransOutCompensate(c *gin.Context) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(sdbGet(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(sdbGet(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return sagaBarrierAdjustBalance(sdb, 2, reqFrom(c).Amount)
|
||||
})
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@ import (
|
||||
// TccSetup 1
|
||||
func TccSetup(app *gin.Engine) {
|
||||
app.POST(BusiAPI+"/TransInTccParent", common.WrapHandler(func(c *gin.Context) (interface{}, error) {
|
||||
tcc, err := dtmcli.TccFromReq(c)
|
||||
tcc, err := dtmcli.TccFromQuery(c.Request.URL.Query())
|
||||
e2p(err)
|
||||
dtmcli.Logf("TransInTccParent ")
|
||||
return tcc.CallBranch(&TransReq{Amount: reqFrom(c).Amount}, Busi+"/TransIn", Busi+"/TransInConfirm", Busi+"/TransInRevert")
|
||||
|
||||
@ -64,19 +64,19 @@ func tccBarrierTransInTry(c *gin.Context) (interface{}, error) {
|
||||
if req.TransInResult != "" {
|
||||
return req.TransInResult, nil
|
||||
}
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return adjustTrading(sdb, transInUID, req.Amount)
|
||||
})
|
||||
}
|
||||
|
||||
func tccBarrierTransInConfirm(c *gin.Context) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return adjustBalance(sdb, transInUID, reqFrom(c).Amount)
|
||||
})
|
||||
}
|
||||
|
||||
func tccBarrierTransInCancel(c *gin.Context) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return adjustTrading(sdb, transInUID, -reqFrom(c).Amount)
|
||||
})
|
||||
}
|
||||
@ -86,20 +86,20 @@ func tccBarrierTransOutTry(c *gin.Context) (interface{}, error) {
|
||||
if req.TransInResult != "" {
|
||||
return req.TransInResult, nil
|
||||
}
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return adjustTrading(sdb, transOutUID, -req.Amount)
|
||||
})
|
||||
}
|
||||
|
||||
func tccBarrierTransOutConfirm(c *gin.Context) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return adjustBalance(sdb, transOutUID, -reqFrom(c).Amount)
|
||||
})
|
||||
}
|
||||
|
||||
// TccBarrierTransOutCancel will be use in test
|
||||
func TccBarrierTransOutCancel(c *gin.Context) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), dtmcli.MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return dtmcli.ThroughBarrierCall(dbGet().ToSQLDB(), MustGetTrans(c), func(sdb *sql.Tx) (interface{}, error) {
|
||||
return adjustTrading(sdb, transOutUID, reqFrom(c).Amount)
|
||||
})
|
||||
}
|
||||
|
||||
@ -40,7 +40,7 @@ func XaFireRequest() string {
|
||||
}
|
||||
|
||||
func xaTransIn(c *gin.Context) (interface{}, error) {
|
||||
return XaClient.XaLocalTransaction(c, func(db *sql.DB, xa *dtmcli.Xa) (interface{}, error) {
|
||||
return XaClient.XaLocalTransaction(c.Request.URL.Query(), func(db *sql.DB, xa *dtmcli.Xa) (interface{}, error) {
|
||||
if reqFrom(c).TransInResult == "FAILURE" {
|
||||
return dtmcli.ResultFailure, nil
|
||||
}
|
||||
@ -50,7 +50,7 @@ func xaTransIn(c *gin.Context) (interface{}, error) {
|
||||
}
|
||||
|
||||
func xaTransOut(c *gin.Context) (interface{}, error) {
|
||||
return XaClient.XaLocalTransaction(c, func(db *sql.DB, xa *dtmcli.Xa) (interface{}, error) {
|
||||
return XaClient.XaLocalTransaction(c.Request.URL.Query(), func(db *sql.DB, xa *dtmcli.Xa) (interface{}, error) {
|
||||
if reqFrom(c).TransOutResult == "FAILURE" {
|
||||
return dtmcli.ResultFailure, nil
|
||||
}
|
||||
|
||||
@ -66,3 +66,10 @@ func dbGet() *common.DB {
|
||||
func sdbGet() *sql.DB {
|
||||
return dtmcli.SdbGet(config.DB)
|
||||
}
|
||||
|
||||
// MustGetTrans construct transaction info from request
|
||||
func MustGetTrans(c *gin.Context) *dtmcli.TransInfo {
|
||||
ti, err := dtmcli.TransInfoFromQuery(c.Request.URL.Query())
|
||||
e2p(err)
|
||||
return ti
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user