Skip to content

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

Open
@MilliumOrion

Description

@MilliumOrion
	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)
如果超时就会放弃执行回滚操作

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions