dtm icon indicating copy to clipboard operation
dtm copied to clipboard

SAGA任务在超过timeLimit后放弃回滚

Open MilliumOrion opened this issue 1 year ago • 1 comments

	if t.Status == dtmcli.StatusAborting {
		prepareToCompensate()
	}
	for time.Now().Before(timeLimit) && t.Status == dtmcli.StatusAborting {
		toRun := pickToRunCompensates()
		runBranches(toRun)
		if rsCDone == rsCToStart { // no branch is running, so break
			break
		}
		logger.Debugf("rsCDone: %d rsCToStart: %d", rsCDone, rsCToStart)
		waitDoneOnce()
	}
	if t.Status == dtmcli.StatusAborting && rsCToStart == rsCSucceed {
		t.changeStatus(dtmcli.StatusFailed)
	}

我正在阅读DTM的源码。 我发现在dtmsvr/trans_type_saga.go中处理sage任务时,如果任务状态被标记为StatusAborting则会执行回滚。 但在执行前会判断整个Submit请求是否超时committime.Now().Before(timeLimit) 如果超时就会放弃执行回滚操作

这里让我非常地困惑,不知道是我理解出现了偏差,还是设计如此,亦或是有其他额外的重试机制。

MilliumOrion avatar Dec 16 '24 11:12 MilliumOrion

这个并不是放弃回滚操作,而是说如果这一次运行超过了时间,那么这次不再继续处理这个事务,等待下一次到时间再尝试

yedf2 avatar Feb 04 '25 11:02 yedf2