diff --git a/dtmsvr/trans.go b/dtmsvr/trans.go index 105a02b..8da935b 100644 --- a/dtmsvr/trans.go +++ b/dtmsvr/trans.go @@ -154,20 +154,17 @@ func (t *TransGlobal) SaveNew(db *common.DB) { dbr := db.Must().Clauses(clause.OnConflict{ DoNothing: true, }).Create(t) - if dbr.RowsAffected == 0 && t.Status == "committed" { // 如果数据库已经存放了prepared的事务,则修改状态 + if dbr.RowsAffected > 0 { // 如果这个是新事务,保存所有的分支 + branches := t.getProcessor().GenBranches() + if len(branches) > 0 { + writeTransLog(t.Gid, "save branches", t.Status, "", common.MustMarshalString(branches)) + db.Must().Clauses(clause.OnConflict{ + DoNothing: true, + }).Create(&branches) + } + } else if dbr.RowsAffected == 0 && t.Status == "committed" { // 如果数据库已经存放了prepared的事务,则修改状态 dbr = db.Must().Model(t).Where("gid=? and status=?", t.Gid, "prepared").Select(append(updates, "status")).Updates(t) } - if dbr.RowsAffected == 0 { // 未保存任何数据,直接返回 - return nil - } - // 保存所有的分支 - branches := t.getProcessor().GenBranches() - if len(branches) > 0 { - writeTransLog(t.Gid, "save branches", t.Status, "", common.MustMarshalString(branches)) - db.Must().Clauses(clause.OnConflict{ - DoNothing: true, - }).Create(&branches) - } return nil }) e2p(err) diff --git a/dtmsvr/trans_msg.go b/dtmsvr/trans_msg.go index be82917..88454f2 100644 --- a/dtmsvr/trans_msg.go +++ b/dtmsvr/trans_msg.go @@ -22,7 +22,7 @@ func (t *TransMsgProcessor) GenBranches() []TransBranch { for _, step := range steps { branches = append(branches, TransBranch{ Gid: t.Gid, - Branch: fmt.Sprintf("%d", len(branches)+1), + Branch: common.GenGid(), Data: step["data"].(string), Url: step["action"].(string), BranchType: "action", diff --git a/dtmsvr/trans_saga.go b/dtmsvr/trans_saga.go index 3ef83ed..f4e6bf3 100644 --- a/dtmsvr/trans_saga.go +++ b/dtmsvr/trans_saga.go @@ -20,10 +20,11 @@ func (t *TransSagaProcessor) GenBranches() []TransBranch { steps := []M{} common.MustUnmarshalString(t.Data, &steps) for _, step := range steps { + branch := common.GenGid() for _, branchType := range []string{"compensate", "action"} { branches = append(branches, TransBranch{ Gid: t.Gid, - Branch: fmt.Sprintf("%d", len(branches)+1), + Branch: branch, Data: step["data"].(string), Url: step[branchType].(string), BranchType: branchType, diff --git a/dtmsvr/trans_tcc.go b/dtmsvr/trans_tcc.go index afd95a8..21734fd 100644 --- a/dtmsvr/trans_tcc.go +++ b/dtmsvr/trans_tcc.go @@ -20,10 +20,11 @@ func (t *TransTccProcessor) GenBranches() []TransBranch { steps := []M{} common.MustUnmarshalString(t.Data, &steps) for _, step := range steps { + branch := common.GenGid() for _, branchType := range []string{"cancel", "confirm", "try"} { branches = append(branches, TransBranch{ Gid: t.Gid, - Branch: fmt.Sprintf("%d", len(branches)+1), + Branch: branch, Data: step["data"].(string), Url: step[branchType].(string), BranchType: branchType,