Class GCloudSessionDataStore

  • All Implemented Interfaces:
    SessionDataMap, 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 AbstractSessionDataStore
    GCloudSessionDataStore
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  GCloudSessionDataStore.EntityDataModel
      EntityDataModel Names of type of Entity and Entity properties for sessions.
      static class  GCloudSessionDataStore.ExpiryInfo
      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
      • 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
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected boolean checkIndexes()
      Check to see if indexes are available, in which case we can do more performant queries.
      boolean delete​(java.lang.String id)  
      java.util.Set<java.lang.String> doGetExpired​(java.util.Set<java.lang.String> candidates)  
      SessionData doLoad​(java.lang.String id)  
      protected void doStart()  
      protected void doStop()  
      void doStore​(java.lang.String id, SessionData data, long lastSaveTime)  
      protected com.google.cloud.datastore.Entity entityFromSession​(SessionData session, com.google.cloud.datastore.Key key)
      Generate a gcloud datastore Entity from SessionData
      boolean exists​(java.lang.String id)  
      int getBackoffMs()  
      GCloudSessionDataStore.EntityDataModel getEntityDataModel()  
      int getMaxResults()  
      int getMaxRetries()  
      java.lang.String getNamespace()  
      protected boolean isExpired​(long timestamp)
      Check to see if the given time is in the past.
      boolean isPassivating()  
      protected com.google.cloud.datastore.Key makeKey​(java.lang.String id, SessionContext context)
      Make a unique key for this session.
      protected java.util.Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByEntity()
      A less efficient query to find sessions whose expiry time has passed: retrieves the whole Entity.
      protected java.util.Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByIndex()
      An efficient query to find sessions whose expiry time has passed: uses a projection query, which requires indexes to be uploaded.
      protected 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 setEntityDataModel​(GCloudSessionDataStore.EntityDataModel model)  
      void setMaxResults​(int maxResults)  
      void setMaxRetries​(int retries)  
      void setNamespace​(java.lang.String namespace)  
      java.lang.String toString()  
      • Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle

        addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpObjects, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
      • Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, 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.Dumpable

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

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

        addLifeCycleListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
    • Field Detail

      • DEFAULT_MAX_QUERY_RESULTS

        public static final int DEFAULT_MAX_QUERY_RESULTS
        See Also:
        Constant Field Values
      • _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
      • _modelProvided

        protected boolean _modelProvided
    • Constructor Detail

      • GCloudSessionDataStore

        public GCloudSessionDataStore()
    • Method Detail

      • setBackoffMs

        public void setBackoffMs​(int ms)
      • setNamespace

        public void setNamespace​(java.lang.String namespace)
      • getNamespace

        @ManagedAttribute(value="gclound namespace",
                          readonly=true)
        public java.lang.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()
      • doStop

        protected void doStop()
                       throws java.lang.Exception
        Overrides:
        doStop in class org.eclipse.jetty.util.component.ContainerLifeCycle
        Throws:
        java.lang.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)
      • delete

        public boolean delete​(java.lang.String id)
                       throws java.lang.Exception
        Throws:
        java.lang.Exception
      • queryExpiryByEntity

        protected java.util.Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByEntity()
                                                                                throws java.lang.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:
        java.lang.Exception - if datastore experiences a problem
      • queryExpiryByIndex

        protected java.util.Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByIndex()
                                                                               throws java.lang.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:
        java.lang.Exception - if datastore experiences a problem
      • exists

        public boolean exists​(java.lang.String id)
                       throws java.lang.Exception
        Throws:
        java.lang.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
      • makeKey

        protected com.google.cloud.datastore.Key makeKey​(java.lang.String id,
                                                         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
      • 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​(SessionData session,
                                                                      com.google.cloud.datastore.Key key)
                                                               throws java.lang.Exception
        Generate a gcloud datastore Entity from SessionData
        Parameters:
        session - the session data
        key - the key
        Returns:
        the entity
        Throws:
        java.lang.Exception - if there is a deserialization error
      • sessionFromEntity

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

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