Browse Source

add PrepareAndSubmitBarrier

pull/195/head
yedf2 4 years ago
parent
commit
3e304d2c08
  1. 20
      dtmcli/msg.go

20
dtmcli/msg.go

@ -42,17 +42,25 @@ func (s *Msg) Submit() error {
// PrepareAndSubmit one method for the entire busi->prepare->submit // PrepareAndSubmit one method for the entire busi->prepare->submit
func (s *Msg) PrepareAndSubmit(queryPrepared string, db *sql.DB, busiCall BarrierBusiFunc) error { func (s *Msg) PrepareAndSubmit(queryPrepared string, db *sql.DB, busiCall BarrierBusiFunc) error {
return s.PrepareAndSubmitBarrier(queryPrepared, func(bb *BranchBarrier) error {
return bb.CallWithDB(db, busiCall)
})
}
// PrepareAndSubmitBarrier one method for the entire busi->prepare->submit
func (s *Msg) PrepareAndSubmitBarrier(queryPrepared string, busiCall func(bb *BranchBarrier) error) error {
bb, err := BarrierFrom(s.TransType, s.Gid, "00", "msg") // a special barrier for msg QueryPrepared bb, err := BarrierFrom(s.TransType, s.Gid, "00", "msg") // a special barrier for msg QueryPrepared
if err == nil { if err == nil {
err = s.Prepare(queryPrepared) err = s.Prepare(queryPrepared)
} }
if err == nil { if err == nil {
defer func() { err = busiCall(bb)
if err != nil && bb.QueryPrepared(db) == ErrFailure { if err != nil && err != ErrFailure {
_ = dtmimp.TransCallDtm(&s.TransBase, s, "abort") _, err = dtmimp.TransRequestBranch(&s.TransBase, nil, bb.BranchID, bb.Op, queryPrepared)
} }
}() if err == ErrFailure {
err = bb.CallWithDB(db, busiCall) _ = dtmimp.TransCallDtm(&s.TransBase, s, "abort")
}
} }
if err == nil { if err == nil {
err = s.Submit() err = s.Submit()

Loading…
Cancel
Save