[
https://issues.apache.org/jira/browse/ZOOKEEPER-3481?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Enrico Olivelli updated ZOOKEEPER-3481:
---------------------------------------
Fix Version/s: (was: 3.5.6)
> The problem of AcceptedEpoch
> ----------------------------
>
> Key: ZOOKEEPER-3481
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3481
> Project: ZooKeeper
> Issue Type: Improvement
> Components: quorum
> Affects Versions: 3.5.5
> Reporter: tom.long
> Priority: Major
> Fix For: 3.5.7
>
>
> If the leader has been elected when the voting participant joins the cluster,
> then it can only act as followers. When Leader.getEpochToPropose is called,
> it does not participate in the voting. However, if the AcceptedEpoch is
> larger than the leader, it will never work properly.The status is as
> follows:LOOKING -> FOLLOWING -> exception -> LOOKING.
> code as follows(Learner.registerWithLeader(int pktType)):
> {code:java}
> if (newEpoch > self.getAcceptedEpoch()){
> wrappedEpochBytes.putInt((int)self.getCurrentEpoch());
> self.setAcceptedEpoch(newEpoch);
> }else if (newEpoch == self.getAcceptedEpoch()){
> // since we have already acked an epoch equal to the leaders, we cannot
> ack
> // again, but we still need to send our lastZxid to the leader so that we
> can
> // sync with it if it does assume leadership of the epoch.
> // the -1 indicates that this reply should not count as an ack for the new
> epoch
> wrappedEpochBytes.putInt(-1);
> }else{
> throw new IOException("Leaders epoch, " + newEpoch + " is less than
> accepted epoch, " + self.getAcceptedEpoch());
> }
> {code}
>
>
--
This message was sent by Atlassian Jira
(v8.3.2#803003)