Class LearnerSessionTracker

java.lang.Object
org.apache.zookeeper.server.quorum.UpgradeableSessionTracker
org.apache.zookeeper.server.quorum.LearnerSessionTracker
All Implemented Interfaces:
SessionTracker

public class LearnerSessionTracker extends UpgradeableSessionTracker
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.
  • Constructor Details

  • Method Details

    • removeSession

      public void removeSession(long sessionId)
      Parameters:
      sessionId -
    • start

      public void start()
      Overrides:
      start in class UpgradeableSessionTracker
    • shutdown

      public void shutdown()
    • isGlobalSession

      public boolean isGlobalSession(long sessionId)
      Specified by:
      isGlobalSession in class UpgradeableSessionTracker
    • trackSession

      public boolean trackSession(long sessionId, int sessionTimeout)
      Description copied from interface: SessionTracker
      Track the session expire, not add to ZkDb.
      Parameters:
      sessionId - sessionId
      sessionTimeout - 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 - sessionId
      sessionTimeout - 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

      public Map<Long,Integer> 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

      public void setOwner(long sessionId, Object owner) throws KeeperException.SessionExpiredException
      Throws:
      KeeperException.SessionExpiredException
    • dumpSessions

      public void dumpSessions(PrintWriter pwriter)
      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

      public Map<Long,Set<Long>> getSessionExpiryMap()
      Description copied from interface: SessionTracker
      Returns a mapping of time to session IDs that expire at that time.
    • globalSessions

      public Set<Long> globalSessions()
      Description copied from interface: SessionTracker
      Get a set of global session IDs