Learner (Apache ZooKeeper - Server 3.7.0 API)
Date: 2021-03-17

org.apache.zookeeper.server.quorum

## Class Learner

- java.lang.Object
- - org.apache.zookeeper.server.quorum.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.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected BufferedOutputStream` | `bufferedOutput`
    `static boolean` | `closeSocketAsync`
    `protected MultipleAddresses` | `leaderAddr`
    `protected InputArchive` | `leaderIs`
    `protected OutputArchive` | `leaderOs`
    `protected int` | `leaderProtocolVersion` the protocol version of the leader
    `static String` | `LEARNER_ASYNC_SENDING`
    `static String` | `LEARNER_CLOSE_SOCKET_ASYNC`
    `protected static org.slf4j.Logger` | `LOG`
    `protected MessageTracker` | `messageTracker`
    `protected Socket` | `sock`
    `protected AtomicBoolean` | `sockBeingClosed`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `Learner()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `connectToLeader(MultipleAddresses multiAddr, String hostname)` Establish a connection with the LearnerMaster found by findLearnerMaster.
    `protected Socket` | `createSocket()` Creating a simple or and SSL socket.
    `protected QuorumPeer.QuorumServer` | `findLeader()` Returns the address of the node we think is the leader.
    `protected static boolean` | `getAsyncSending()`
    `int` | `getPendingRevalidationsCount()`
    `Socket` | `getSocket()` Socket getter
    `protected long` | `nanoTime()` Overridable helper method to return the System.nanoTime().
    `protected void` | `ping(QuorumPacket qp)`
    `protected long` | `registerWithLeader(int pktType)` Once connected to the leader or learner master, perform the handshake protocol to establish a following / observing connection.
    `protected void` | `revalidate(QuorumPacket qp)`
    `protected static void` | `setAsyncSending(boolean newMode)`
    `void` | `shutdown()` Shutdown the Peer
    `protected void` | `sockConnect(Socket sock, InetSocketAddress addr, int timeout)` Overridable helper method to simply call sock.connect().
    `protected void` | `startSendingThread()` Start thread that will forward any packet in the queue to the leader
    `protected void` | `syncWithLeader(long newLeaderZxid)` Finally, synchronize our history with the Leader (if Follower) or the LearnerMaster (if Observer).

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### bufferedOutput

          protected BufferedOutputStream bufferedOutput

    - #### sock

          protected Socket sock

    - #### leaderAddr

          protected MultipleAddresses leaderAddr

    - #### sockBeingClosed

          protected AtomicBoolean sockBeingClosed

    - #### leaderIs

          protected InputArchive leaderIs

    - #### leaderOs

          protected OutputArchive leaderOs

    - #### leaderProtocolVersion

          protected int leaderProtocolVersion

      the protocol version of the leader

    - #### messageTracker

          protected final MessageTracker messageTracker

    - #### LOG

          protected static final org.slf4j.Logger LOG

    - #### LEARNER_ASYNC_SENDING

          public static final String LEARNER_ASYNC_SENDING

      See Also:
        Constant Field Values

    - #### LEARNER_CLOSE_SOCKET_ASYNC

          public static final String LEARNER_CLOSE_SOCKET_ASYNC

      See Also:
        Constant Field Values

    - #### closeSocketAsync

          public static final boolean closeSocketAsync

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

    - #### createSocket

          protected Socket createSocket()
                                 throws X509Exception,
                                        IOException

      Creating a simple or and SSL socket. This can be overridden in tests to fake already connected sockets for connectToLeader.
      Throws:
        `X509Exception`
        `IOException`

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

    - #### revalidate

          protected void revalidate(QuorumPacket qp)
                             throws IOException

      Throws:
        `IOException`

    - #### ping

          protected void ping(QuorumPacket qp)
                       throws IOException

      Throws:
        `IOException`

    - #### shutdown

          public void shutdown()

      Shutdown the Peer

Copyright © 2008–2021 The Apache Software Foundation. All rights reserved.