Skip to content

Operate transactions design

WangLiang/王良 edited this page Jan 9, 2024 · 38 revisions

控制台操作事务功能设计

全局事务状态分为三⼤类:

  • 重试: GlobalStatus.Committing, GlobalStatus.CommitRetrying, GlobalStatus.Committed, GlobalStatus.TimeoutRollbacking,GlobalStatus.TimeoutRollbackRetrying, GlobalStatus.RollbackRetrying, GlobalStatus.Rollbacking
  • 失败: CommitFailed,RollbackFailed,TimeoutRollbackFailed,CommitRetryTimeout, RollbackRetryTimeout
  • 其他: Begin,AsyncCommitting,Committed,Rollbacked,Finished

下⽂的 重试失败 状态指上述这些状态

1. 释放全局锁:

图片

2. 全局事务操作功能设计:

2.1)删除全局事务:

图片

2.2)停⽌提交/回滚重试:

图片

2.3)继续提交/回滚重试:

2.4)更换状态操作示意图:

图片

注意:定时任务跳过该全局事务为PhaseTwo_STOP_Retryable的状态即可

2.5)发起单次提交/回滚:

图片

2.6)变更状态操作:

图片

问题:
将失败的修改为重试状态:

  • CommitFailed / RollbackFailed :是否要考虑超时时间问题,因为这期间可能过了很久,修改后会⻢上超时⽽失败
  • 针对TimeoutRollbackFailed / CommitRetryTimeout / RollbackRetryTimeout,有两个做法
    • 不⽀持修改,直接报错
    • ⽀持修改,但需要需要传⼊新的超时时间

2.7)修改超时时间:

图片

  • 已结束的全局事务状态有:失败的状态+(CommitFailed,RollbackFailed,TimeoutRollbackFailed,CommitRetryTimeout,RollbackRetryTimeout)+Committed,Rollbacked,Finished
  • 还未结束的全局事务:GlobalStatus.Committing, GlobalStatus.CommitRetrying, GlobalStatus.Committed,GlobalStatus.TimeoutRollbacking,GlobalStatus.TimeoutRollbackRetrying, GlobalStatus.RollbackRetrying, GlobalStatus.Rollbacking,GlobalStatus.Begin,GlobalStatus.AsyncCommitting
Clone this wiki locally