关于bytejta表
yeruilong opened this issue · comments
想问下作者这个表具体是怎么使用的呢?gxid和bxid分别代表啥?是不是try阶段成功了就插入一条记录?然后再confirm或者cancel的时候插入第二条记录?最后整个事务执行完了把这两条记录都删了?但是这里有个问题,假设confirm阶段有个服务执行失败了,那么这个时候表里就只有try时候的一条记录,那么在进行重试的时候,他怎么依据表里的数据知道是要confirm还是rollback呢?
- bytejta表是用来保障极端情况下数据一致性的: 服务宕机情况下, try/confirm/cancel参与的本地事务可能已经commit也可能尚未commit,它的状态是对TM是未知的。因此,TM后续无法根据它的状态完成后续恢复操作。bytejta表的作用是可以让TM在上文所述的本地事务中插入一条数据,与该本地事务一并提交,后续可以判断该数据存在与否得知该本地事务是否commit;
2.gxid和bxid对应该本地事务ID的全局标识和分支标识;
3.bytejta只做辅助作用,事务状态主要记录在事务日志中。只有少部分场景下,byteTCC才依赖这张表来判断某个本地事务是否被commit。