Class Leader


  • public class Leader
    extends java.lang.Object
    This class has the control logic for the Leader.
    • Field Detail

      • quorumFormed

        protected boolean quorumFormed
      • LEADERINFO

        public static final int LEADERINFO
        This message is the first that a follower receives from the leader. It has the protocol version and the epoch of the leader.
        See Also:
        Constant Field Values
      • ACKEPOCH

        public static final int ACKEPOCH
        This message is used by the follow to ack a proposed epoch.
        See Also:
        Constant Field Values
      • PROPOSAL

        public static final int PROPOSAL
        This message type is sent by a leader to propose a mutation.
        See Also:
        Constant Field Values
      • connectingFollowers

        protected java.util.Set<java.lang.Long> connectingFollowers
      • electingFollowers

        protected java.util.Set<java.lang.Long> electingFollowers
      • electionFinished

        protected boolean electionFinished
    • Method Detail

      • getLearners

        public java.util.List<LearnerHandler> getLearners()
        Returns a copy of the current learner snapshot
      • getForwardingFollowers

        public java.util.List<LearnerHandler> getForwardingFollowers()
        Returns a copy of the current forwarding follower snapshot
      • getObservingLearners

        public java.util.List<LearnerHandler> getObservingLearners()
        Returns a copy of the current observer snapshot
      • getNumPendingSyncs

        public int getNumPendingSyncs()
      • processAck

        public void processAck​(long sid,
                               long zxid,
                               java.net.SocketAddress followerAddr)
        Keep a count of acks that are received by the leader for a particular proposal
        Parameters:
        zxid - the zxid of the proposal sent out
        followerAddr -
      • commit

        public void commit​(long zxid)
        Create a commit packet and send it to all the members of the quorum
        Parameters:
        zxid -
      • inform

        public void inform​(Leader.Proposal proposal)
        Create an inform packet and send it to all observers.
        Parameters:
        zxid -
        proposal -
      • getEpoch

        public long getEpoch()
        Returns the current epoch of the leader.
        Returns:
      • processSync

        public void processSync​(LearnerSyncRequest r)
        Process sync requests
        Parameters:
        r - the request
      • sendSync

        public void sendSync​(LearnerSyncRequest r)
        Sends a sync message to the appropriate server
        Parameters:
        f -
        r -
      • startForwarding

        public long startForwarding​(LearnerHandler handler,
                                    long lastSeenZxid)
        lets the leader know that a follower is capable of following and is done syncing
        Parameters:
        handler - handler of the follower
        Returns:
        last proposed zxid
      • getEpochToPropose

        public long getEpochToPropose​(long sid,
                                      long lastAcceptedEpoch)
                               throws java.lang.InterruptedException,
                                      java.io.IOException
        Throws:
        java.lang.InterruptedException
        java.io.IOException
      • waitForEpochAck

        public void waitForEpochAck​(long id,
                                    StateSummary ss)
                             throws java.io.IOException,
                                    java.lang.InterruptedException
        Throws:
        java.io.IOException
        java.lang.InterruptedException
      • waitForNewLeaderAck

        public void waitForNewLeaderAck​(long sid,
                                        long zxid)
                                 throws java.lang.InterruptedException
        Process NEWLEADER ack of a given sid and wait until the leader receives sufficient acks.
        Parameters:
        sid -
        Throws:
        java.lang.InterruptedException
      • getPacketType

        public static java.lang.String getPacketType​(int packetType)
        Get string representation of a given packet type
        Parameters:
        packetType -
        Returns:
        string representing the packet type