public class StateStore
extends java.lang.Object
StateStore
stores the state of a service, including tasks' TaskInfo and TaskStatus objects. Each
distinct Task is expected to have a unique Task Name, determined by the service developer.
TaskInfo objects should be persisted when a Task is launched or when reserved resources associated with a potential future Task launch should be recorded.
TaskStatus is reported by Mesos to Frameworks at various points including at Task Reconciliation and when Tasks change state. The TaskStatus of a Task should be recorded so that the state of a Framework's Tasks can be queried.
The structure used in the underlying persister is as follows:
rootPath/
-> FrameworkID
-> Tasks/
-> [TaskName-0]/
-> TaskInfo
-> TaskStatus
-> [TaskName-1]/
-> TaskInfo
-> [TaskName-2]/
-> TaskInfo
-> TaskStatus
-> ...
Constructor and Description |
---|
StateStore(Persister persister)
Creates a new
StateStore which uses the provided Persister to access state data. |
Modifier and Type | Method and Description |
---|---|
void |
clearAllData()
Clears the root service node, leaving just the root node behind.
|
void |
clearFrameworkId()
Removes any previously stored FrameworkID or does nothing if no FrameworkID was previously stored.
|
void |
clearProperty(java.lang.String key)
Clears a given property from the StateStore, or does nothing if no such property exists.
|
void |
clearTask(java.lang.String taskName)
Removes all data associated with a particular Task including any stored TaskInfo and/or TaskStatus.
|
java.util.Optional<Protos.FrameworkID> |
fetchFrameworkId()
Fetches the previously stored FrameworkID, or returns an empty Optional if no FrameworkId was previously stored.
|
GoalStateOverride.Status |
fetchGoalOverrideStatus(java.lang.String taskName)
Retrieves the goal state override status of a particular task.
|
byte[] |
fetchProperty(java.lang.String key)
Fetches the value byte array, stored against the Property
key , or throws an error if no matching key is found. |
java.util.Collection<java.lang.String> |
fetchPropertyKeys()
Fetches the list of Property keys, or an empty list if none are found.
|
java.util.Optional<Protos.TaskStatus> |
fetchStatus(java.lang.String taskName)
Fetches the TaskStatus for a particular Task, or returns an empty Optional if no matching status is found.
|
java.util.Collection<Protos.TaskStatus> |
fetchStatuses()
Fetches all
Protos.TaskStatus es from the underlying storage, or an empty list if none are found. |
java.util.Optional<Protos.TaskInfo> |
fetchTask(java.lang.String taskName)
Fetches the TaskInfo for a particular Task, or returns an empty Optional if no matching task is found.
|
java.util.Collection<java.lang.String> |
fetchTaskNames()
Fetches all the Task names listed in the underlying storage.
|
java.util.Collection<Protos.TaskInfo> |
fetchTasks()
Fetches and returns all
Protos.TaskInfo s from the underlying storage, or an empty list if none are found. |
protected static java.lang.String |
getGoalOverridePath(java.lang.String taskName) |
protected static java.lang.String |
getGoalOverrideStatusPath(java.lang.String taskName) |
Persister |
getPersister()
Returns the underlying
Persister object for direct access. |
protected static java.lang.String |
getTaskInfoPath(java.lang.String taskName) |
protected static java.lang.String |
getTaskPath(java.lang.String taskName) |
protected static java.lang.String |
getTaskStatusPath(java.lang.String taskName) |
void |
storeFrameworkId(Protos.FrameworkID fwkId)
Stores the FrameworkID for a framework so on Scheduler restart re-registration may occur.
|
void |
storeGoalOverrideStatus(java.lang.String taskName,
GoalStateOverride.Status status)
Stores the goal state override status of a particular Task.
|
void |
storeProperty(java.lang.String key,
byte[] value)
Stores an arbitrary key/value pair.
|
void |
storeStatus(java.lang.String taskName,
Protos.TaskStatus status)
Stores the TaskStatus of a particular Task.
|
void |
storeTasks(java.util.Collection<Protos.TaskInfo> tasks)
Stores TaskInfo objects representing tasks which are desired by the framework.
|
protected final Persister persister
public StateStore(Persister persister)
StateStore
which uses the provided Persister
to access state data.persister
- The persister which holds the state datapublic void storeFrameworkId(Protos.FrameworkID fwkId) throws StateStoreException
fwkId
- FrameworkID to be storeStateStoreException
- when storing the FrameworkID failspublic void clearFrameworkId() throws StateStoreException
StateStoreException
- when clearing a FrameworkID failspublic java.util.Optional<Protos.FrameworkID> fetchFrameworkId() throws StateStoreException
StateStoreException
- when fetching the FrameworkID failspublic void storeTasks(java.util.Collection<Protos.TaskInfo> tasks) throws StateStoreException
storeStatus(String, Protos.TaskStatus)
for any given task id, and it must behave as an atomic transaction: On
success, everything is written, while on failure nothing is written.tasks
- Tasks to be stored, which each meet the above requirementsStateStoreException
- when persisting TaskInfo information fails, or if its TaskId is malformedpublic void storeStatus(java.lang.String taskName, Protos.TaskStatus status) throws StateStoreException
Protos.TaskInfo
for this exact task MUST have already
been written via storeTasks(Collection)
beforehand. The TaskId must be well-formatted as produced by
CommonIdUtils.toTaskId(String)
.status
- The status to be stored, which meets the above requirementsStateStoreException
- if storing the TaskStatus fails, or if its TaskId is malformed, or if its matching
TaskInfo wasn't stored firstpublic void clearTask(java.lang.String taskName) throws StateStoreException
taskName
- The name of the task to be clearedStateStoreException
- when clearing the indicated Task's information failspublic java.util.Collection<java.lang.String> fetchTaskNames() throws StateStoreException
StateStoreException
- when fetching the data failspublic java.util.Collection<Protos.TaskInfo> fetchTasks() throws StateStoreException
Protos.TaskInfo
s from the underlying storage, or an empty list if none are found.
This list should be a superset of the list returned by fetchStatuses()
.StateStoreException
- if fetching the TaskInfo information otherwise failspublic java.util.Optional<Protos.TaskInfo> fetchTask(java.lang.String taskName) throws StateStoreException
taskName
- The name of the TaskStateStoreException
- if no data was found for the requested name, or if fetching the TaskInfo otherwise
failspublic java.util.Collection<Protos.TaskStatus> fetchStatuses() throws StateStoreException
Protos.TaskStatus
es from the underlying storage, or an empty list if none are found. Note
that this list may have fewer entries than fetchTasks()
if some tasks are lacking statuses.StateStoreException
- if fetching the TaskStatus information failspublic java.util.Optional<Protos.TaskStatus> fetchStatus(java.lang.String taskName) throws StateStoreException
Protos.TaskInfo
while lacking Protos.TaskStatus
.taskName
- The name of the Task which should have its status retrievedStateStoreException
- if no data was found for the requested name, or if fetching the TaskStatus
information otherwise failspublic void storeProperty(java.lang.String key, byte[] value) throws StateStoreException
key
- must be a non-blank String without any forward slashes ('/')value
- The value should be a byte array no larger than 1MB (1024 * 1024 bytes)StateStoreException
- if the key or value fail validation, or if storing the data otherwise failsvalidateKey(String)
,
validateValue(byte[])
public byte[] fetchProperty(java.lang.String key) throws StateStoreException
key
, or throws an error if no matching key
is found.key
- must be a non-blank String without any forward slashes ('/')StateStoreException
- if no data was found for the requested key, or if fetching the data otherwise failsvalidateKey(String)
public java.util.Collection<java.lang.String> fetchPropertyKeys() throws StateStoreException
StateStoreException
- if fetching the list otherwise failspublic void clearProperty(java.lang.String key) throws StateStoreException
key
- must be a non-blank String without any forward slashes ('/')StateStoreException
- if key validation fails or clearing the entry failspublic void storeGoalOverrideStatus(java.lang.String taskName, GoalStateOverride.Status status) throws StateStoreException
Protos.TaskInfo
for this exact task MUST
have already been written via storeTasks(Collection)
beforehand.StateStoreException
- in the event of a storage errorpublic GoalStateOverride.Status fetchGoalOverrideStatus(java.lang.String taskName) throws StateStoreException
GoalStateOverride.Status
with override=NONE
and state=NONE
.StateStoreException
- in the event of a storage errorpublic void clearAllData() throws StateStoreException
StateStoreException
public Persister getPersister()
Persister
object for direct access.protected static java.lang.String getTaskInfoPath(java.lang.String taskName)
protected static java.lang.String getTaskStatusPath(java.lang.String taskName)
protected static java.lang.String getGoalOverridePath(java.lang.String taskName)
protected static java.lang.String getGoalOverrideStatusPath(java.lang.String taskName)
protected static java.lang.String getTaskPath(java.lang.String taskName)