|
|
|
|
|
by benschulz
1680 days ago
|
|
Quoting from the paper's description of Phase 1: > (b) If an acceptor receives a prepare request with number n greater than that of any prepare request to which it has already responded, then it responds to the request with a promise not to accept any more proposals numbered less than n and with the highest-numbered proposal (if any) that it has accepted. It says an acceptor must respond with the highest-numbered proposal (if any) that it has accepted. How is acceptor C going to do that after step 9? That's where the bug is introduced, I think, not anywhere in the paper. |
|
> If you look at _Lamport's paxos proofs_ he treats an accept as a promise... But this is not pointed out in _Paxos Made Simple_. In fact, it appears Lamport took great pains to specify that an accept was not a promise.
> The problem is when you combine the weaker portions of both variants; as the OP did and several implementations do. Then you run into this catastrophic bug.
That is, Lamport's proofs and Paxos Made Simple contradict each other ever so slightly to trip everyone all at the same time:
> What's more I looked through several proprietary and open-source paxos implementations and they all had the bug submitted by the OP!
https://stackoverflow.com/questions/29880949/contradiction-i...
Lamport himself acknowledges as much: https://www.youtube.com/watch?t=4398&v=8-Bc5Lqgx_c