TIVK 回滚记录 protect_rollback 细节问题:为何可以不被 protect?

首先 CheckTxnStatus 一定会写入 protected rollback;然后如果你担心的是截图中的 ResolveLock 的处理里面没有设置 protected rollback 导致晚到的 prewrite 可能成功,理论上确实有可能,且乐观悲观都有可能,但是不影响事务正确性,因为在此之前 CheckTxnStatus 一定是写过 protected rollback 的(更严谨地说,对于普通 2PC 事务,primary 一定在 CheckTxnStatus 中被写入 protected rollback;对于 async commit 事务,则也有可能某个 secondary 在 CheckSecondaryLocks 期间写入 protected rollback),于是这个事务必定不可能进入 commit 状态,晚到的 prewrite 写入的锁最终总会在 resolve lock 中被清理

(注:上述回复来自我的同事)

2 个赞