You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package raft
|
|
|
|
// LogType describes various types of log entries.
|
|
type LogType uint8
|
|
|
|
const (
|
|
// LogCommand is applied to a user FSM.
|
|
LogCommand LogType = iota
|
|
|
|
// LogNoop is used to assert leadership.
|
|
LogNoop
|
|
|
|
// LogAddPeer is used to add a new peer.
|
|
LogAddPeer
|
|
|
|
// LogRemovePeer is used to remove an existing peer.
|
|
LogRemovePeer
|
|
|
|
// LogBarrier is used to ensure all preceding operations have been
|
|
// applied to the FSM. It is similar to LogNoop, but instead of returning
|
|
// once committed, it only returns once the FSM manager acks it. Otherwise
|
|
// it is possible there are operations committed but not yet applied to
|
|
// the FSM.
|
|
LogBarrier
|
|
)
|
|
|
|
// Log entries are replicated to all members of the Raft cluster
|
|
// and form the heart of the replicated state machine.
|
|
type Log struct {
|
|
// Index holds the index of the log entry.
|
|
Index uint64
|
|
|
|
// Term holds the election term of the log entry.
|
|
Term uint64
|
|
|
|
// Type holds the type of the log entry.
|
|
Type LogType
|
|
|
|
// Data holds the log entry's type-specific data.
|
|
Data []byte
|
|
|
|
// peer is not exported since it is not transmitted, only used
|
|
// internally to construct the Data field.
|
|
peer string
|
|
}
|
|
|
|
// LogStore is used to provide an interface for storing
|
|
// and retrieving logs in a durable fashion.
|
|
type LogStore interface {
|
|
// FirstIndex returns the first index written. 0 for no entries.
|
|
FirstIndex() (uint64, error)
|
|
|
|
// LastIndex returns the last index written. 0 for no entries.
|
|
LastIndex() (uint64, error)
|
|
|
|
// GetLog gets a log entry at a given index.
|
|
GetLog(index uint64, log *Log) error
|
|
|
|
// StoreLog stores a log entry.
|
|
StoreLog(log *Log) error
|
|
|
|
// StoreLogs stores multiple log entries.
|
|
StoreLogs(logs []*Log) error
|
|
|
|
// DeleteRange deletes a range of log entries. The range is inclusive.
|
|
DeleteRange(min, max uint64) error
|
|
}
|