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

    Details

    • Type: Sub-task Sub-task
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 3.4.0
    • Fix Version/s: 3.4.0, 3.5.0
    • Component/s: server
    • Labels:
      None
    • Release Note:
      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);

        Issue Links

          Activity

          Hide
          Benjamin Reed added a comment -

          i can easily put a test and fix for this in once ZOOKEEPER-1264 goes in. (we need to move the self.setCurrentEpoch up to after the NEWLEADER. the check is easy to add in the unit test.)

          Show
          Benjamin Reed added a comment - i can easily put a test and fix for this in once ZOOKEEPER-1264 goes in. (we need to move the self.setCurrentEpoch up to after the NEWLEADER. the check is easy to add in the unit test.)
          Hide
          Benjamin Reed added a comment -

          there is a test and a fix for this in ZOOKEEPER-1264

          Show
          Benjamin Reed added a comment - there is a test and a fix for this in ZOOKEEPER-1264
          Hide
          Hudson added a comment -

          Integrated in ZooKeeper-trunk #1357 (See https://builds.apache.org/job/ZooKeeper-trunk/1357/)
          ZOOKEEPER-1264. FollowerResyncConcurrencyTest failing intermittently.
          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.
          ZOOKEEPER-1291. AcceptedEpoch not updated at leader before it proposes the epoch to followers.

          camille : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1198053
          Files :

          • /zookeeper/trunk/CHANGES.txt
          • /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Leader.java
          • /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Learner.java
          • /zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/Zab1_0Test.java
          • /zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FollowerResyncConcurrencyTest.java
          Show
          Hudson added a comment - Integrated in ZooKeeper-trunk #1357 (See https://builds.apache.org/job/ZooKeeper-trunk/1357/ ) ZOOKEEPER-1264 . FollowerResyncConcurrencyTest failing intermittently. 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. ZOOKEEPER-1291 . AcceptedEpoch not updated at leader before it proposes the epoch to followers. camille : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1198053 Files : /zookeeper/trunk/CHANGES.txt /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Leader.java /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Learner.java /zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/Zab1_0Test.java /zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FollowerResyncConcurrencyTest.java

            People

            • Assignee:
              Benjamin Reed
              Reporter:
              Alexander Shraer
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development