[ https://issues.apache.org/jira/browse/ZOOKEEPER-3481?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andor Molnar reassigned ZOOKEEPER-3481: --------------------------------------- Assignee: (was: Andor Molnar) > 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.6 > > > If the leader has been elected when the voting participant joins the cluster, > then it can only act as followers. When getepochtoveto 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 (v7.6.14#76016)