class

Raft::Log

Inherits Reference < Object

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 testing
  • Log::File — on-disk persistence with crash recovery
log = Raft::Log::InMemory.new      # for testing
log = Raft::Log::File.new("/data") # for production

Instance methods

append(entry : Entry) : Nil

Appends a single entry 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. An entry with matching index and term is skipped (idempotent).

Source
append(entries : Array(Entry)) : Nil

Appends multiple entries to the log with conflict detection.

The default implementation delegates to the single-entry overload. Subclasses may override for batch optimizations (e.g., deferred fsync).

Source
close

Releases any resources held by the log (e.g., file handles).

Source
each_in_range(from : UInt64, to : UInt64, & : Entry -> ) : Nil

Yields each entry in the inclusive range [from, to] without allocating an intermediate array. Preferred over slice on hot paths.

Source
get(index : UInt64) : Entry | Nil

Returns the entry at the given 1-based index, or nil if not present.

Source
last_index

Returns the index of the last entry, or 0 if the log is empty.

Source
last_term

Returns the term of the last entry, or 0 if the log is empty.

Source
load_metadata

Loads the persisted metadata, or returns defaults (term 0, no vote).

Source
load_snapshot

Loads the most recent snapshot, or returns nil if none exists.

Returns a tuple of {last_included_index, last_included_term, snapshot_data}.

Source
save_metadata(meta : Metadata) : Nil

Persists the node's current term and voted-for state.

Source
save_snapshot(last_index : UInt64, last_term : UInt64, data : Bytes) : Nil

Saves a snapshot and compacts the log up to last_index.

All entries with index <= last_index are removed from the log.

Source
slice(from : UInt64, to : UInt64) : Array(Entry)

Returns entries in the inclusive range [from, to].

Source
term_at(index : UInt64) : UInt64 | Nil

Returns the term of the entry at index, or nil if not present.

Source
truncate_from(index : UInt64) : Nil

Removes all entries at index and beyond (inclusive).

Source

Nested types