Skip to content

"Phase-1.2 读已完成 commit 的 State" 的一个疑问 #3

@zhoupingjay

Description

@zhoupingjay

你好,我看了你的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想要的值”两次合并成了一次,就没有上面的这些问题。。。

不知道我的理解对不对?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions