Class ObserverMaster
- java.lang.Object
-
- org.apache.zookeeper.server.quorum.LearnerMaster
-
- org.apache.zookeeper.server.quorum.ObserverMaster
-
- All Implemented Interfaces:
Runnable
public class ObserverMaster extends LearnerMaster implements Runnable
Used by Followers to host Observers. This reduces the network load on the Leader process by pushing the responsibility for keeping Observers in sync off the leading peer. It is expected that Observers will continue to perform the initial vetting of clients and requests. Observers send the request to the follower where it is received by an ObserverMaster. The ObserverMaster forwards a copy of the request to the ensemble Leader and inserts it into its own request processor pipeline where it can be matched with the response comes back. All commits received from the Leader will be forwarded along to every Learner connected to the ObserverMaster. New Learners connecting to a Follower will receive a LearnerHandler object and be party to its syncing logic to be brought up to date. The logic is quite a bit simpler than the corresponding logic in Leader because it only hosts observers.
-
-
Method Summary
-
Methods inherited from class org.apache.zookeeper.server.quorum.LearnerMaster
getLearnerDiffSyncThrottler, getLearnerSnapSyncThrottler, getMaxConcurrentDiffSyncs, getMaxConcurrentSnapSyncs, setMaxConcurrentDiffSyncs, setMaxConcurrentSnapSyncs
-
-
-
-
Method Detail
-
addLearnerHandler
public void addLearnerHandler(LearnerHandler learnerHandler)
-
removeLearnerHandler
public void removeLearnerHandler(LearnerHandler learnerHandler)
-
syncTimeout
public int syncTimeout()
-
getTickOfNextAckDeadline
public int getTickOfNextAckDeadline()
-
getTickOfInitialAckDeadline
public int getTickOfInitialAckDeadline()
-
getAndDecrementFollowerCounter
public long getAndDecrementFollowerCounter()
-
waitForEpochAck
public void waitForEpochAck(long sid, StateSummary ss) throws IOException, InterruptedException
- Throws:
IOException
InterruptedException
-
waitForStartup
public void waitForStartup() throws InterruptedException
- Throws:
InterruptedException
-
getLastProposed
public long getLastProposed()
-
getEpochToPropose
public long getEpochToPropose(long sid, long lastAcceptedEpoch) throws InterruptedException, IOException
- Throws:
InterruptedException
IOException
-
getZKDatabase
public ZKDatabase getZKDatabase()
-
waitForNewLeaderAck
public void waitForNewLeaderAck(long sid, long zxid) throws InterruptedException
- Throws:
InterruptedException
-
getCurrentTick
public int getCurrentTick()
-
processAck
public void processAck(long sid, long zxid, SocketAddress localSocketAddress)
-
touch
public void touch(long sess, int to)
-
revalidateSession
public void revalidateSession(QuorumPacket qp, LearnerHandler learnerHandler) throws IOException
- Throws:
IOException
-
submitLearnerRequest
public void submitLearnerRequest(Request si)
-
startForwarding
public long startForwarding(LearnerHandler learnerHandler, long lastSeenZxid)
-
getQuorumVerifierVersion
public long getQuorumVerifierVersion()
-
getPeerInfo
public String getPeerInfo(long sid)
-
getQuorumVerifierBytes
public byte[] getQuorumVerifierBytes()
-
getQuorumAuthServer
public QuorumAuthServer getQuorumAuthServer()
-
start
public void start() throws IOException
- Throws:
IOException
-
stop
public void stop()
-
resetObserverConnectionStats
public void resetObserverConnectionStats()
-
registerLearnerHandlerBean
public void registerLearnerHandlerBean(LearnerHandler learnerHandler, Socket socket)
-
unregisterLearnerHandlerBean
public void unregisterLearnerHandlerBean(LearnerHandler learnerHandler)
-
-