diff --git a/dtmsvr/trans.go b/dtmsvr/trans.go index 3e8a156..568a179 100644 --- a/dtmsvr/trans.go +++ b/dtmsvr/trans.go @@ -138,7 +138,7 @@ func (t *TransGlobal) getBranchParams(branch *TransBranch) common.MS { func (t *TransGlobal) setNextCron(expireIn int64) []string { t.NextCronInterval = expireIn - next := time.Now().Add(time.Duration(config.TransCronInterval) * time.Second) + next := time.Now().Add(time.Duration(t.NextCronInterval) * time.Second) t.NextCronTime = &next return []string{"next_cron_interval", "next_cron_time"} } diff --git a/dtmsvr/trans_saga.go b/dtmsvr/trans_saga.go index 7c56dc8..1d8c4eb 100644 --- a/dtmsvr/trans_saga.go +++ b/dtmsvr/trans_saga.go @@ -51,16 +51,19 @@ func (t *transSagaProcessor) ExecBranch(db *common.DB, branch *TransBranch) { } func (t *transSagaProcessor) ProcessOnce(db *common.DB, branches []TransBranch) { - if t.Status != "submitted" { + if t.Status == "failed" || t.Status == "succeed" { return } current := 0 // 当前正在处理的步骤 for ; current < len(branches); current++ { branch := &branches[current] - if branch.BranchType != "action" || branch.Status != "prepared" { + if branch.BranchType != "action" || branch.Status == "succeed" { continue } - t.ExecBranch(db, branch) + // 找到了一个非succeed的action + if branch.Status == "prepared" { + t.ExecBranch(db, branch) + } if branch.Status != "succeed" { break } @@ -79,8 +82,5 @@ func (t *transSagaProcessor) ProcessOnce(db *common.DB, branches []TransBranch) } t.ExecBranch(db, branch) } - if current != -1 { - panic(fmt.Errorf("saga current not -1")) - } - t.changeStatus(db.Must(), "failed") + t.changeStatus(db, "failed") } diff --git a/dtmsvr/trans_tcc.go b/dtmsvr/trans_tcc.go index 9df472b..0b8c597 100644 --- a/dtmsvr/trans_tcc.go +++ b/dtmsvr/trans_tcc.go @@ -39,11 +39,10 @@ func (t *transTccProcessor) ProcessOnce(db *common.DB, branches []TransBranch) { return } branchType := common.If(t.Status == "submitted", "confirm", "cancel").(string) - for current := len(branches) - 1; current >= -1; current-- { - if current == -1 { // 已全部处理完 - t.changeStatus(db, common.If(t.Status == "submitted", "succeed", "failed").(string)) - } else if branches[current].BranchType == branchType { + for current := len(branches) - 1; current >= 0; current-- { + if branches[current].BranchType == branchType && branches[current].Status == "prepared" { t.ExecBranch(db, &branches[current]) } } + t.changeStatus(db, common.If(t.Status == "submitted", "succeed", "failed").(string)) }