- All Known Implementing Classes:
CounterService,CounterStateMachine,ReplicatedStateMachine,ReplStateMachine
public interface StateMachine
Interface of a state machine which stores data in memory. Committed log entries are applied to the state machine.
- Since:
- 0.1
- Author:
- Bela Ban
-
Method Summary
Modifier and TypeMethodDescriptionbyte[]apply(byte[] data, int offset, int length, boolean serialize_response) Applies a command to the state machine.voidReads the contents of the state machine from an input stream.voidwriteContentTo(DataOutput out) Writes the contents of the state machine to an output stream.
-
Method Details
-
apply
Applies a command to the state machine. The contents of the byte[] buffer are interpreted by the state machine. The command could for example be a set(), remove() or clear() command.- Parameters:
data- The byte[] bufferoffset- The offset at which the data startslength- The length of the dataserialize_response- If true, serialize and return the response, else return null- Returns:
- A serialized response value, or null (e.g. if the method returned void)
- Throws:
Exception- Thrown on deserialization or other failure
-
readContentFrom
Reads the contents of the state machine from an input stream.This can be the case when an InstallSnapshot RPC is used to bootstrap a new node, or a node that's lagging far behind. The parsing depends on the concrete state machine implementation, but the idea is that the stream is a sequence of commands, each of which can be passed to
apply(byte[], int, int, boolean).The state machine may need to block modifications until the contents have been set (unless e.g. copy-on-write is used). The state machine implementation may need to remove all contents before populating itself from the stream.
- Parameters:
in- The input stream- Throws:
Exception
-
writeContentTo
Writes the contents of the state machine to an output stream. This is typically called on the leader to provide state to a new node, or a node that's lagging far behind.Updates to the state machine may need to be put on hold while the state is written to the output stream.
- Parameters:
out- The output stream- Throws:
Exception
-