-
Notifications
You must be signed in to change notification settings - Fork 133
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
why commit a instance on fast-path that requires all replicas to be reply equal in preAcceptReply #16
Comments
My recommendation to anyone who wants to implement EPaxos is to avoid using the "seq" attribute. Seq is useful if we want to be able to notify the client that their command is committed before the dependency graph of that command has been finalized. This makes commit faster in the presence of conflicts. However, it introduces this ugly corner case, where "seq" is difficult to recover properly following failures unless we add an extra condition for the fast path (more on this in https://www.pdl.cmu.edu/PDL-FTP/associated/CMU-PDL-13-111.pdf, page 13). This complicates the protocol and it makes it difficult to implement correctly. So how do we avoid using "seq"? Just don't tell the client the command has been committed until its entire dependency graph is finalized (i.e., it cannot change anymore). One simple way to do this is to execute the command first, and then tell the client it's done. This ensures strict serializability without the need for seq. |
But how to resolve the ordering in an SCC without Finally |
You can use any arbitrary criterion to break cycles, as long as you use the same criterion on every replica. For example, a timestamp chosen at the command leader, or even just the command leader’s replica ID. |
😄Thanks for the answer, but I still have some doubts, as follows: Means that if the implementation of seq is not used, then the restriction of And whether the restriction of Finally, what can be done to simplify int the Explicit Prepare Phase |
I believe |
Yes, allEqual is still necessary even if you don't use seq. That's necessary for correct recovery of a command committed on the fast path. However, allCommitted is no longer necessary. |
This is covered in the second-to-last paragraph of section 4.4. in the paper https://www.cs.cmu.edu/~dga/papers/epaxos-sosp2013.pdf: exactly because of this possibility, the optimized EPaxos only works if recovery can distinguish between a->b and a->c. To do so we can (a) make the leader send PreAccepts to only a quorum, or (b), send PreAccepts to all replicas, but commit on the fast path if a quorum agrees with the leader's original deps -- and record that they did. There could be other options as well. In this particular case, recovery will notice the disagreement and conclude that 'a' was not committed on the fast path. Happy new year :) |
Sorry to reopen this issue, because re-reading the paper caused confusion: |
hi, guys:
Why do need all the replies inst. Lb. AllEqual in the preAcceptReply reply to go commit on the fast-path , the following code is implemented:
In the paper, only the fast-quorum of replies with the same instance, then committing on fast-path
Is there anything else I haven't considered?
Thanks
The text was updated successfully, but these errors were encountered: