Interface EntryStore

All Known Subinterfaces:
ImmediateEntryStore
All Known Implementing Classes:
DisabledRaftStorage, EnabledRaftStorage, ForwardingEntryStore, RaftStorage

@NonNullByDefault public interface EntryStore
Interface to a access and manage StateMachineCommand-bearing entries with EntryMeta. This interface is inherently asynchronous, with the assumption that each request is enqueued to a background thread, which processes requests in batches. Synchronization with the enclosing RaftActor is either asynchronous (via RaftCallbacks), or defined to terminate the actor on failure.
  • Method Details

    • completer

      Returns:
      the RaftStorageCompleter
    • persistEntry

      default void persistEntry(ReplicatedLogEntry entry, RaftCallback<Long> callback)
      Persists an entry to the applicable journal synchronously. The contract is that the callback will be invoked before RaftActor sees any other message. Default implementation registers the callback with completer() and defers to startPersistEntry(ReplicatedLogEntry, RaftCallback).
      Parameters:
      entry - the journal entry to persist
      callback - the callback when persistence is complete
    • startPersistEntry

      void startPersistEntry(ReplicatedLogEntry entry, RaftCallback<Long> callback)
      Persists an entry to the applicable journal asynchronously.
      Parameters:
      entry - the journal entry to persist
      callback - the callback when persistence is complete
    • discardHead

      void discardHead(long firstRetainedIndex)
      Deletes journal entries up to, but not including, the given journalIndex.
      Parameters:
      firstRetainedIndex - the journalIndex of the first retained entry
    • discardTail

      void discardTail(long firstRemovedIndex)
      Delete entries starting from, and including, specified index. The contract is that the callback will be invoked before RaftActor sees any other message.
      Parameters:
      firstRemovedIndex - the journalIndex of first entry to delete
    • checkpointLastApplied

      void checkpointLastApplied(long commitJournalIndex)
      Record a known value of lastApplied as a recovery optimization. If we can recover this information, recovery can re-apply these entries before we attempt to talk to other members. It is okay to lose this marker, as in that case we will just apply those entries as part of being a follower or becoming a leader.

      This amounts to persisting a lower bound on commitIndex, which is explicitly volatile state. We could remember that instead (or perhaps as well) -- but now we just derive it.

      If we later discover that this index lies beyond current leader's commitIndex, we will ask for a complete snapshot -- which is not particularly nice, but should happen seldom enough for it not to matter much.

      Parameters:
      commitJournalIndex - the journalIndex of the entry which is covered by commitIndex and has been observed as lastApplied.