seata server 源码分析下
Seat 重要流程分析如下:
1.启动seata-server,调用defalutcoordinator, 执行全局提交,去数据库根据
去数据库根据xid查询globalTable表获取全局事务对象
2。建立globalSession=SessionHolder.findGlobalSession,然后拿到globalSession.lockAndExcute
锁去执行。
3,执行如下流程:
4.释放全局锁,其他的分布式事务可以来锁定资源,说白了就是把Lock_table关于本次涉及的行锁记录全部删除
判断是有TCC分支,如果有同步提交
如果没有进行异步提交。
5.执行异步提交:
执行线程池的异步提交:
从全局事务获取所有的分支事务,判断分支事务的第一阶段的状态是否为提交失败状态,
如果是:调用globalSession.removeBranch(branchSession);
如果否:回调用分支事务(微服务二阶段提交)
分支微服务二阶段提交的结果状态,去判断全局状态:判断流程如下:
6.缺省条件下执行
7.循环执行线程池,启动定时任务,retryCommitting定时任务,handleRetryCommitting,循环到doGlobalCommit