Class RaftImpl

java.lang.Object
org.jgroups.protocols.raft.RaftImpl
Direct Known Subclasses:
Follower, Leader

public abstract class RaftImpl extends Object
Base class for the different roles a RAFT node can have (follower, candidate, leader)
Since:
0.1
Author:
Bela Ban
  • Field Details

    • raft

      protected RAFT raft
  • Constructor Details

    • RaftImpl

      public RaftImpl(RAFT raft)
  • Method Details

    • raft

      public RAFT raft()
    • raft

      public RaftImpl raft(RAFT r)
    • init

      public void init()
      Called right after instantiation
    • destroy

      public void destroy()
      Called before getting destroyed (on a role change)
    • handleAppendEntriesRequest

      public AppendResult handleAppendEntriesRequest(LogEntries entries, org.jgroups.Address leader, long prev_index, long prev_term, long entry_term, long leader_commit)
      Called (on a follower) when an AppendEntries request is received
      Parameters:
      entries - The data (commands to be appended to the log)
      leader - The leader's address (= the sender)
      prev_index - The index of the previous log entry
      prev_term - The term of the previous log entry
      entry_term - The term of the entry
      leader_commit - The leader's commit_index
      Returns:
      AppendResult A result (true or false), or null if the request was ignored (e.g. due to lower term)
    • handleAppendEntriesResponse

      public void handleAppendEntriesResponse(org.jgroups.Address sender, long term, AppendResult result)
    • handleInstallSnapshotRequest

      public void handleInstallSnapshotRequest(org.jgroups.Message msg, org.jgroups.Address leader, long last_included_index, long last_included_term)
      Called when a snapshot sent by the leader is received by a follower. The follower needs to overwrite its snapshot file with the received bytes and reinitialize its log to last_inluded_index and create a dummy LogEntry with last_included_term at last_included_index. This is needed by the next handleAppendEntriesRequest(LogEntries, Address, int, int, int, int) call to compare to the previous index and term.
      Parameters:
      msg - The snapshot message sent by the leader
      leader - The leader (= sender of the message)
      last_included_index - The last index that's reflected in the state (=snapshot) sent by the leader. Indices first_appended, commit_index and last_appended have to be set to last_included_index
      last_included_term - The last included term. The dummy entry needs to have this term, for comparison in the next handleAppendRequest() call.
    • getFirstIndexOfConflictingTerm

      protected long getFirstIndexOfConflictingTerm(long start_index, long conflicting_term)
      Finds the first index at which conflicting_term starts, going back from start_index towards the head of the log, not not going lower than commit-index