From a9a14750f5ccfc45f0c4b2d1fc81b5005a34388e Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Wed, 10 Nov 2021 22:27:19 +0800 Subject: [PATCH] changeBranchStatus will update timeoutToFail saga sync --- dtmsvr/trans.go | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/dtmsvr/trans.go b/dtmsvr/trans.go index 70ca608..b0e8193 100644 --- a/dtmsvr/trans.go +++ b/dtmsvr/trans.go @@ -75,6 +75,20 @@ func (t *TransGlobal) changeStatus(db *common.DB, status string) *gorm.DB { return dbr } +func (t *TransGlobal) changeBranchStatus(db *common.DB, b *TransBranch, status string) *gorm.DB { + if common.DtmConfig.UpdateBranchSync > 0 || t.TransType == "saga" && t.TimeoutToFail > 0 { + dbr := db.Must().Model(b).Updates(map[string]interface{}{ + "status": status, + "finish_time": time.Now(), + }) + checkAffected(dbr) + } else { // 为了性能优化,把branch的status更新异步化 + updateBranchAsyncChan <- branchStatus{id: b.ID, status: status} + } + b.Status = status + return db.DB +} + func (t *TransGlobal) isTimeout() bool { timeout := t.TimeoutToFail if t.TimeoutToFail == 0 && t.TransType != "saga" { @@ -108,20 +122,6 @@ func (*TransBranch) TableName() string { return "dtm.trans_branch_op" } -func (t *TransBranch) changeStatus(db *common.DB, status string) *gorm.DB { - if common.DtmConfig.UpdateBranchSync > 0 { - dbr := db.Must().Model(t).Updates(map[string]interface{}{ - "status": status, - "finish_time": time.Now(), - }) - checkAffected(dbr) - } else { // 为了性能优化,把branch的status更新异步化 - updateBranchAsyncChan <- branchStatus{id: t.ID, status: status} - } - t.Status = status - return db.DB -} - func checkAffected(db1 *gorm.DB) { if db1.RowsAffected == 0 { panic(fmt.Errorf("rows affected 0, please check for abnormal trans")) @@ -265,7 +265,7 @@ func (t *TransGlobal) getBranchResult(branch *TransBranch) (string, error) { func (t *TransGlobal) execBranch(db *common.DB, branch *TransBranch) error { status, err := t.getBranchResult(branch) if status != "" { - branch.changeStatus(db, status) + t.changeBranchStatus(db, branch, status) } branchMetrics(t, branch, status == dtmcli.StatusSucceed) // if time pass 1500ms and NextCronInterval is not default, then reset NextCronInterval