liuyangming / ByteTCC

ByteTCC is a distributed transaction manager based on the TCC(Try/Confirm/Cancel) mechanism. It’s compatible with the JTA specification. User guide: https://github.com/liuyangming/ByteTCC/wiki
https://www.bytesoft.org/
GNU Lesser General Public License v3.0
2.9k stars 911 forks source link

关于bytejta表 #140

Open yeruilong opened 3 years ago

yeruilong commented 3 years ago

想问下作者这个表具体是怎么使用的呢?gxid和bxid分别代表啥?是不是try阶段成功了就插入一条记录?然后再confirm或者cancel的时候插入第二条记录?最后整个事务执行完了把这两条记录都删了?但是这里有个问题,假设confirm阶段有个服务执行失败了,那么这个时候表里就只有try时候的一条记录,那么在进行重试的时候,他怎么依据表里的数据知道是要confirm还是rollback呢?

liuyangming commented 3 years ago
  1. bytejta表是用来保障极端情况下数据一致性的: 服务宕机情况下, try/confirm/cancel参与的本地事务可能已经commit也可能尚未commit,它的状态是对TM是未知的。因此,TM后续无法根据它的状态完成后续恢复操作。bytejta表的作用是可以让TM在上文所述的本地事务中插入一条数据,与该本地事务一并提交,后续可以判断该数据存在与否得知该本地事务是否commit;

2.gxid和bxid对应该本地事务ID的全局标识和分支标识;

3.bytejta只做辅助作用,事务状态主要记录在事务日志中。只有少部分场景下,byteTCC才依赖这张表来判断某个本地事务是否被commit。