Browse Source

saga add RollbackReason

pull/311/head
xyctruth 4 years ago
parent
commit
9e5cb99d13
  1. 9
      dtmsvr/trans_type_saga.go
  2. 2
      test/saga_options_test.go
  3. 5
      test/saga_test.go

9
dtmsvr/trans_type_saga.go

@ -55,7 +55,7 @@ func (t *transSagaProcessor) ProcessOnce(branches []TransBranch) error {
// when saga tasks is fetched, it always need to process
logger.Debugf("status: %s timeout: %t", t.Status, t.isTimeout())
if t.Status == dtmcli.StatusSubmitted && t.isTimeout() {
t.changeStatus(dtmcli.StatusAborting)
t.changeStatus(dtmcli.StatusAborting, withRollbackReason(fmt.Sprintf("Timeout after %d seconds", t.TimeoutToFail)))
}
n := len(branches)
@ -219,8 +219,11 @@ func (t *transSagaProcessor) ProcessOnce(branches []TransBranch) error {
t.changeStatus(dtmcli.StatusSucceed)
return nil
}
if t.Status == dtmcli.StatusSubmitted && (rsAFailed > 0 || t.isTimeout()) {
t.changeStatus(dtmcli.StatusAborting)
if t.Status == dtmcli.StatusSubmitted && rsAFailed > 0 {
t.changeStatus(dtmcli.StatusAborting, withRollbackReason("Transaction branch execution failed"))
}
if t.Status == dtmcli.StatusSubmitted && t.isTimeout() {
t.changeStatus(dtmcli.StatusAborting, withRollbackReason(fmt.Sprintf("Timeout after %d seconds", t.TimeoutToFail)))
}
if t.Status == dtmcli.StatusAborting {
prepareToCompensate()

2
test/saga_options_test.go

@ -56,6 +56,8 @@ func TestSagaOptionsTimeout(t *testing.T) {
cronTransOnceForwardNow(t, gid, 3600)
assert.Equal(t, StatusFailed, getTransStatus(saga.Gid))
assert.Equal(t, []string{StatusSucceed, StatusPrepared, StatusPrepared, StatusPrepared}, getBranchesStatus(saga.Gid))
assert.Regexp(t, `^Timeout after \d+ seconds$`, getTrans(gid).RollbackReason)
}
func TestSagaGlobalTransWithRequestTimeout(t *testing.T) {

5
test/saga_test.go

@ -22,6 +22,7 @@ func TestSagaNormal(t *testing.T) {
waitTransProcessed(saga.Gid)
assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
assert.Equal(t, "", getTrans(saga.Gid).RollbackReason)
}
func TestSagaRollback(t *testing.T) {
@ -31,6 +32,7 @@ func TestSagaRollback(t *testing.T) {
waitTransProcessed(saga.Gid)
assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid))
assert.Equal(t, StatusFailed, getTransStatus(saga.Gid))
assert.Equal(t, "Transaction branch execution failed", getTrans(saga.Gid).RollbackReason)
}
func TestSagaOngoingSucceed(t *testing.T) {
@ -44,6 +46,7 @@ func TestSagaOngoingSucceed(t *testing.T) {
cronTransOnce(t, gid)
assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid))
assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid))
assert.Equal(t, "", getTrans(saga.Gid).RollbackReason)
}
func TestSagaFailed(t *testing.T) {
@ -54,9 +57,11 @@ func TestSagaFailed(t *testing.T) {
assert.Nil(t, err)
waitTransProcessed(saga.Gid)
assert.Equal(t, StatusAborting, getTransStatus(saga.Gid))
assert.Equal(t, "Transaction branch execution failed", getTrans(saga.Gid).RollbackReason)
cronTransOnce(t, gid)
assert.Equal(t, StatusFailed, getTransStatus(saga.Gid))
assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid))
assert.Equal(t, "Transaction branch execution failed", getTrans(saga.Gid).RollbackReason)
}
func TestSagaAbnormal(t *testing.T) {

Loading…
Cancel
Save