-
Notifications
You must be signed in to change notification settings - Fork 11
Open
Description
你好,我看了你的abstract paxos文章,很有收获,感谢分享!有个疑问想请教一下:
- 根据经典Paxos,在phase-1时,acceptor收到proposal后会返回它之前accept过的最大commit_index的值(以及相应的commit_index)。
- 因此在 “Phase-1.2 读已完成 commit 的 State” 这一步中,writer会读到commit_index比它小的其他已经被accept过的值。那么根据经典Paxos,writer在phase-2中不应该用自己的值,而是应该从收到的这些已经被accept过的值中,选commit_index最大的那个作为phase-2要发送的值。你的另一篇文章 paxos直观解释 也提到过这一步,相当于执行了一次其他proposal的修复(slide-29)。
- 但是在 “Phase-1.2 读已完成 commit 的 State” 这一步中,writer执行的步骤是这样的:
在最大 State 的基础上, 增加 w₁ 自己要写的内容. 最后进行 phase-2 完成 commit
这里似乎并没有显式的执行这个“修复”的步骤?我的理解是:
- 在经典Paxos中,writer需要先显式的执行这个修复步骤,然后再做一次Paxos写入它想要的值。
- 但是这里又有一个问题:writer在执行完修复后,再次运行Paxos,不还是会收到之前accept过的值吗?这样的话,writer就始终无法写入它想要的值,整个协议岂不是就无法proceed了?
- 所以这种情况下,writer是不是应该在完成修复后,开始一个新的paxos instance?也就是说消息里除了commit_index,还需要带instance_id?
- 而在abstract paxos中,writer在phase-2中所用的值(State),其实是在【以前accept过的commit_index最大的值】基础上增加了新的,这相当于把“修复”和“写入writer想要的值”两次合并成了一次,就没有上面的这些问题。。。
不知道我的理解对不对?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels