Class Leader
- java.lang.Object
-
- org.apache.zookeeper.server.quorum.Leader
-
public class Leader extends java.lang.ObjectThis class has the control logic for the Leader.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classLeader.Proposalstatic classLeader.XidRolloverException
-
Field Summary
Fields Modifier and Type Field Description static intACKEPOCHThis message is used by the follow to ack a proposed epoch.protected java.util.Set<java.lang.Long>connectingFollowersprotected java.util.Set<java.lang.Long>electingFollowersprotected booleanelectionFinishedstatic intLEADERINFOThis message is the first that a follower receives from the leader.static intPROPOSALThis message type is sent by a leader to propose a mutation.protected booleanquorumFormed
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcommit(long zxid)Create a commit packet and send it to all the members of the quorumlonggetEpoch()Returns the current epoch of the leader.longgetEpochToPropose(long sid, long lastAcceptedEpoch)java.util.List<LearnerHandler>getForwardingFollowers()Returns a copy of the current forwarding follower snapshotjava.util.List<LearnerHandler>getLearners()Returns a copy of the current learner snapshotintgetNumPendingSyncs()java.util.List<LearnerHandler>getObservingLearners()Returns a copy of the current observer snapshotstatic java.lang.StringgetPacketType(int packetType)Get string representation of a given packet typeProposalStatsgetProposalStats()voidinform(Leader.Proposal proposal)Create an inform packet and send it to all observers.voidprocessAck(long sid, long zxid, java.net.SocketAddress followerAddr)Keep a count of acks that are received by the leader for a particular proposalvoidprocessSync(LearnerSyncRequest r)Process sync requestsLeader.Proposalpropose(Request request)create a proposal and send it out to all the membersvoidsendSync(LearnerSyncRequest r)Sends a sync message to the appropriate serverlongstartForwarding(LearnerHandler handler, long lastSeenZxid)lets the leader know that a follower is capable of following and is done syncingvoidwaitForEpochAck(long id, StateSummary ss)voidwaitForNewLeaderAck(long sid, long zxid)Process NEWLEADER ack of a given sid and wait until the leader receives sufficient acks.
-
-
-
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
-
getProposalStats
public ProposalStats getProposalStats()
-
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 outfollowerAddr-
-
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:
-
propose
public Leader.Proposal propose(Request request) throws Leader.XidRolloverException
create a proposal and send it out to all the members- Parameters:
request-- Returns:
- the proposal that is queued to send to all the members
- Throws:
Leader.XidRolloverException
-
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.InterruptedExceptionjava.io.IOException
-
waitForEpochAck
public void waitForEpochAck(long id, StateSummary ss) throws java.io.IOException, java.lang.InterruptedException- Throws:
java.io.IOExceptionjava.lang.InterruptedException
-
waitForNewLeaderAck
public void waitForNewLeaderAck(long sid, long zxid) throws java.lang.InterruptedExceptionProcess 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
-
-