Uploaded image for project: 'ZooKeeper'
  1. ZooKeeper
  2. ZOOKEEPER-1264 FollowerResyncConcurrencyTest failing intermittently
  3. ZOOKEEPER-1282

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

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.4.0
    • 3.4.0, 3.5.0
    • server
    • None
    • Revision 1198053

    Description

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

      Attachments

        Issue Links

          Activity

            People

              breed Benjamin Reed
              shralex Alexander Shraer
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: