Closed drmingdrmer closed 4 years ago
I haven't read the example but it has been reported that a single ballot is insufficient: On the correctness of Egalitarian Paxos or this document by @mwhittaker.
Thanks a lot! I'm gonna have a look at this paper. And a fixup would be quite easy.
Epaxos does not store the ballot at which an instance is accepted, which is different from classic paxos. How does epaxos guarantee that an accepted value will be chosen?
Epaxos mentioned that it will choose an accepted value, in Figure 3: The EPaxos simplified recovery procedure:
And it said that only committing a safe value is guaranteed via classic paxos:
Proposition 2. Replicas commit only safe tuples:
Classic paxos need to record the ballot at which a value is accepted(
vrnd
in the classic paxos paper), and it choose the value with the greatest ballot thus only the committed value will be chosen to commit at a higher ballot.Epaxos impl has no such a field, only the last seen ballot. How does it guarantee the committed value will be chosen in this scenario?
With a setup with: n = 7, f = 3;
And instance
a
, a recovery process with ballot=1 wrote an accepteda
witha→b₂
(a
depends onb
andseq
ofb
is 2) at ballot=1 on replica-1(R1
). Then quit.Another recovery process with ballot=2 successfully committed
a
witha→b₃
(a
depends onb
andseq
ofb
is 3) at ballot=2, on replicas(R2, R3, R4, R5
).A third recovery process with ballot=3 sends Prepare to R1 then quit. Now on R1, the ballot for
a
is 3.A forth recovery process prepared on
R1, R2, R3, R4
. It saw two accepted value ofa
:a→b₂
, at ballot=3a→b₃
, at ballot=2After these steps, recovery with ballot=4 would see two accepted value
a→b₂
at ballot=3 on R1, anda→b₃
at ballot=2, on R2, R3, R4.Now what an accepted value could be chosen by the recovery process with ballot=4?
Thank you for your great work and for the help you provided.
:DDD