diff --git a/dtmsvr/trans_msg.go b/dtmsvr/trans_msg.go index a1f7d4c..0ca83ee 100644 --- a/dtmsvr/trans_msg.go +++ b/dtmsvr/trans_msg.go @@ -39,6 +39,8 @@ func (t *TransGlobal) mayQueryPrepared(db *common.DB) { body := t.getURLResult(t.QueryPrepared, "", "", nil) if strings.Contains(body, dtmcli.ResultSuccess) { t.changeStatus(db, dtmcli.StatusSubmitted) + } else if strings.Contains(body, dtmcli.ResultFailure) { + t.changeStatus(db, dtmcli.StatusFailed) } else { t.touch(db, t.NextCronInterval*2) } diff --git a/test/msg_test.go b/test/msg_test.go index 9bf3a12..9e03679 100644 --- a/test/msg_test.go +++ b/test/msg_test.go @@ -12,6 +12,7 @@ func TestMsg(t *testing.T) { msgNormal(t) msgPending(t) + msgPendingFailed(t) } func msgNormal(t *testing.T) { @@ -37,3 +38,16 @@ func msgPending(t *testing.T) { assert.Equal(t, []string{dtmcli.StatusSucceed, dtmcli.StatusSucceed}, getBranchesStatus(msg.Gid)) assert.Equal(t, dtmcli.StatusSucceed, getTransStatus(msg.Gid)) } + +func msgPendingFailed(t *testing.T) { + msg := genMsg("gid-msg-pending-failed") + msg.Prepare("") + assert.Equal(t, dtmcli.StatusPrepared, getTransStatus(msg.Gid)) + examples.MainSwitch.CanSubmitResult.SetOnce("PENDING") + CronTransOnce() + assert.Equal(t, dtmcli.StatusPrepared, getTransStatus(msg.Gid)) + examples.MainSwitch.CanSubmitResult.SetOnce(dtmcli.ResultFailure) + CronTransOnce() + assert.Equal(t, []string{dtmcli.StatusPrepared, dtmcli.StatusPrepared}, getBranchesStatus(msg.Gid)) + assert.Equal(t, dtmcli.StatusFailed, getTransStatus(msg.Gid)) +}