Here's more or less what happens.
Basically, if an operation is uncommitted but reached a quorum, it is
guaranteed to survive. If it reached less than a quorum it may survive
but may get lost depending on whether the server that has it
participates in a timely manner in leader election phases.
First, FastLeaderElection tries to optimistically choose a leader
candidate that has the most up to date log - a quorum must say that it
does. This phase is an optimization to avoid having the leader fetch
the latest state (this way the leader already has it).
Then, servers connect to the candidate leader (LearnerHandler). If
during this phase the leader discovers someone that is more up-to-date
than itself, it gives up and we go back to the preliminary phase
above. Otherwise, once it has a quorum of followers connected to it,
it basically tries to commit its own log (NEWLEADER is like a propose
and UPTODATE is like a commit of the log).
The NEWLEADER message has a zxid which is higher than any zxid existed before.
It is possible that a minority of the servers didn't participate in
this process, but once NEWLEADER reaches a quorum, servers in this
quorum will be "more up-to-date" than anyone that didn't participate.
So any servers that were lagging behind do not stand a chance becoming
leader unless they get updated from a server that did participate. Any
uncommitted op known to these slow servers will be lost forever.
Later, if such a server connects to the new leader, the uncommitted
ops will be truncated from the log.
Hope this helps.
On Wed, Dec 12, 2012 at 10:31 PM, kishore g <[EMAIL PROTECTED]> wrote:
> I read the docs and presentations online
> https://cwiki.apache.org/ZOOKEEPER/zookeeperpresentations.html about the
> internals of zab. I am confused about what happens to uncommitted proposals
> when new leader is elected after current leader fails. To be precise, these
> are the scenarios i am thinking
> a) new leader has got a proposal that no other follower has seen, will it
> commit this proposal or let it go
> b) new leader has got a proposal that majority of nodes have it, will it
> commit this or let it go. What happens to other followers, will new leader
> ask followers to commit or rollback based on what it does.
> c)new leader does not have proposal but one of the followers has it, is
> this possible?
> From what i understood the new leader simply commits all proposals that he
> has seen irrespective of what other followers have seen.
> Can some one explain what exactly happens, i am more interested in what
> happens in the code
> Kishore G