Represents a view of the cluster to a RaftNode.
Represents a view of the cluster to a RaftNode. This is passed in, allowing the RaftNode (whos responsibility is to maintain its own state) to communicate with the rest of the cluster and control its timeouts
Provides a handler onDynamicClusterMessage for Raft DynamicClusterMessage append messages
Timers are tricky, as they need to be given to a ClusterProtocol, but the cluster protocol needs to reference nodes, which the timers in turn need to have a reference to.
Timers are tricky, as they need to be given to a ClusterProtocol, but the cluster protocol needs to reference nodes, which the timers in turn need to have a reference to.
Because of this circular reference, we make an 'initializable' timer, which is a valid RaftTimer, but resets won't take affect until it has been initialized.
Represents the commit log
Represents the commit log
the messages we're saving to the log
A RaftNode encapsulates (or should encapsulate) _any_ raft implementation.
A RaftNode encapsulates (or should encapsulate) _any_ raft implementation.
The RaftEndpoint is the API representation for things which want to send raft messages to a node, but a 'RaftNode' can also accept reply messages
Pulls together the different components of a Raft System as seen by a raft node.
Provides a Raft setup which can add/remote cluster nodes at runtime
Exposes functions for initialising raft systems from a configuration