Class Leader
- java.lang.Object
-
- org.apache.zookeeper.server.quorum.LearnerMaster
-
- org.apache.zookeeper.server.quorum.Leader
-
public class Leader extends LearnerMaster
This 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 Set<Long>connectingFollowersprotected Set<Long>electingFollowersprotected booleanelectionFinishedstatic intLEADERINFOThis message is the first that a follower receives from the leader.static StringMAX_TIME_TO_WAIT_FOR_EPOCHprotected Leader.ProposalnewLeaderProposalstatic intPROPOSALThis message type is sent by a leader to propose a mutation.protected booleanquorumFormed
-
Constructor Summary
Constructors Constructor Description Leader(QuorumPeer self, LeaderZooKeeperServer zk)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddLearnerHandler(LearnerHandler learner)Adds peer to the leader.static QuorumPacketbuildInformAndActivePacket(long zxid, long designatedLeader, byte[] proposalData)voidcommit(long zxid)Create a commit packet and send it to all the members of the quorumvoidcommitAndActivate(long zxid, long designatedLeader)static intgetAckLoggingFrequency()longgetAndDecrementFollowerCounter()intgetCurrentTick()longgetEpoch()Returns the current epoch of the leader.longgetEpochToPropose(long sid, long lastAcceptedEpoch)List<LearnerHandler>getForwardingFollowers()Returns a copy of the current forwarding follower snapshotlonggetLastProposed()List<LearnerHandler>getLearners()Returns a copy of the current learner snapshotList<LearnerHandler>getNonVotingFollowers()intgetNumPendingSyncs()List<LearnerHandler>getObservingLearners()Returns a copy of the current observer snapshotIterable<Map<String,Object>>getObservingLearnersInfo()static StringgetPacketType(int packetType)Get string representation of a given packet typeStringgetPeerInfo(long sid)BufferStatsgetProposalStats()QuorumAuthServergetQuorumAuthServer()byte[]getQuorumVerifierBytes()longgetQuorumVerifierVersion()intgetTickOfInitialAckDeadline()intgetTickOfNextAckDeadline()longgetUptime()ZKDatabasegetZKDatabase()voidinform(Leader.Proposal proposal)Create an inform packet and send it to all observers.voidinformAndActivate(Leader.Proposal proposal, long designatedLeader)Create an inform and activate packet and send it to all observers.booleanisQuorumSynced(QuorumVerifier qv)Returns true if a quorum in qv is connected and synced with the leader and false otherwisevoidprocessAck(long sid, long zxid, 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 membersvoidregisterLearnerHandlerBean(LearnerHandler learnerHandler, Socket socket)voidremoveLearnerHandler(LearnerHandler peer)Remove the learner from the learner listvoidreportLookingSid(long sid)voidresetObserverConnectionStats()voidrevalidateSession(QuorumPacket qp, LearnerHandler learnerHandler)voidsendSync(LearnerSyncRequest r)Sends a sync message to the appropriate serverstatic voidsetAckLoggingFrequency(int frequency)voidsetLeadingVoteSet(SyncedLearnerTracker voteSet)static voidsetMaxTimeToWaitForEpoch(int maxTimeToWaitForEpoch)longstartForwarding(LearnerHandler handler, long lastSeenZxid)lets the leader know that a follower is capable of following and is done syncingvoidsubmitLearnerRequest(Request si)intsyncTimeout()voidtouch(long sess, int to)booleantryToCommit(Leader.Proposal p, long zxid, SocketAddress followerAddr)voidunregisterLearnerHandlerBean(LearnerHandler learnerHandler)voidwaitForEpochAck(long id, StateSummary ss)voidwaitForNewLeaderAck(long sid, long zxid)Process NEWLEADER ack of a given sid and wait until the leader receives sufficient acks.voidwaitForStartup()-
Methods inherited from class org.apache.zookeeper.server.quorum.LearnerMaster
getLearnerDiffSyncThrottler, getLearnerSnapSyncThrottler, getMaxConcurrentDiffSyncs, getMaxConcurrentSnapSyncs, setMaxConcurrentDiffSyncs, setMaxConcurrentSnapSyncs
-
-
-
-
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
-
newLeaderProposal
protected final Leader.Proposal newLeaderProposal
-
MAX_TIME_TO_WAIT_FOR_EPOCH
public static final String MAX_TIME_TO_WAIT_FOR_EPOCH
- See Also:
- Constant Field Values
-
electionFinished
protected boolean electionFinished
-
-
Constructor Detail
-
Leader
public Leader(QuorumPeer self, LeaderZooKeeperServer zk) throws IOException
- Throws:
IOException
-
-
Method Detail
-
setAckLoggingFrequency
public static void setAckLoggingFrequency(int frequency)
-
getAckLoggingFrequency
public static int getAckLoggingFrequency()
-
getProposalStats
public BufferStats getProposalStats()
-
getLearners
public List<LearnerHandler> getLearners()
Returns a copy of the current learner snapshot
-
getForwardingFollowers
public List<LearnerHandler> getForwardingFollowers()
Returns a copy of the current forwarding follower snapshot
-
getNonVotingFollowers
public List<LearnerHandler> getNonVotingFollowers()
-
getObservingLearners
public List<LearnerHandler> getObservingLearners()
Returns a copy of the current observer snapshot
-
resetObserverConnectionStats
public void resetObserverConnectionStats()
-
getNumPendingSyncs
public int getNumPendingSyncs()
-
addLearnerHandler
public void addLearnerHandler(LearnerHandler learner)
Adds peer to the leader.- Parameters:
learner- instance of learner handle
-
removeLearnerHandler
public void removeLearnerHandler(LearnerHandler peer)
Remove the learner from the learner list- Parameters:
peer-
-
isQuorumSynced
public boolean isQuorumSynced(QuorumVerifier qv)
Returns true if a quorum in qv is connected and synced with the leader and false otherwise- Parameters:
qv- is a QuorumVerifier
-
getUptime
public long getUptime()
-
tryToCommit
public boolean tryToCommit(Leader.Proposal p, long zxid, SocketAddress followerAddr)
- Returns:
- True if committed, otherwise false.
-
processAck
public void processAck(long sid, long zxid, SocketAddress followerAddr)Keep a count of acks that are received by the leader for a particular proposal- Parameters:
sid- is the id of the server that sent the ackzxid- is 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-
-
commitAndActivate
public void commitAndActivate(long zxid, long designatedLeader)
-
inform
public void inform(Leader.Proposal proposal)
Create an inform packet and send it to all observers.
-
buildInformAndActivePacket
public static QuorumPacket buildInformAndActivePacket(long zxid, long designatedLeader, byte[] proposalData)
-
informAndActivate
public void informAndActivate(Leader.Proposal proposal, long designatedLeader)
Create an inform and activate packet and send it to all observers.
-
getLastProposed
public long getLastProposed()
-
getEpoch
public long getEpoch()
Returns the current epoch of the leader.
-
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
-
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
-
waitForStartup
public void waitForStartup() throws InterruptedException- Throws:
InterruptedException
-
setMaxTimeToWaitForEpoch
public static void setMaxTimeToWaitForEpoch(int maxTimeToWaitForEpoch)
-
setLeadingVoteSet
public void setLeadingVoteSet(SyncedLearnerTracker voteSet)
-
reportLookingSid
public void reportLookingSid(long sid)
-
getEpochToPropose
public long getEpochToPropose(long sid, long lastAcceptedEpoch) throws InterruptedException, IOException- Throws:
InterruptedExceptionIOException
-
getZKDatabase
public ZKDatabase getZKDatabase()
-
waitForEpochAck
public void waitForEpochAck(long id, StateSummary ss) throws IOException, InterruptedException- Throws:
IOExceptionInterruptedException
-
waitForNewLeaderAck
public void waitForNewLeaderAck(long sid, long zxid) throws InterruptedExceptionProcess NEWLEADER ack of a given sid and wait until the leader receives sufficient acks.- Parameters:
sid-- Throws:
InterruptedException
-
getPacketType
public static String getPacketType(int packetType)
Get string representation of a given packet type- Parameters:
packetType-- Returns:
- string representing the packet type
-
getCurrentTick
public int getCurrentTick()
-
syncTimeout
public int syncTimeout()
-
getTickOfNextAckDeadline
public int getTickOfNextAckDeadline()
-
getTickOfInitialAckDeadline
public int getTickOfInitialAckDeadline()
-
getAndDecrementFollowerCounter
public long getAndDecrementFollowerCounter()
-
touch
public void touch(long sess, int to)
-
submitLearnerRequest
public void submitLearnerRequest(Request si)
-
getQuorumVerifierVersion
public long getQuorumVerifierVersion()
-
getPeerInfo
public String getPeerInfo(long sid)
-
getQuorumVerifierBytes
public byte[] getQuorumVerifierBytes()
-
getQuorumAuthServer
public QuorumAuthServer getQuorumAuthServer()
-
revalidateSession
public void revalidateSession(QuorumPacket qp, LearnerHandler learnerHandler) throws IOException
- Throws:
IOException
-
registerLearnerHandlerBean
public void registerLearnerHandlerBean(LearnerHandler learnerHandler, Socket socket)
-
unregisterLearnerHandlerBean
public void unregisterLearnerHandlerBean(LearnerHandler learnerHandler)
-
-