Package org.eclipse.jetty.gcloud.session
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:
SessionDataMap
,SessionDataStore
,Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
GCloudSessionDataStore
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
EntityDataModel Names of type of Entity and Entity properties for sessions.static class
ExpiryInfo Information related to session expiryNested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopException
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
Container.InheritedListener, Container.Listener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
Dumpable.DumpableContainer
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener
-
Field Summary
Modifier and TypeFieldDescriptionprotected int
protected com.google.cloud.datastore.Datastore
protected boolean
protected boolean
protected com.google.cloud.datastore.KeyFactory
protected int
protected int
protected GCloudSessionDataStore.EntityDataModel
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
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
Check to see if indexes are available, in which case we can do more performant queries.boolean
Delete session datadoCheckExpired
(Set<String> candidates, long time) Implemented by subclasses to resolve which sessions in this context that are being managed by this node that should be expired.void
doCleanOrphans
(long timeLimit) Implemented by subclasses to delete sessions for other contexts that expired at or before the timeLimit.boolean
Check if a session for the given id exists.doGetExpired
(long time) 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.Load the session from persistent store.protected void
doStart()
Starts the managed lifecycle beans in the order they were added.protected void
doStop()
Stops the managed lifecycle beans in the reverse order they were added.void
doStore
(String id, SessionData data, long lastSaveTime) Store the session data persistently.protected com.google.cloud.datastore.Entity
entityFromSession
(SessionData session, com.google.cloud.datastore.Key key) Generate a gcloud datastore Entity from SessionDataint
getHost()
int
int
protected boolean
isExpired
(long timestamp) Check to see if the given time is in the past.boolean
True if this type of datastore will passivate session objectsprotected com.google.cloud.datastore.Key
protected com.google.cloud.datastore.Key
makeKey
(String id, SessionContext context) Make a unique key for this session.protected Set<GCloudSessionDataStore.ExpiryInfo>
A less efficient query to find sessions whose expiry time has passed: retrieves the whole Entity.protected Set<GCloudSessionDataStore.ExpiryInfo>
queryExpiryByEntity
(long timeLimit) A less efficient query to find sessions whose expiry time is before the given timeLimit.protected Set<GCloudSessionDataStore.ExpiryInfo>
An efficient query to find sessions whose expiry time has passed: uses a projection query, which requires indexes to be uploaded.protected Set<GCloudSessionDataStore.ExpiryInfo>
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 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) toString()
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.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
- 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
-
getEntityDataModel
-
setBackoffMs
public void setBackoffMs(int ms) -
setNamespace
-
getNamespace
-
getBackoffMs
-
setMaxRetries
public void setMaxRetries(int retries) -
getMaxRetries
-
setHost
-
getHost
-
setProjectId
-
getProjectId
-
doStart
Description copied from class:ContainerLifeCycle
Starts the managed lifecycle beans in the order they were added.- Overrides:
doStart
in classAbstractSessionDataStore
- Throws:
AbstractLifeCycle.StopException
- If thrown, the lifecycle will immediately be stopped.Exception
- If there was a problem starting. Will cause a transition to FAILED state
-
doStop
Description copied from class:ContainerLifeCycle
Stops the managed lifecycle beans in the reverse order they were added.- Overrides:
doStop
in classContainerLifeCycle
- Throws:
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
Description copied from class:AbstractSessionDataStore
Load the session from persistent store.- Specified by:
doLoad
in classAbstractSessionDataStore
- Parameters:
id
- the id of the session to load- Returns:
- the re-inflated session
- Throws:
Exception
- if unable to load the session
-
delete
Description copied from interface:SessionDataMap
Delete session data- Parameters:
id
- identity of session to delete- Returns:
- true if the session was deleted
- Throws:
Exception
- if unable to delete session data
-
doCheckExpired
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 classAbstractSessionDataStore
- Parameters:
candidates
- the ids of sessions the SessionCache thinks has expiredtime
- the time at which to check for expiry- Returns:
- the reconciled set of session ids that have been checked in the store
-
doGetExpired
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 classAbstractSessionDataStore
- 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 classAbstractSessionDataStore
- Parameters:
timeLimit
- the upper limit of the expiry time to check in msec
-
queryExpiryByEntity
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
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
Description copied from class:AbstractSessionDataStore
Check if a session for the given id exists.- Specified by:
doExists
in classAbstractSessionDataStore
- Parameters:
id
- the session id to check- Returns:
- true if the session exists in the persistent store, false otherwise
- 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
Description copied from class:AbstractSessionDataStore
Store the session data persistently.- Specified by:
doStore
in classAbstractSessionDataStore
- Parameters:
id
- identity of session to storedata
- info of the sessionlastSaveTime
- time of previous save or 0 if never saved- Throws:
Exception
- if unable to store data
-
makeKey
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:- the id
- the context path
- the virtual hosts
- Parameters:
id
- the idcontext
- the session context- Returns:
- the key
-
makeKey
-
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 Exception Generate a gcloud datastore Entity from SessionData- Parameters:
session
- the session datakey
- the key- Returns:
- the entity
- Throws:
Exception
- if there is a deserialization error
-
sessionFromEntity
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()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
-
toString
- Overrides:
toString
in classAbstractSessionDataStore
-