From ec8d2832d09cf62880a5b7b907f40f4bbf60eca9 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Wed, 5 Jan 2022 21:23:16 +0800 Subject: [PATCH] add PrepareAndSubmit --- dtmcli/barrier.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/dtmcli/barrier.go b/dtmcli/barrier.go index 62f59b2..f515550 100644 --- a/dtmcli/barrier.go +++ b/dtmcli/barrier.go @@ -100,3 +100,37 @@ func (bb *BranchBarrier) CallWithDB(db *sql.DB, busiCall BarrierBusiFunc) error } return bb.Call(tx, busiCall) } + +func (bb *BranchBarrier) QueryPrepared(db *sql.DB) error { + affected, err := insertBarrier(db, bb.TransType, bb.Gid, bb.BranchID, BranchAction, bb.BranchID, bb.Op) + if err != nil { + return err + } + if affected > 0 { + return ErrFailure + } + return nil +} + +func (bb *BranchBarrier) PrepareAndSubmit(msg *Msg, queryPrepared string, db *sql.DB, busiCall BarrierBusiFunc) (err error) { + var tx *sql.Tx + tx, err = db.Begin() + if err == nil { + defer func() { + if err != nil { + _ = tx.Rollback() + } + }() + err = busiCall(tx) + } + if err == nil { + err = msg.Prepare(queryPrepared) + } + if err == nil { + err = tx.Commit() + } + if err == nil { + return msg.Submit() // should not assign err. or else defer may try to rollback a committed tx + } + return err +}