Class Learner

  • Direct Known Subclasses:
    Follower, Observer

    public class Learner
    extends Object
    This class is the superclass of two of the three main actors in a ZK ensemble: Followers and Observers. Both Followers and Observers share a good deal of code which is moved into Peer to avoid duplication.
    • Constructor Detail

      • Learner

        public Learner()
    • Method Detail

      • getSocket

        public Socket getSocket()
        Socket getter
      • getPendingRevalidationsCount

        public int getPendingRevalidationsCount()
      • setAsyncSending

        protected static void setAsyncSending​(boolean newMode)
      • getAsyncSending

        protected static boolean getAsyncSending()
      • startSendingThread

        protected void startSendingThread()
        Start thread that will forward any packet in the queue to the leader
      • findLeader

        protected QuorumPeer.QuorumServer findLeader()
        Returns the address of the node we think is the leader.
      • nanoTime

        protected long nanoTime()
        Overridable helper method to return the System.nanoTime(). This method behaves identical to System.nanoTime().
      • sockConnect

        protected void sockConnect​(Socket sock,
                                   InetSocketAddress addr,
                                   int timeout)
                            throws IOException
        Overridable helper method to simply call sock.connect(). This can be overriden in tests to fake connection success/failure for connectToLeader.
        Throws:
        IOException
      • connectToLeader

        protected void connectToLeader​(MultipleAddresses multiAddr,
                                       String hostname)
                                throws IOException
        Establish a connection with the LearnerMaster found by findLearnerMaster. Followers only connect to Leaders, Observers can connect to any active LearnerMaster. Retries until either initLimit time has elapsed or 5 tries have happened.
        Parameters:
        multiAddr - - the address of the Peer to connect to.
        Throws:
        IOException - - if the socket connection fails on the 5th attempt if there is an authentication failure while connecting to leader
      • registerWithLeader

        protected long registerWithLeader​(int pktType)
                                   throws IOException
        Once connected to the leader or learner master, perform the handshake protocol to establish a following / observing connection.
        Parameters:
        pktType -
        Returns:
        the zxid the Leader sends for synchronization purposes.
        Throws:
        IOException
      • syncWithLeader

        protected void syncWithLeader​(long newLeaderZxid)
                               throws Exception
        Finally, synchronize our history with the Leader (if Follower) or the LearnerMaster (if Observer).
        Parameters:
        newLeaderZxid -
        Throws:
        IOException
        InterruptedException
        Exception
      • shutdown

        public void shutdown()
        Shutdown the Peer