1. 16 Apr, 2020 1 commit
  2. 23 Mar, 2020 2 commits
    • Yossi Gottlieb's avatar
      Fix issue with AE not delivered to removed nodes. · 02fda63f
      Yossi Gottlieb authored
      During joint consensus, we need to deliver entries to demoted and
      removed nodes so they can gracefully shut down.
      
      This also fixes an issue with raft_send_appendentries_all() which
      aborted on first delivery error, creating artificial cluster partitions.
      This problem is further aggravated when attempting to deliver to
      inactive nodes.
      02fda63f
    • Yossi Gottlieb's avatar
      Revert commits c3064082 and da936a95. · 2c105362
      Yossi Gottlieb authored
      Turns out documentation is not up to date regarding the process of node
      removal, and it the current implementation assumes a two-phase process
      is always required (i.e. DEMOTE followed by REMOVE).
      2c105362
  3. 12 Mar, 2020 2 commits
    • Yossi Gottlieb's avatar
      Add RAFT_LOGTYPE_NO_OP. · 5d7915f3
      Yossi Gottlieb authored
      The no-op entry gets committed as soon as a new leader is elected, in
      order to establish the commit index and prevent stale reads.
      5d7915f3
    • Yossi Gottlieb's avatar
      Fix virtraft membership tests. · c3064082
      Yossi Gottlieb authored
      This fixes an issue with virtraft2 which was not able to perform
      REMOVE_NODE when DEMOTE_NODE was applied. The previous fix of directly
      removing nodes was not aligned with how virtraft2 manages nodes.
      c3064082
  4. 10 Mar, 2020 1 commit
    • Yossi Gottlieb's avatar
      Fix: multiple REMOVE_NODE permitted. · da936a95
      Yossi Gottlieb authored
      The limit for enforcing a single uncommitted voting change must apply to
      remove node as well. It seems like it was left out considering only the
      case where it follows DEMOTE_NODE, but that's not really required.
      da936a95
  5. 19 Dec, 2018 1 commit
    • Yossi Gottlieb's avatar
      Read request handling support. · 84362fa7
      Yossi Gottlieb authored
      This makes it possible to request a consistent read without having to
      commit it as a log operation.
      
      For every read request an AE heartbeat is delivered and a quorum
      response is expected.
      84362fa7
  6. 18 Dec, 2018 1 commit
  7. 13 Dec, 2018 1 commit
  8. 11 Dec, 2018 1 commit
  9. 09 Dec, 2018 1 commit
  10. 06 Dec, 2018 1 commit
  11. 16 Oct, 2018 1 commit
    • Yossi Gottlieb's avatar
      Fix a memory leak with log_clear. · 89d793a0
      Yossi Gottlieb authored
      This is probably most common when loading a snapshot.  Currently it is
      only possibly to free allocated entry memory on log_pop and log_poll,
      but neither are called on log_reset().
      
      This is a quick and non-breaking fix.  A better but not backward
      compatible option can be to have a free function callback as part of
      the entry itself (automatically called when needed, not by log_pop or
      log_poll).  This would also make it easier to avoid redundant buffer
      allocs/copies on the app side.
      89d793a0
  12. 08 Oct, 2018 1 commit
  13. 04 Oct, 2018 2 commits
  14. 27 Sep, 2018 4 commits
  15. 15 Aug, 2018 1 commit
  16. 07 Aug, 2018 2 commits
  17. 30 Jul, 2018 2 commits
    • Yossi Gottlieb's avatar
      Add raft_cancel_snapshot(). · 074091c1
      Yossi Gottlieb authored
      This cancels the snapshot operation and reverts back to the state we
      were in before raft_begin_snapshot().
      
      It is useful for cases where the snapshot operation fails.  It is the
      caller's responsibility to make sure the FSM state remains intact of
      course.
      074091c1
    • Yossi Gottlieb's avatar
      Add raft_cancel_snapshot(). · 3badd2a0
      Yossi Gottlieb authored
      This cancels the snapshot operation and reverts back to the state we
      were in before raft_begin_snapshot().
      
      It is useful for cases where the snapshot operation fails.  It is the
      caller's responsibility to make sure the FSM state remains intact of
      course.
      3badd2a0
  18. 22 Jul, 2018 1 commit
    • Yossi Gottlieb's avatar
      End snapshot fixes. · b727e5f4
      Yossi Gottlieb authored
      We can't assume commit index does not change between begin and end
      snapshot, as AE responses may arrive.
      b727e5f4
  19. 12 Jul, 2018 4 commits
  20. 10 Jul, 2018 1 commit
    • Yossi Gottlieb's avatar
      Add raft_pop_entry(). · 876f8d7c
      Yossi Gottlieb authored
      This is required to allow append-only persistent log formats, where
      raft_append_entry() is called but may be reverted later on.
      876f8d7c
  21. 20 Jun, 2018 2 commits
  22. 13 Jun, 2018 2 commits
  23. 11 Jun, 2018 3 commits
    • Yossi Gottlieb's avatar
      Ignore RequestVote when leader is established. (#58) · ab96a768
      Yossi Gottlieb authored
      This behavior is described in the original Raft paper and is required to
      prevent removed nodes from disrupting the cluster.
      
      This causes other problems though, as a split node may trigger election
      which is rejected but leaves it with a future term.  The generally
      accepted solution for this appears to be the use of PreVote RPC to avoid
      election that can never succeed.
      ab96a768
    • Willem Thiart's avatar
      Add virtraft2 · aa3586ff
      Willem Thiart authored
      aa3586ff
    • Willem Thiart's avatar
      Add notify_membership_event callback · 3ff2682d
      Willem Thiart authored
      This is an optional callback.
      
      This is useful for the user to know when a node has been added/removed,
      so that something like raft_node_set_udata can be set properly.
      3ff2682d
  24. 08 Jun, 2018 1 commit
  25. 07 Jun, 2018 1 commit
    • Willem Thiart's avatar
      Remove RAFT_LOGTYPE_SNAPSHOT · 700eebe6
      Willem Thiart authored
      The RAFT_LOGTYPE_SNAPSHOT was a bad design choice. It's better to not
      have this marker entry so that users don't have to check for the log
      entry type in the callbacks. Also, loading a snapshot correctly created
      this marker entry, but the compaction side did not. It's better to
      remove this log type than to fix this asymmetry.
      
      Fixes the following edge cases:
      - Server crashes if the last snapshot index is N and a appendentries
      message pops entries all the way back to index N.
      - Server sends an appendentries message with an invalid prev_log_idx and
      prev_log_term, causing the peer to crash.
      700eebe6