Class GCloudSessionDataStore

java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.eclipse.jetty.server.session.AbstractSessionDataStore
org.eclipse.jetty.gcloud.session.GCloudSessionDataStore
All Implemented Interfaces:
org.eclipse.jetty.server.session.SessionDataMap, org.eclipse.jetty.server.session.SessionDataStore, org.eclipse.jetty.util.component.Container, org.eclipse.jetty.util.component.Destroyable, org.eclipse.jetty.util.component.Dumpable, org.eclipse.jetty.util.component.Dumpable.DumpableContainer, org.eclipse.jetty.util.component.LifeCycle

@ManagedObject public class GCloudSessionDataStore extends org.eclipse.jetty.server.session.AbstractSessionDataStore
GCloudSessionDataStore
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    EntityDataModel Names of type of Entity and Entity properties for sessions.
    static class 
    ExpiryInfo Information related to session expiry

    Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopException

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container

    org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable

    org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle

    org.eclipse.jetty.util.component.LifeCycle.Listener
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected int
     
    protected com.google.cloud.datastore.Datastore
     
    protected boolean
     
    protected boolean
     
    protected com.google.cloud.datastore.KeyFactory
     
    protected int
     
    protected int
     
     
    protected boolean
     
    static final int
     
    static final int
     
    static final int
     
    static final String
     

    Fields inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore

    _context, _gracePeriodSec, _lastExpiryCheckTime, _lastOrphanSweepTime, _savePeriodSec, DEFAULT_GRACE_PERIOD_SEC, DEFAULT_SAVE_PERIOD_SEC

    Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    FAILED, STARTED, STARTING, STOPPED, STOPPING

    Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

    KEY
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected boolean
    Check to see if indexes are available, in which case we can do more performant queries.
    boolean
     
    doCheckExpired(Set<String> candidates, long time)
     
    void
    doCleanOrphans(long timeLimit)
     
    boolean
     
    doGetExpired(long time)
     
    org.eclipse.jetty.server.session.SessionData
     
    protected void
     
    protected void
     
    void
    doStore(String id, org.eclipse.jetty.server.session.SessionData data, long lastSaveTime)
     
    protected com.google.cloud.datastore.Entity
    entityFromSession(org.eclipse.jetty.server.session.SessionData session, com.google.cloud.datastore.Key key)
    Generate a gcloud datastore Entity from SessionData
    int
     
     
     
    int
     
    int
     
     
     
    protected boolean
    isExpired(long timestamp)
    Check to see if the given time is in the past.
    boolean
     
    protected com.google.cloud.datastore.Key
    makeKey(String id, String canonicalContextPath, String canonicalVHost)
     
    protected com.google.cloud.datastore.Key
    makeKey(String id, org.eclipse.jetty.server.session.SessionContext context)
    Make a unique key for this session.
    A less efficient query to find sessions whose expiry time has passed: retrieves the whole Entity.
    queryExpiryByEntity(long timeLimit)
    A less efficient query to find sessions whose expiry time is before the given timeLimit.
    An efficient query to find sessions whose expiry time has passed: uses a projection query, which requires indexes to be uploaded.
    queryExpiryByIndex(long timeLimit)
    An efficient query to find sessions whose expiry time is before the given timeLimit: uses a projection query, which requires indexes to be uploaded.
    protected org.eclipse.jetty.server.session.SessionData
    sessionFromEntity(com.google.cloud.datastore.Entity entity)
    Generate SessionData from an Entity retrieved from gcloud datastore.
    void
    setBackoffMs(int ms)
     
    void
    setDatastore(com.google.cloud.datastore.Datastore datastore)
     
    void
     
    void
     
    void
    setMaxResults(int maxResults)
     
    void
    setMaxRetries(int retries)
     
    void
    setNamespace(String namespace)
     
    void
    setProjectId(String projectId)
     
     

    Methods inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore

    checkStarted, cleanOrphans, exists, getExpired, getGracePeriodSec, getSavePeriodSec, initialize, load, newSessionData, setGracePeriodSec, setSavePeriodSec, store

    Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle

    addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeans

    Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.eclipse.jetty.util.component.Container

    getCachedBeans, getEventListeners

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable

    dumpSelf

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    isDumpable

    Methods inherited from interface org.eclipse.jetty.util.component.LifeCycle

    addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stop
  • Field Details

    • DEFAULT_MAX_QUERY_RESULTS

      public static final int DEFAULT_MAX_QUERY_RESULTS
      See Also:
    • DEFAULT_MAX_RETRIES

      public static final int DEFAULT_MAX_RETRIES
      See Also:
    • DEFAULT_BACKOFF_MS

      public static final int DEFAULT_BACKOFF_MS
      See Also:
    • DEFAULT_NAMESPACE

      public static final String DEFAULT_NAMESPACE
      See Also:
    • _datastore

      protected com.google.cloud.datastore.Datastore _datastore
    • _keyFactory

      protected com.google.cloud.datastore.KeyFactory _keyFactory
    • _maxResults

      protected int _maxResults
    • _maxRetries

      protected int _maxRetries
    • _backoff

      protected int _backoff
    • _dsProvided

      protected boolean _dsProvided
    • _indexesPresent

      protected boolean _indexesPresent
    • _model

    • _modelProvided

      protected boolean _modelProvided
  • Constructor Details

    • GCloudSessionDataStore

      public GCloudSessionDataStore()
  • Method Details

    • setEntityDataModel

      public void setEntityDataModel(GCloudSessionDataStore.EntityDataModel model)
    • getEntityDataModel

      public GCloudSessionDataStore.EntityDataModel getEntityDataModel()
    • setBackoffMs

      public void setBackoffMs(int ms)
    • setNamespace

      public void setNamespace(String namespace)
    • getNamespace

      @ManagedAttribute(value="gcloud namespace", readonly=true) public String getNamespace()
    • getBackoffMs

      @ManagedAttribute("unit in ms of exponential backoff") public int getBackoffMs()
    • setMaxRetries

      public void setMaxRetries(int retries)
    • getMaxRetries

      @ManagedAttribute("max number of retries for failed writes") public int getMaxRetries()
    • setHost

      public void setHost(String host)
    • getHost

      @ManagedAttribute(value="gcloud host", readonly=true) public String getHost()
    • setProjectId

      public void setProjectId(String projectId)
    • getProjectId

      @ManagedAttribute(value="gcloud project Id", readonly=true) public String getProjectId()
    • doStart

      protected void doStart() throws Exception
      Overrides:
      doStart in class org.eclipse.jetty.server.session.AbstractSessionDataStore
      Throws:
      Exception
    • doStop

      protected void doStop() throws Exception
      Overrides:
      doStop in class org.eclipse.jetty.util.component.ContainerLifeCycle
      Throws:
      Exception
    • setDatastore

      public void setDatastore(com.google.cloud.datastore.Datastore datastore)
    • getMaxResults

      @ManagedAttribute("max number of results to return from gcloud searches") public int getMaxResults()
    • setMaxResults

      public void setMaxResults(int maxResults)
    • doLoad

      public org.eclipse.jetty.server.session.SessionData doLoad(String id) throws Exception
      Specified by:
      doLoad in class org.eclipse.jetty.server.session.AbstractSessionDataStore
      Throws:
      Exception
    • delete

      public boolean delete(String id) throws Exception
      Throws:
      Exception
    • doCheckExpired

      public Set<String> doCheckExpired(Set<String> candidates, long time)
      Specified by:
      doCheckExpired in class org.eclipse.jetty.server.session.AbstractSessionDataStore
    • doGetExpired

      public Set<String> doGetExpired(long time)
      Specified by:
      doGetExpired in class org.eclipse.jetty.server.session.AbstractSessionDataStore
    • doCleanOrphans

      public void doCleanOrphans(long timeLimit)
      Specified by:
      doCleanOrphans in class org.eclipse.jetty.server.session.AbstractSessionDataStore
    • queryExpiryByEntity

      protected Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByEntity() throws Exception
      A less efficient query to find sessions whose expiry time has passed: retrieves the whole Entity.
      Returns:
      set of ExpiryInfo representing the id, lastNode and expiry time of sessions that are expired
      Throws:
      Exception - if datastore experiences a problem
    • queryExpiryByEntity

      protected Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByEntity(long timeLimit) throws Exception
      A less efficient query to find sessions whose expiry time is before the given timeLimit.
      Parameters:
      timeLimit - time since the epoch
      Returns:
      set of ExpiryInfo representing the id,lastNode and expiry time
      Throws:
      Exception
    • queryExpiryByIndex

      protected Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByIndex() throws Exception
      An efficient query to find sessions whose expiry time has passed: uses a projection query, which requires indexes to be uploaded.
      Returns:
      id, lastnode and expiry time of sessions that have expired
      Throws:
      Exception - if datastore experiences a problem
    • queryExpiryByIndex

      protected Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByIndex(long timeLimit) throws Exception
      An efficient query to find sessions whose expiry time is before the given timeLimit: uses a projection query, which requires indexes to be uploaded.
      Parameters:
      timeLimit - the upper limit of expiry time to check
      Returns:
      id,lastnode and expiry time of sessions that have expired
      Throws:
      Exception
    • doExists

      public boolean doExists(String id) throws Exception
      Specified by:
      doExists in class org.eclipse.jetty.server.session.AbstractSessionDataStore
      Throws:
      Exception
    • isExpired

      protected boolean isExpired(long timestamp)
      Check to see if the given time is in the past.
      Parameters:
      timestamp - the time to check
      Returns:
      false if the timestamp is 0 or less, true if it is in the past
    • doStore

      public void doStore(String id, org.eclipse.jetty.server.session.SessionData data, long lastSaveTime) throws Exception
      Specified by:
      doStore in class org.eclipse.jetty.server.session.AbstractSessionDataStore
      Throws:
      Exception
    • makeKey

      protected com.google.cloud.datastore.Key makeKey(String id, org.eclipse.jetty.server.session.SessionContext context)
      Make a unique key for this session. As the same session id can be used across multiple contexts, to make it unique, the key must be composed of:
      1. the id
      2. the context path
      3. the virtual hosts
      Parameters:
      id - the id
      context - the session context
      Returns:
      the key
    • makeKey

      protected com.google.cloud.datastore.Key makeKey(String id, String canonicalContextPath, String canonicalVHost)
    • checkIndexes

      protected boolean checkIndexes()
      Check to see if indexes are available, in which case we can do more performant queries.
      Returns:
      true if indexes are available
    • entityFromSession

      protected com.google.cloud.datastore.Entity entityFromSession(org.eclipse.jetty.server.session.SessionData session, com.google.cloud.datastore.Key key) throws Exception
      Generate a gcloud datastore Entity from SessionData
      Parameters:
      session - the session data
      key - the key
      Returns:
      the entity
      Throws:
      Exception - if there is a deserialization error
    • sessionFromEntity

      protected org.eclipse.jetty.server.session.SessionData sessionFromEntity(com.google.cloud.datastore.Entity entity) throws Exception
      Generate SessionData from an Entity retrieved from gcloud datastore.
      Parameters:
      entity - the entity
      Returns:
      the session data
      Throws:
      Exception - if unable to get the entity
    • isPassivating

      @ManagedAttribute(value="does gcloud serialize session data", readonly=true) public boolean isPassivating()
    • toString

      public String toString()
      Overrides:
      toString in class org.eclipse.jetty.server.session.AbstractSessionDataStore