Class GCloudSessionDataStore

    • Field Detail

      • DEFAULT_MAX_QUERY_RESULTS

        public static final int DEFAULT_MAX_QUERY_RESULTS
        See Also:
        Constant Field Values
      • DEFAULT_NAMESPACE

        public static final java.lang.String DEFAULT_NAMESPACE
        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)
      • 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​(java.lang.String host)
      • setProjectId

        public void setProjectId​(java.lang.String projectId)
      • doStart

        protected void doStart()
                        throws java.lang.Exception
        Description copied from class: ContainerLifeCycle
        Starts the managed lifecycle beans in the order they were added.
        Overrides:
        doStart in class AbstractSessionDataStore
        Throws:
        AbstractLifeCycle.StopException - If thrown, the lifecycle will immediately be stopped.
        java.lang.Exception - If there was a problem starting. Will cause a transition to FAILED state
      • doStop

        protected void doStop()
                       throws java.lang.Exception
        Description copied from class: ContainerLifeCycle
        Stops the managed lifecycle beans in the reverse order they were added.
        Overrides:
        doStop in class ContainerLifeCycle
        Throws:
        java.lang.Exception - If there was a problem stopping. Will cause a transition to FAILED state
      • 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 SessionData doLoad​(java.lang.String id)
                           throws java.lang.Exception
        Description copied from class: AbstractSessionDataStore
        Load the session from persistent store.
        Specified by:
        doLoad in class AbstractSessionDataStore
        Parameters:
        id - the id of the session to load
        Returns:
        the re-inflated session
        Throws:
        java.lang.Exception - if unable to load the session
      • delete

        public boolean delete​(java.lang.String id)
                       throws java.lang.Exception
        Description copied from interface: SessionDataMap
        Delete session data
        Parameters:
        id - identity of session to delete
        Returns:
        true if the session was deleted
        Throws:
        java.lang.Exception - if unable to delete session data
      • doCheckExpired

        public java.util.Set<java.lang.String> doCheckExpired​(java.util.Set<java.lang.String> candidates,
                                                              long time)
        Description copied from class: AbstractSessionDataStore
        Implemented by subclasses to resolve which sessions in this context that are being managed by this node that should be expired.
        Specified by:
        doCheckExpired in class AbstractSessionDataStore
        Parameters:
        candidates - the ids of sessions the SessionCache thinks has expired
        time - the time at which to check for expiry
        Returns:
        the reconciled set of session ids that have been checked in the store
      • doGetExpired

        public java.util.Set<java.lang.String> doGetExpired​(long time)
        Description copied from class: AbstractSessionDataStore
        Implemented by subclasses to find sessions for this context in the store that expired at or before the time limit and thus not being actively managed by any node. This method is only called periodically (the period is configurable) to avoid putting too much load on the store.
        Specified by:
        doGetExpired in class AbstractSessionDataStore
        Parameters:
        time - the upper limit of expiry times to check. Sessions expired at or before this timestamp will match.
        Returns:
        the empty set if there are no sessions expired as at the time, or otherwise a set of session ids.
      • doCleanOrphans

        public void doCleanOrphans​(long timeLimit)
        Description copied from class: AbstractSessionDataStore
        Implemented by subclasses to delete sessions for other contexts that expired at or before the timeLimit. These are 'orphaned' sessions that are no longer being actively managed by any node. These are explicitly sessions that do NOT belong to this context (other mechanisms such as doGetExpired take care of those). As they don't belong to this context, they cannot be loaded by us. This is called only periodically to avoid placing excessive load on the store.
        Specified by:
        doCleanOrphans in class AbstractSessionDataStore
        Parameters:
        timeLimit - the upper limit of the expiry time to check in msec
      • 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
      • queryExpiryByEntity

        protected java.util.Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByEntity​(long timeLimit)
                                                                                throws java.lang.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:
        java.lang.Exception
      • 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
      • queryExpiryByIndex

        protected java.util.Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByIndex​(long timeLimit)
                                                                               throws java.lang.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:
        java.lang.Exception
      • doExists

        public boolean doExists​(java.lang.String id)
                         throws java.lang.Exception
        Description copied from class: AbstractSessionDataStore
        Check if a session for the given id exists.
        Specified by:
        doExists in class AbstractSessionDataStore
        Parameters:
        id - the session id to check
        Returns:
        true if the session exists in the persistent store, false otherwise
        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
      • doStore

        public void doStore​(java.lang.String id,
                            SessionData data,
                            long lastSaveTime)
                     throws java.lang.Exception
        Description copied from class: AbstractSessionDataStore
        Store the session data persistently.
        Specified by:
        doStore in class AbstractSessionDataStore
        Parameters:
        id - identity of session to store
        data - info of the session
        lastSaveTime - time of previous save or 0 if never saved
        Throws:
        java.lang.Exception - if unable to store data
      • 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
      • makeKey

        protected com.google.cloud.datastore.Key makeKey​(java.lang.String id,
                                                         java.lang.String canonicalContextPath,
                                                         java.lang.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​(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()
        Description copied from interface: SessionDataStore
        True if this type of datastore will passivate session objects
        Returns:
        true if this store can passivate sessions, false otherwise