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
@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
AbstractLifeCycle.AbstractLifeCycleListener
-
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
Fields Modifier and Type Field Description protected int
_backoff
protected com.google.cloud.datastore.Datastore
_datastore
protected boolean
_dsProvided
protected boolean
_indexesPresent
protected com.google.cloud.datastore.KeyFactory
_keyFactory
protected int
_maxResults
protected int
_maxRetries
protected GCloudSessionDataStore.EntityDataModel
_model
protected boolean
_modelProvided
static int
DEFAULT_BACKOFF_MS
static int
DEFAULT_MAX_QUERY_RESULTS
static int
DEFAULT_MAX_RETRIES
-
Fields inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore
_context, _gracePeriodSec, _lastExpiryCheckTime, _savePeriodSec
-
-
Constructor Summary
Constructors Constructor Description GCloudSessionDataStore()
-
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)
Delete session datajava.util.Set<java.lang.String>
doGetExpired(java.util.Set<java.lang.String> candidates)
Implemented by subclasses to resolve which sessions this node should attempt to expire.SessionData
doLoad(java.lang.String id)
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(java.lang.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 SessionDataboolean
exists(java.lang.String id)
Test if data exists for a given session 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()
True if this type of datastore will passivate session objectsprotected 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.server.session.AbstractSessionDataStore
checkStarted, 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, 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.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
-
DEFAULT_MAX_RETRIES
public static final int DEFAULT_MAX_RETRIES
- See Also:
- Constant Field Values
-
DEFAULT_BACKOFF_MS
public static final int DEFAULT_BACKOFF_MS
- 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
-
_model
protected GCloudSessionDataStore.EntityDataModel _model
-
_modelProvided
protected boolean _modelProvided
-
-
Method Detail
-
setEntityDataModel
public void setEntityDataModel(GCloudSessionDataStore.EntityDataModel model)
-
getEntityDataModel
public GCloudSessionDataStore.EntityDataModel getEntityDataModel()
-
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()
-
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 classAbstractSessionDataStore
- Throws:
java.lang.Exception
-
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 classContainerLifeCycle
- 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)
-
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 classAbstractSessionDataStore
- 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
-
doGetExpired
public java.util.Set<java.lang.String> doGetExpired(java.util.Set<java.lang.String> candidates)
Description copied from class:AbstractSessionDataStore
Implemented by subclasses to resolve which sessions this node should attempt to expire.- Specified by:
doGetExpired
in classAbstractSessionDataStore
- Parameters:
candidates
- the ids of sessions the SessionDataStore thinks has expired- Returns:
- the reconciled set of session ids that this node should attempt to expire
-
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
Description copied from interface:SessionDataStore
Test if data exists for a given session id.- Parameters:
id
- Identity of session whose existence should be checked- Returns:
- true if valid, non-expired session exists
- Throws:
java.lang.Exception
- if problem checking existence with persistence layer
-
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 classAbstractSessionDataStore
- Parameters:
id
- identity of session to storedata
- info of the sessionlastSaveTime
- 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:- the id
- the context path
- the virtual hosts
- Parameters:
id
- the idcontext
- 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 datakey
- 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
-
toString
public java.lang.String toString()
- Overrides:
toString
in classAbstractSessionDataStore
-
-