[ https://issues.apache.org/jira/browse/ZOOKEEPER-1282?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Camille Fournier reassigned ZOOKEEPER-1282: ------------------------------------------- Assignee: Benjamin Reed > Learner.java not following Zab 1.0 protocol - setCurrentEpoch should be done > upon receipt of NEWLEADER (before acking it) and not upon receipt of UPTODATE > ---------------------------------------------------------------------------------------------------------------------------------------------------------- > > Key: ZOOKEEPER-1282 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1282 > Project: ZooKeeper > Issue Type: Bug > Components: server > Affects Versions: 3.4.0 > Reporter: Alexander Shraer > Assignee: Benjamin Reed > > according to https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab1.0 > phase 2 part 2, "Once it receives NEWLEADER(e) it atomically applies > the new state and sets f.currentEpoch =e. " > In Learner.java self.setCurrentEpoch(newEpoch) is done after receiving > UPTODATE and not before acking the NEWLEADER message as should be. > case Leader.UPTODATE: > if (!snapshotTaken) { > zk.takeSnapshot(); > } > self.cnxnFactory.setZooKeeperServer(zk); > break outerLoop; > case Leader.NEWLEADER: // it will be NEWLEADER in v1.0 > zk.takeSnapshot(); > snapshotTaken = true; > writePacket(new QuorumPacket(Leader.ACK, > newLeaderZxid, null, null), true); > break; > } > } > } > long newEpoch = ZxidUtils.getEpochFromZxid(newLeaderZxid); > self.setCurrentEpoch(newEpoch); -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira