Class LearnerSessionTracker
java.lang.Object
org.apache.zookeeper.server.quorum.UpgradeableSessionTracker
org.apache.zookeeper.server.quorum.LearnerSessionTracker
- All Implemented Interfaces:
SessionTracker
The learner session tracker is used by learners (followers and observers) to
track zookeeper sessions which may or may not be echoed to the leader. When
a new session is created it is saved locally in a wrapped
LocalSessionTracker. It can subsequently be upgraded to a global session
as required. If an upgrade is requested the session is removed from local
collections while keeping the same session ID. It is up to the caller to
queue a session creation request for the leader.
A secondary function of the learner session tracker is to remember sessions
which have been touched in this service. This information is passed along
to the leader with a ping.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.zookeeper.server.SessionTracker
SessionTracker.Session, SessionTracker.SessionExpirer
-
Field Summary
Fields inherited from class org.apache.zookeeper.server.quorum.UpgradeableSessionTracker
localSessionsEnabled, localSessionTracker
-
Constructor Summary
ConstructorsConstructorDescriptionLearnerSessionTracker
(SessionTracker.SessionExpirer expirer, ConcurrentMap<Long, Integer> sessionsWithTimeouts, int tickTime, long id, boolean localSessionsEnabled, ZooKeeperServerListener listener) -
Method Summary
Modifier and TypeMethodDescriptionvoid
checkSession
(long sessionId, Object owner) Checks whether the SessionTracker is aware of this session, the session is still active, and the owner matches.boolean
commitSession
(long sessionId, int sessionTimeout) Synchronized on this to avoid race condition of adding a local session after committed global session, which may cause the same session being tracked on this server and leader.long
createSession
(int sessionTimeout) void
dumpSessions
(PrintWriter pwriter) Text dump of session information, suitable for debugging.Returns a mapping of time to session IDs that expire at that time.Get a set of global session IDsboolean
isGlobalSession
(long sessionId) void
removeSession
(long sessionId) void
void
setSessionClosing
(long sessionId) Mark that the session is in the process of closing.void
shutdown()
snapshot()
void
start()
boolean
touchSession
(long sessionId, int sessionTimeout) boolean
trackSession
(long sessionId, int sessionTimeout) Track the session expire, not add to ZkDb.Methods inherited from class org.apache.zookeeper.server.quorum.UpgradeableSessionTracker
checkGlobalSession, createLocalSessionTracker, finishedUpgrading, getLocalSessionCount, isLocalSession, isLocalSessionsEnabled, isTrackingSession, isUpgradingSession, localSessions, removeLocalSession, upgradeSession
-
Constructor Details
-
LearnerSessionTracker
public LearnerSessionTracker(SessionTracker.SessionExpirer expirer, ConcurrentMap<Long, Integer> sessionsWithTimeouts, int tickTime, long id, boolean localSessionsEnabled, ZooKeeperServerListener listener)
-
-
Method Details
-
removeSession
public void removeSession(long sessionId) - Parameters:
sessionId
-
-
start
public void start()- Overrides:
start
in classUpgradeableSessionTracker
-
shutdown
public void shutdown() -
isGlobalSession
public boolean isGlobalSession(long sessionId) - Specified by:
isGlobalSession
in classUpgradeableSessionTracker
-
trackSession
public boolean trackSession(long sessionId, int sessionTimeout) Description copied from interface:SessionTracker
Track the session expire, not add to ZkDb.- Parameters:
sessionId
- sessionIdsessionTimeout
- sessionTimeout- Returns:
- whether the session was newly tracked (if false, already tracked)
-
commitSession
public boolean commitSession(long sessionId, int sessionTimeout) Synchronized on this to avoid race condition of adding a local session after committed global session, which may cause the same session being tracked on this server and leader.- Parameters:
sessionId
- sessionIdsessionTimeout
- sessionTimeout- Returns:
- whether the session was newly added (if false, already existed)
-
touchSession
public boolean touchSession(long sessionId, int sessionTimeout) - Parameters:
sessionId
-sessionTimeout
-- Returns:
- false if session is no longer active
-
snapshot
-
createSession
public long createSession(int sessionTimeout) -
checkSession
public void checkSession(long sessionId, Object owner) throws KeeperException.SessionExpiredException, KeeperException.SessionMovedException Description copied from interface:SessionTracker
Checks whether the SessionTracker is aware of this session, the session is still active, and the owner matches. If the owner wasn't previously set, this sets the owner of the session. UnknownSessionException should never been thrown to the client. It is only used internally to deal with possible local session from other machine- Parameters:
sessionId
-owner
-- Throws:
KeeperException.SessionExpiredException
KeeperException.SessionMovedException
-
setOwner
-
dumpSessions
Description copied from interface:SessionTracker
Text dump of session information, suitable for debugging.- Parameters:
pwriter
- the output writer
-
setSessionClosing
public void setSessionClosing(long sessionId) Description copied from interface:SessionTracker
Mark that the session is in the process of closing.- Parameters:
sessionId
-
-
getSessionExpiryMap
Description copied from interface:SessionTracker
Returns a mapping of time to session IDs that expire at that time. -
globalSessions
Description copied from interface:SessionTracker
Get a set of global session IDs
-