Package org.apache.zookeeper.server
Class SessionTrackerImpl
java.lang.Object
java.lang.Thread
org.apache.zookeeper.server.ZooKeeperThread
org.apache.zookeeper.server.ZooKeeperCriticalThread
org.apache.zookeeper.server.SessionTrackerImpl
- All Implemented Interfaces:
Runnable,SessionTracker
- Direct Known Subclasses:
LocalSessionTracker
This is a full featured SessionTracker. It tracks session in grouped by tick
interval. It always rounds up the tick interval to provide a sort of grace
period. Sessions are thus expired in batches made up of sessions that expire
in a given interval.
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandlerNested classes/interfaces inherited from interface org.apache.zookeeper.server.SessionTracker
SessionTracker.Session, SessionTracker.SessionExpirer -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final ConcurrentHashMap<Long,SessionTrackerImpl.SessionImpl> protected final ConcurrentMap<Long,Integer> Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY -
Constructor Summary
ConstructorsConstructorDescriptionSessionTrackerImpl(SessionTracker.SessionExpirer expirer, ConcurrentMap<Long, Integer> sessionsWithTimeout, int tickTime, long serverId, ZooKeeperServerListener listener) -
Method Summary
Modifier and TypeMethodDescriptionvoidcheckGlobalSession(long sessionId, Object owner) Strictly check that a given session is a global session or notvoidcheckSession(long sessionId, Object owner) Checks whether the SessionTracker is aware of this session, the session is still active, and the owner matches.booleancommitSession(long id, int sessionTimeout) Add the session to the local session map or global one in zkDB.longcreateSession(int sessionTimeout) voiddumpSessions(PrintWriter pwriter) Text dump of session information, suitable for debugging.longIf this session tracker supports local sessions, return how many.Returns a mapping from time to session IDs of sessions expiring at that time.intgetSessionTimeout(long sessionId) Get a set of global session IDsstatic longinitializeNextSessionId(long id) Generates an initial sessionId.booleanbooleanisTrackingSession(long sessionId) Get a set of local session IDsvoidremoveSession(long sessionId) voidrun()voidvoidsetSessionClosing(long sessionId) Mark that the session is in the process of closing.voidshutdown()toString()booleantouchSession(long sessionId, int timeout) booleantrackSession(long id, int sessionTimeout) Track the session expire, not add to ZkDb.Methods inherited from class org.apache.zookeeper.server.ZooKeeperCriticalThread
handleExceptionMethods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, yield
-
Field Details
-
sessionsById
-
sessionsWithTimeout
-
-
Constructor Details
-
SessionTrackerImpl
public SessionTrackerImpl(SessionTracker.SessionExpirer expirer, ConcurrentMap<Long, Integer> sessionsWithTimeout, int tickTime, long serverId, ZooKeeperServerListener listener)
-
-
Method Details
-
initializeNextSessionId
public static long initializeNextSessionId(long id) Generates an initial sessionId.High order 1 byte is serverId, next 5 bytes are from timestamp, and low order 2 bytes are 0s. Use ">>> 8", not ">> 8" to make sure that the high order 1 byte is entirely up to the server Id.
See also http://jira.apache.org/jira/browse/ZOOKEEPER-1622
- Parameters:
id- server Id- Returns:
- the session Id
-
dumpSessions
Description copied from interface:SessionTrackerText dump of session information, suitable for debugging.- Specified by:
dumpSessionsin interfaceSessionTracker- Parameters:
pwriter- the output writer
-
getSessionExpiryMap
Returns a mapping from time to session IDs of sessions expiring at that time.- Specified by:
getSessionExpiryMapin interfaceSessionTracker
-
toString
-
run
public void run() -
touchSession
public boolean touchSession(long sessionId, int timeout) - Specified by:
touchSessionin interfaceSessionTracker- Returns:
- false if session is no longer active
-
getSessionTimeout
public int getSessionTimeout(long sessionId) -
setSessionClosing
public void setSessionClosing(long sessionId) Description copied from interface:SessionTrackerMark that the session is in the process of closing.- Specified by:
setSessionClosingin interfaceSessionTracker
-
removeSession
public void removeSession(long sessionId) - Specified by:
removeSessionin interfaceSessionTracker
-
shutdown
public void shutdown()- Specified by:
shutdownin interfaceSessionTracker
-
createSession
public long createSession(int sessionTimeout) - Specified by:
createSessionin interfaceSessionTracker
-
trackSession
public boolean trackSession(long id, int sessionTimeout) Description copied from interface:SessionTrackerTrack the session expire, not add to ZkDb.- Specified by:
trackSessionin interfaceSessionTracker- Parameters:
id- sessionIdsessionTimeout- sessionTimeout- Returns:
- whether the session was newly tracked (if false, already tracked)
-
commitSession
public boolean commitSession(long id, int sessionTimeout) Description copied from interface:SessionTrackerAdd the session to the local session map or global one in zkDB.- Specified by:
commitSessionin interfaceSessionTracker- Parameters:
id- sessionIdsessionTimeout- sessionTimeout- Returns:
- whether the session was newly added (if false, already existed)
-
isTrackingSession
public boolean isTrackingSession(long sessionId) - Specified by:
isTrackingSessionin interfaceSessionTracker- Returns:
- whether or not the SessionTracker is aware of this session
-
checkSession
public void checkSession(long sessionId, Object owner) throws KeeperException.SessionExpiredException, KeeperException.SessionMovedException, KeeperException.UnknownSessionException Description copied from interface:SessionTrackerChecks 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- Specified by:
checkSessionin interfaceSessionTracker- Throws:
KeeperException.SessionExpiredExceptionKeeperException.SessionMovedExceptionKeeperException.UnknownSessionException
-
setOwner
- Specified by:
setOwnerin interfaceSessionTracker- Throws:
KeeperException.SessionExpiredException
-
checkGlobalSession
public void checkGlobalSession(long sessionId, Object owner) throws KeeperException.SessionExpiredException, KeeperException.SessionMovedException Description copied from interface:SessionTrackerStrictly check that a given session is a global session or not- Specified by:
checkGlobalSessionin interfaceSessionTracker- Throws:
KeeperException.SessionExpiredExceptionKeeperException.SessionMovedException
-
getLocalSessionCount
public long getLocalSessionCount()Description copied from interface:SessionTrackerIf this session tracker supports local sessions, return how many. otherwise returns 0;- Specified by:
getLocalSessionCountin interfaceSessionTracker
-
isLocalSessionsEnabled
public boolean isLocalSessionsEnabled()- Specified by:
isLocalSessionsEnabledin interfaceSessionTracker
-
globalSessions
Description copied from interface:SessionTrackerGet a set of global session IDs- Specified by:
globalSessionsin interfaceSessionTracker
-
localSessions
Description copied from interface:SessionTrackerGet a set of local session IDs- Specified by:
localSessionsin interfaceSessionTracker
-