use tran data
This commit is contained in:
parent
ef4010c850
commit
5dfed596ad
@ -8,8 +8,7 @@ type Msg struct {
|
|||||||
|
|
||||||
// MsgData msg data
|
// MsgData msg data
|
||||||
type MsgData struct {
|
type MsgData struct {
|
||||||
Gid string `json:"gid"`
|
TransData
|
||||||
TransType string `json:"trans_type"`
|
|
||||||
Steps []MsgStep `json:"steps"`
|
Steps []MsgStep `json:"steps"`
|
||||||
QueryPrepared string `json:"query_prepared"`
|
QueryPrepared string `json:"query_prepared"`
|
||||||
}
|
}
|
||||||
@ -23,10 +22,10 @@ type MsgStep struct {
|
|||||||
// NewMsg create new msg
|
// NewMsg create new msg
|
||||||
func NewMsg(server string, gid string) *Msg {
|
func NewMsg(server string, gid string) *Msg {
|
||||||
return &Msg{
|
return &Msg{
|
||||||
MsgData: MsgData{
|
MsgData: MsgData{TransData: TransData{
|
||||||
Gid: gid,
|
Gid: gid,
|
||||||
TransType: "msg",
|
TransType: "msg",
|
||||||
},
|
}},
|
||||||
TransBase: TransBase{
|
TransBase: TransBase{
|
||||||
Dtm: server,
|
Dtm: server,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -8,8 +8,7 @@ type Saga struct {
|
|||||||
|
|
||||||
// SagaData sage data
|
// SagaData sage data
|
||||||
type SagaData struct {
|
type SagaData struct {
|
||||||
Gid string `json:"gid"`
|
TransData
|
||||||
TransType string `json:"trans_type"`
|
|
||||||
Steps []SagaStep `json:"steps"`
|
Steps []SagaStep `json:"steps"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,10 +22,10 @@ type SagaStep struct {
|
|||||||
// NewSaga create a saga
|
// NewSaga create a saga
|
||||||
func NewSaga(server string, gid string) *Saga {
|
func NewSaga(server string, gid string) *Saga {
|
||||||
return &Saga{
|
return &Saga{
|
||||||
SagaData: SagaData{
|
SagaData: SagaData{TransData: TransData{
|
||||||
Gid: gid,
|
Gid: gid,
|
||||||
TransType: "saga",
|
TransType: "saga",
|
||||||
},
|
}},
|
||||||
TransBase: TransBase{
|
TransBase: TransBase{
|
||||||
Dtm: server,
|
Dtm: server,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import (
|
|||||||
|
|
||||||
// Tcc struct of tcc
|
// Tcc struct of tcc
|
||||||
type Tcc struct {
|
type Tcc struct {
|
||||||
Gid string
|
TransData
|
||||||
TransBase
|
TransBase
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,12 +21,8 @@ type TccGlobalFunc func(tcc *Tcc) (*resty.Response, error)
|
|||||||
// gid 全局事务id
|
// gid 全局事务id
|
||||||
// tccFunc tcc事务函数,里面会定义全局事务的分支
|
// tccFunc tcc事务函数,里面会定义全局事务的分支
|
||||||
func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (rerr error) {
|
func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (rerr error) {
|
||||||
data := &M{
|
tcc := &Tcc{TransBase: TransBase{Dtm: dtm}, TransData: TransData{Gid: gid, TransType: "tcc"}}
|
||||||
"gid": gid,
|
rerr = tcc.CallDtm(&tcc.TransData, "prepare")
|
||||||
"trans_type": "tcc",
|
|
||||||
}
|
|
||||||
tcc := &Tcc{TransBase: TransBase{Dtm: dtm}, Gid: gid}
|
|
||||||
rerr = tcc.CallDtm(data, "prepare")
|
|
||||||
if rerr != nil {
|
if rerr != nil {
|
||||||
return rerr
|
return rerr
|
||||||
}
|
}
|
||||||
@ -34,7 +30,7 @@ func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (rerr e
|
|||||||
defer func() {
|
defer func() {
|
||||||
x := recover()
|
x := recover()
|
||||||
operation := If(x == nil && rerr == nil, "submit", "abort").(string)
|
operation := If(x == nil && rerr == nil, "submit", "abort").(string)
|
||||||
err := tcc.CallDtm(data, operation)
|
err := tcc.CallDtm(&tcc.TransData, operation)
|
||||||
if rerr == nil {
|
if rerr == nil {
|
||||||
rerr = err
|
rerr = err
|
||||||
}
|
}
|
||||||
@ -51,7 +47,7 @@ func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (rerr e
|
|||||||
func TccFromQuery(qs url.Values) (*Tcc, error) {
|
func TccFromQuery(qs url.Values) (*Tcc, error) {
|
||||||
tcc := &Tcc{
|
tcc := &Tcc{
|
||||||
TransBase: *TransBaseFromQuery(qs),
|
TransBase: *TransBaseFromQuery(qs),
|
||||||
Gid: qs.Get("gid"),
|
TransData: TransData{Gid: qs.Get("gid"), TransType: "tcc"},
|
||||||
}
|
}
|
||||||
if tcc.Dtm == "" || tcc.Gid == "" {
|
if tcc.Dtm == "" || tcc.Gid == "" {
|
||||||
return nil, fmt.Errorf("bad tcc info. dtm: %s, gid: %s parentID: %s", tcc.Dtm, tcc.Gid, tcc.parentID)
|
return nil, fmt.Errorf("bad tcc info. dtm: %s, gid: %s parentID: %s", tcc.Dtm, tcc.Gid, tcc.parentID)
|
||||||
|
|||||||
@ -46,6 +46,12 @@ type TransResult struct {
|
|||||||
Message string
|
Message string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TransData 每个全局事务都有的数据
|
||||||
|
type TransData struct {
|
||||||
|
Gid string `json:"gid"`
|
||||||
|
TransType string `json:"trans_type"`
|
||||||
|
}
|
||||||
|
|
||||||
// TransBase 事务的基础类
|
// TransBase 事务的基础类
|
||||||
type TransBase struct {
|
type TransBase struct {
|
||||||
IDGenerator
|
IDGenerator
|
||||||
|
|||||||
14
dtmcli/xa.go
14
dtmcli/xa.go
@ -26,13 +26,13 @@ type XaClient struct {
|
|||||||
|
|
||||||
// Xa xa transaction
|
// Xa xa transaction
|
||||||
type Xa struct {
|
type Xa struct {
|
||||||
Gid string
|
TransData
|
||||||
TransBase
|
TransBase
|
||||||
}
|
}
|
||||||
|
|
||||||
// XaFromQuery construct xa info from request
|
// XaFromQuery construct xa info from request
|
||||||
func XaFromQuery(qs url.Values) (*Xa, error) {
|
func XaFromQuery(qs url.Values) (*Xa, error) {
|
||||||
xa := &Xa{TransBase: *TransBaseFromQuery(qs), Gid: qs.Get("gid")}
|
xa := &Xa{TransBase: *TransBaseFromQuery(qs), TransData: TransData{Gid: qs.Get("gid"), TransType: "xa"}}
|
||||||
if xa.Gid == "" || xa.parentID == "" {
|
if xa.Gid == "" || xa.parentID == "" {
|
||||||
return nil, fmt.Errorf("bad xa info: gid: %s parentid: %s", xa.Gid, xa.parentID)
|
return nil, fmt.Errorf("bad xa info: gid: %s parentid: %s", xa.Gid, xa.parentID)
|
||||||
}
|
}
|
||||||
@ -109,12 +109,8 @@ func (xc *XaClient) XaLocalTransaction(qs url.Values, xaFunc XaLocalFunc) (ret i
|
|||||||
|
|
||||||
// XaGlobalTransaction start a xa global transaction
|
// XaGlobalTransaction start a xa global transaction
|
||||||
func (xc *XaClient) XaGlobalTransaction(gid string, xaFunc XaGlobalFunc) (rerr error) {
|
func (xc *XaClient) XaGlobalTransaction(gid string, xaFunc XaGlobalFunc) (rerr error) {
|
||||||
xa := Xa{TransBase: TransBase{IDGenerator: IDGenerator{}, Dtm: xc.Server}, Gid: gid}
|
xa := Xa{TransBase: TransBase{IDGenerator: IDGenerator{}, Dtm: xc.Server}, TransData: TransData{Gid: gid, TransType: "xa"}}
|
||||||
data := &M{
|
rerr = xa.CallDtm(&xa.TransData, "prepare")
|
||||||
"gid": gid,
|
|
||||||
"trans_type": "xa",
|
|
||||||
}
|
|
||||||
rerr = xa.CallDtm(data, "prepare")
|
|
||||||
if rerr != nil {
|
if rerr != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -123,7 +119,7 @@ func (xc *XaClient) XaGlobalTransaction(gid string, xaFunc XaGlobalFunc) (rerr e
|
|||||||
defer func() {
|
defer func() {
|
||||||
x := recover()
|
x := recover()
|
||||||
operation := If(x != nil || rerr != nil, "abort", "submit").(string)
|
operation := If(x != nil || rerr != nil, "abort", "submit").(string)
|
||||||
err := xa.CallDtm(data, operation)
|
err := xa.CallDtm(&xa.TransData, operation)
|
||||||
if rerr == nil { // 如果用户函数没有返回错误,那么返回dtm的
|
if rerr == nil { // 如果用户函数没有返回错误,那么返回dtm的
|
||||||
rerr = err
|
rerr = err
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user