abstract class
Raft::Log
- Raft::Log
- Reference
- Object
Overview
Abstract base class for the Raft replicated log.
The log stores an ordered sequence of entries, persistent metadata (current term and voted-for), and snapshots. Entries are 1-indexed — index 0 means "no entry" (empty log).
Two implementations are provided:
Log::InMemory— all data held in memory, suitable for testingLog::File— on-disk persistence with crash recovery
log = Raft::Log::InMemory.new # for testing
log = Raft::Log::File.new("/data") # for production
Direct Known Subclasses
Defined in:
raft/log.crraft/log/entry.cr
Instance Method Summary
-
#append(entries : Array(Entry)) : Nil
Appends entries to the log with conflict detection.
-
#close : Nil
Releases any resources held by the log (e.g., file handles).
-
#get(index : UInt64) : Entry | Nil
Returns the entry at the given 1-based index, or
nilif not present. -
#last_index : UInt64
Returns the index of the last entry, or
0if the log is empty. -
#last_term : UInt64
Returns the term of the last entry, or
0if the log is empty. -
#load_metadata : Metadata
Loads the persisted metadata, or returns defaults (term 0, no vote).
-
#load_snapshot : Tuple(UInt64, UInt64, Bytes) | Nil
Loads the most recent snapshot, or returns
nilif none exists. -
#save_metadata(meta : Metadata) : Nil
Persists the node's current term and voted-for state.
-
#save_snapshot(last_index : UInt64, last_term : UInt64, data : Bytes) : Nil
Saves a snapshot and compacts the log up to last_index.
-
#slice(from : UInt64, to : UInt64) : Array(Entry)
Returns entries in the inclusive range [from, to].
-
#term_at(index : UInt64) : UInt64 | Nil
Returns the term of the entry at index, or
nilif not present. -
#truncate_from(index : UInt64) : Nil
Removes all entries at index and beyond (inclusive).
Instance Method Detail
Appends entries to the log with conflict detection.
If an existing entry at the same index has a different term, all entries from that index onward are truncated before appending. Entries with matching index and term are skipped (idempotent).
Returns the entry at the given 1-based index, or nil if not present.
Loads the persisted metadata, or returns defaults (term 0, no vote).
Loads the most recent snapshot, or returns nil if none exists.
Returns a tuple of {last_included_index, last_included_term, snapshot_data}.
Persists the node's current term and voted-for state.
Saves a snapshot and compacts the log up to last_index.
All entries with index <= last_index are removed from the log.
Returns entries in the inclusive range [from, to].
Returns the term of the entry at index, or nil if not present.
Removes all entries at index and beyond (inclusive).