diff --git a/dtmsvr/trans_type_saga.go b/dtmsvr/trans_type_saga.go index b7d15ca..7f43934 100644 --- a/dtmsvr/trans_type_saga.go +++ b/dtmsvr/trans_type_saga.go @@ -118,7 +118,7 @@ func (t *transSagaProcessor) ProcessOnce(branches []TransBranch) error { } // if csc.concurrent, then check the cOrders. origin one step correspond to 2 step in dtmsvr for _, next := range csc.cOrders[current/2] { - if !rollbacked(next) { + if !rollbacked(2 * next) { return false } } diff --git a/test/saga_concurrent_test.go b/test/saga_concurrent_test.go index e8c32c0..5c33770 100644 --- a/test/saga_concurrent_test.go +++ b/test/saga_concurrent_test.go @@ -51,6 +51,15 @@ func TestSagaConRollbackOrder(t *testing.T) { assert.Equal(t, []string{StatusSucceed, StatusFailed, StatusPrepared, StatusPrepared}, getBranchesStatus(sagaCon.Gid)) } +func TestSagaConRollbackOrder2(t *testing.T) { + sagaCon := genSagaCon(dtmimp.GetFuncName(), false, true) + sagaCon.AddBranchOrder(1, []int{0}) + err := sagaCon.Submit() + assert.Nil(t, err) + waitTransProcessed(sagaCon.Gid) + assert.Equal(t, StatusFailed, getTransStatus(sagaCon.Gid)) + assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(sagaCon.Gid)) +} func TestSagaConCommittedOngoing(t *testing.T) { sagaCon := genSagaCon(dtmimp.GetFuncName(), false, false) busi.MainSwitch.TransOutResult.SetOnce(dtmcli.ResultOngoing)