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:
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 ClassesModifier and TypeClassDescriptionstatic classEntityDataModel Names of type of Entity and Entity properties for sessions.static classExpiryInfo Information related to session expiryNested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopExceptionNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.ListenerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
org.eclipse.jetty.util.component.Dumpable.DumpableContainerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
org.eclipse.jetty.util.component.LifeCycle.Listener -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected intprotected com.google.cloud.datastore.Datastoreprotected booleanprotected booleanprotected com.google.cloud.datastore.KeyFactoryprotected intprotected intprotected GCloudSessionDataStore.EntityDataModelprotected booleanstatic final intstatic final intstatic final intstatic final StringFields inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore
_context, _gracePeriodSec, _lastExpiryCheckTime, _lastOrphanSweepTime, _savePeriodSec, DEFAULT_GRACE_PERIOD_SEC, DEFAULT_SAVE_PERIOD_SECFields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
FAILED, STARTED, STARTING, STOPPED, STOPPINGFields inherited from interface org.eclipse.jetty.util.component.Dumpable
KEY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected booleanCheck to see if indexes are available, in which case we can do more performant queries.booleandoCheckExpired(Set<String> candidates, long time) voiddoCleanOrphans(long timeLimit) booleandoGetExpired(long time) org.eclipse.jetty.server.session.SessionDataprotected voiddoStart()protected voiddoStop()voidprotected com.google.cloud.datastore.EntityentityFromSession(org.eclipse.jetty.server.session.SessionData session, com.google.cloud.datastore.Key key) Generate a gcloud datastore Entity from SessionDataintgetHost()intintprotected booleanisExpired(long timestamp) Check to see if the given time is in the past.booleanprotected com.google.cloud.datastore.Keyprotected com.google.cloud.datastore.KeyMake 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 org.eclipse.jetty.server.session.SessionDatasessionFromEntity(com.google.cloud.datastore.Entity entity) Generate SessionData from an Entity retrieved from gcloud datastore.voidsetBackoffMs(int ms) voidsetDatastore(com.google.cloud.datastore.Datastore datastore) voidvoidvoidsetMaxResults(int maxResults) voidsetMaxRetries(int retries) voidsetNamespace(String namespace) voidsetProjectId(String projectId) toString()Methods inherited from class org.eclipse.jetty.server.session.AbstractSessionDataStore
checkStarted, cleanOrphans, exists, getExpired, getGracePeriodSec, getSavePeriodSec, initialize, load, newSessionData, setGracePeriodSec, setSavePeriodSec, storeMethods 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, updateBeansMethods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stopMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.eclipse.jetty.util.component.Container
getCachedBeans, getEventListenersMethods inherited from interface org.eclipse.jetty.util.component.Dumpable
dumpSelfMethods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpableMethods 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
@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
-
getHost
-
setProjectId
-
getProjectId
-
doStart
- Overrides:
doStartin classorg.eclipse.jetty.server.session.AbstractSessionDataStore- Throws:
Exception
-
doStop
- Overrides:
doStopin classorg.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
- Specified by:
doLoadin classorg.eclipse.jetty.server.session.AbstractSessionDataStore- Throws:
Exception
-
delete
- Throws:
Exception
-
doCheckExpired
- Specified by:
doCheckExpiredin classorg.eclipse.jetty.server.session.AbstractSessionDataStore
-
doGetExpired
- Specified by:
doGetExpiredin classorg.eclipse.jetty.server.session.AbstractSessionDataStore
-
doCleanOrphans
public void doCleanOrphans(long timeLimit) - Specified by:
doCleanOrphansin classorg.eclipse.jetty.server.session.AbstractSessionDataStore
-
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
- Specified by:
doExistsin classorg.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:
doStorein classorg.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:- 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:
trueif 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 datakey- 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
- Overrides:
toStringin classorg.eclipse.jetty.server.session.AbstractSessionDataStore
-