- I have searched the issues of this repository and believe that this is not a duplicate.
Ⅰ. Issue Description
seata源码1.6.1,我现在梳理的情况同步一下:
- 事务超时是被【timeout】定时任务检测到之后将
Begin
状态修改为TimeoutRollbacking
- 在【retryRollbacking】定时任务 中,会拉取
TimeoutRollbacking
状态的事务,进行回滚 - 但【retryRollbacking】的 定时任务 调用
doGlobalRollback(...)
这个方法执行回滚时,retrying 参数给的是true,不触发其内部的queueToRetryRollback(...)
方法
- 但从源码梳理来看,只有进入
queueToRetryRollback
方法,才会将TimeoutRollbacking
状态转换到TimeoutRollbackRetrying
,
public void queueToRetryRollback() throws TransactionException {
this.addSessionLifecycleListener(SessionHolder.getRetryRollbackingSessionManager());
GlobalStatus currentStatus = this.getStatus();
// 这里 将 `TimeoutRollbacking` 状态转换到 `TimeoutRollbackRetrying`
if (SessionStatusValidator.isTimeoutGlobalStatus(currentStatus)) {
this.setStatus(GlobalStatus.TimeoutRollbackRetrying);
} else {
this.setStatus(GlobalStatus.RollbackRetrying);
}
SessionHolder.getRetryRollbackingSessionManager().addGlobalSession(this);
}
- 所以看起来并不满足进入
queueToRetryRollback(...)
方法的条件
1条答案
按热度按时间p1iqtdky1#
I suspect this is a bug