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 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