Browse Source
Merge pull request #180 from dtm-labs/alpha
move Prepare outof CallWithDB
pull/183/head
yedf2
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
12 additions and
6 deletions
-
dtmcli/msg.go
-
dtmsvr/api.go
|
|
@ -44,13 +44,15 @@ func (s *Msg) Submit() error { |
|
|
func (s *Msg) PrepareAndSubmit(queryPrepared string, db *sql.DB, busiCall BarrierBusiFunc) error { |
|
|
func (s *Msg) PrepareAndSubmit(queryPrepared string, db *sql.DB, busiCall BarrierBusiFunc) 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 = bb.CallWithDB(db, func(tx *sql.Tx) error { |
|
|
err = s.Prepare(queryPrepared) |
|
|
err := busiCall(tx) |
|
|
} |
|
|
if err == nil { |
|
|
if err == nil { |
|
|
err = s.Prepare(queryPrepared) |
|
|
defer func() { |
|
|
|
|
|
if err != nil && bb.QueryPrepared(db) == ErrFailure { |
|
|
|
|
|
_ = dtmimp.TransCallDtm(&s.TransBase, s, "abort") |
|
|
} |
|
|
} |
|
|
return err |
|
|
}() |
|
|
}) |
|
|
err = bb.CallWithDB(db, busiCall) |
|
|
} |
|
|
} |
|
|
if err == nil { |
|
|
if err == nil { |
|
|
err = s.Submit() |
|
|
err = s.Submit() |
|
|
|
|
|
@ -46,6 +46,10 @@ func svcPrepare(t *TransGlobal) interface{} { |
|
|
|
|
|
|
|
|
func svcAbort(t *TransGlobal) interface{} { |
|
|
func svcAbort(t *TransGlobal) interface{} { |
|
|
dbt := GetTransGlobal(t.Gid) |
|
|
dbt := GetTransGlobal(t.Gid) |
|
|
|
|
|
if dbt.TransType == "msg" && dbt.Status == dtmcli.StatusPrepared { |
|
|
|
|
|
dbt.changeStatus(dtmcli.StatusFailed) |
|
|
|
|
|
return nil |
|
|
|
|
|
} |
|
|
if t.TransType != "xa" && t.TransType != "tcc" || dbt.Status != dtmcli.StatusPrepared && dbt.Status != dtmcli.StatusAborting { |
|
|
if t.TransType != "xa" && t.TransType != "tcc" || dbt.Status != dtmcli.StatusPrepared && dbt.Status != dtmcli.StatusAborting { |
|
|
return fmt.Errorf("trans type: '%s' current status '%s', cannot abort. %w", dbt.TransType, dbt.Status, dtmcli.ErrFailure) |
|
|
return fmt.Errorf("trans type: '%s' current status '%s', cannot abort. %w", dbt.TransType, dbt.Status, dtmcli.ErrFailure) |
|
|
} |
|
|
} |
|
|
|