Class LearnerHandler

  • All Implemented Interfaces:
    java.lang.Runnable

    public class LearnerHandler
    extends ZooKeeperThread
    There will be an instance of this class created by the Leader for each learner. All communication with a learner is handled by this class.
    • Nested Class Summary

      • Nested classes/interfaces inherited from class java.lang.Thread

        java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
    • Field Detail

      • LEADER_CLOSE_SOCKET_ASYNC

        public static final java.lang.String LEADER_CLOSE_SOCKET_ASYNC
        See Also:
        Constant Field Values
      • closeSocketAsync

        public static final boolean closeSocketAsync
      • sock

        protected final java.net.Socket sock
      • sid

        protected long sid
        ZooKeeper server identifier of this learner
      • version

        protected int version
      • packetsReceived

        protected final java.util.concurrent.atomic.AtomicLong packetsReceived
      • packetsSent

        protected final java.util.concurrent.atomic.AtomicLong packetsSent
      • requestsReceived

        protected final java.util.concurrent.atomic.AtomicLong requestsReceived
      • lastZxid

        protected volatile long lastZxid
      • established

        protected final java.util.Date established
      • FORCE_SNAP_SYNC

        public static final java.lang.String FORCE_SNAP_SYNC
        For testing purpose, force learnerMaster to use snapshot to sync with followers
        See Also:
        Constant Field Values
    • Method Detail

      • getSocket

        public java.net.Socket getSocket()
      • getLastZxid

        public long getLastZxid()
      • getEstablished

        public java.util.Date getEstablished()
      • setBufferedOutput

        protected void setBufferedOutput​(java.io.BufferedOutputStream bufferedOutput)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Thread
      • packetToString

        public static java.lang.String packetToString​(QuorumPacket p)
      • run

        public void run()
        This thread will receive packets from the peer and process them and also listen to new connections from new peers.
        Specified by:
        run in interface java.lang.Runnable
        Overrides:
        run in class java.lang.Thread
      • startSendingPackets

        protected void startSendingPackets()
        Start thread that will forward any packet in the queue to the follower
      • shouldSendMarkerPacketForLogging

        protected boolean shouldSendMarkerPacketForLogging()
        Tests need not send marker packets as they are only needed to log quorum packet delays
      • queueCommittedProposals

        protected long queueCommittedProposals​(java.util.Iterator<Leader.Proposal> itr,
                                               long peerLastZxid,
                                               java.lang.Long maxZxid,
                                               java.lang.Long lastCommittedZxid)
        Queue committed proposals into packet queue. The range of packets which is going to be queued are (peerLaxtZxid, maxZxid]
        Parameters:
        itr - iterator point to the proposals
        peerLastZxid - last zxid seen by the follower
        maxZxid - max zxid of the proposal to queue, null if no limit
        lastCommittedZxid - when sending diff, we need to send lastCommittedZxid on the leader to follow Zab 1.0 protocol.
        Returns:
        last zxid of the queued proposal
      • shutdown

        public void shutdown()
      • tickOfNextAckDeadline

        public long tickOfNextAckDeadline()
      • ping

        public void ping()
        ping calls from the learnerMaster to the peers
      • synced

        public boolean synced()
      • getLearnerHandlerInfo

        public java.util.Map<java.lang.String,​java.lang.Object> getLearnerHandlerInfo()
      • resetObserverConnectionStats

        public void resetObserverConnectionStats()
      • getQueuedPackets

        public java.util.Queue<QuorumPacket> getQueuedPackets()
        For testing, return packet queue
      • setFirstPacket

        public void setFirstPacket​(boolean value)
        For testing, we need to reset this value