diff --git a/dtmcli/barrier.go b/dtmcli/barrier.go index 251611d..898f831 100644 --- a/dtmcli/barrier.go +++ b/dtmcli/barrier.go @@ -8,6 +8,7 @@ package dtmcli import ( "database/sql" + "errors" "fmt" "net/url" @@ -82,6 +83,10 @@ func (bb *BranchBarrier) Call(tx *sql.Tx, busiCall BarrierBusiFunc) (rerr error) rerr = oerr } + if bb.Op == "msg" && currentAffected == 0 { // for msg's DoAndSubmit, repeated insert should be rejected. + return errors.New("unique key conflict") + } + if (ti.Op == BranchCancel || ti.Op == BranchCompensate) && originAffected > 0 || // null compensate currentAffected == 0 { // repeated request or dangled request return