Seata控制台提供对4种分布式事务的手工控制及AT模式下的全局锁的控制。具体实现原理为根据分布式事务状态机来允许处于不同状态的事务手工事务变更操作,通过更改在存储中(支持Seata Server的所有存储模式file,db,redis及raft)的分布式事务状态来触发下一状态的流程运行。目前支持的功能有:
全局事务操作:
- 删除全局事务:允许已经到达终态的全局 事务删除在Server端存储的数据
- 强制删除全局事务:跳过事务状态检查,直接删除全局事务在在Server端存储的数据
- 停止全局事务:将正在提交或者回滚中的全局事务停止运行
- 开启全局事务重试:将停止的全局事务重新开启重试
- 提交或回滚全局事务:将正在提交、回滚或停止的事务再次尝试提交或者回滚
- 更新全局事务状态:将提交或者回滚失败的事务再次进行提交或者回滚
分支事务操作:
- 删除分支事务:允许已经达到终态的分支事务删除在Server端存储的数据
- 强制删除分支事务:跳过事务状态检查,直接删除分支事务在在Server端存储的数据
- 开启/停止分支事务:停止正在提交或回滚的分支事务,提交或者回滚停止的分支事务
全局锁操作:
- 删除全局锁:删除全局锁记录
背景知识
为了更好的使用事务及全局锁功能,下面对全局事务状态、分支事务状态、全局锁及Seata Server的存储模式进行简要说明。如只想快速开始,可直接查看后续的功能说明章节。
全局事务
- Unknown:全局事务状态不明确,一般在全局事务开始前处于该状态
- Begin:刚开启全局事务,分支事务可能正在执行或未执行
- Committing:二阶段正在提交(所有分支事务执行完后,TM向TC发起全局提交)
- CommitRetrying:提交分支事务返回的不是PhaseTwo_Committed跟PhaseTwo_CommitFailed_Unretryable,或者分支事务提交出现异常,设置为该状态,表示因为可恢复的失败正在重试
- Rollbacking :二阶段正在回滚(TM发起全局回滚,TC接受后更改的状态)
- TimeoutRollbacking:定时任务检查出该全局事务超时后设置某个分支事务回滚时出现异常或返回的分支状态不是PhaseTwo_Rollbacked或PhaseTwo_RollbackFailed_Unretryable(比如返回的是XA分支重试状态或者PhaseTwo_RollbackFailed_Retryable):会设置如下状态
- TimeoutRollbackRetrying:回滚失败且全局事务超时(通常是被定时任务检查出的)
- RollbackRetrying:回滚失败但全局事务并没有超时
- AsyncCommitting:TC在提交时,如果可以异步提交便异步提交,仅仅针对AT模式
- Committed:最终状态,已经成功提交
- CommitFailed:最终状态,提交分支事务返回PhaseTwo_CommitFailed_Unretryable时会设置
- Rollbacked:最终状态,已经成功回滚
- TimeoutRollbacked:最终状态,所有分支事务已经成功回滚,不过后续发现全局事务超时
- RollbackFailed:最终状态,回滚分支事务时返回PhaseTwo_RollbackFailed_Unretryable或者定时任务重试回滚时超时(超过 MAX_ROLLBACK_RETRY_TIMEOUT )
- TimeoutRollbackFailed:最终状态,回滚分支事务返回PhaseTwo_RollbackFailed_Unretryable且全局事务超时
- Finished:最终状态,标注不存在的事务或者状态不明确的事务,在saga模式在分支事务返回PhaseOne_Failed会进行持久化
- CommitRetryTimeout:最终状态,定时任务重试提交超时
- RollbackRetryTimeout:最终状态,定时任务重试回滚超时
- Deleting:事务正在删除中
- StopCommitOrCommitRetry:停止事务提交或事务提交重试
- StopRollbackOrRollbackRetry:停止事务回滚或事务回滚重试