clear阶段主要做了两件事情:写一条clear日志,释放参与者上下文。在commit之后增加一个clear阶段,主要是为了将“释放上下文”的操作推迟到clear阶段执行,避免出现一个参与者还在prepare阶段另一个参与者就已经释放了上下文这种情况。在遇到上面的场景时,宕机重启后P1可以通过commit日志恢复到commit阶段(因为还有clear阶段,所以只有commit日志说明事务还没有结束),P2处于prepare阶段,事务还可以继续推进。
1 释放上下文的意思, 我可以理解为释放行锁吗?
2 图片中描述 "“长期完成之后, 其中内p1内存状态已经结束”; 我理解意思就是内存数据消失了对吧?
3 p1 重启后应该分两种情况, 1是commit日志未落盘, 2是commit 日志落盘了; 这两种要分别讨论吧?
4 p2 重启后, 应该也有两种情况讨论, 1 是prepare日志未落盘, 2是prepare日志落盘, 这两种要分别讨论吧?
4.1 不好意思, 第4个我刚才理解应该有问题, 只要进入clear 阶段, prepare 日志肯定是落盘的.
- 释放上下文包括释放行锁;
- 内存状态结束也就是释放上下文,更深层的含义就是,宕机重启后也不会恢复上下文了,因为此时认为该参与者已经提交成功;
- p1 commit日志未落盘,重启后回到prepare阶段,跟p2一样,并不会有什么问题,所以没有说明;