1. 18 Aug, 2021 1 commit
  2. 11 Aug, 2021 1 commit
  3. 06 Aug, 2021 1 commit
  4. 02 Aug, 2021 1 commit
  5. 01 Aug, 2021 1 commit
  6. 30 Jul, 2021 1 commit
    • Shaya Potter's avatar
      remove REMOVE_NODE log type and include its semantics in DEMOTE (#25) · d4d15e04
      Shaya Potter authored
      this commit changes libraft's from using the DEMOTE_NODE log entry which would then initiate a REMOVE_NODE log entry on the DEMOTE's commit, to only using a REMOVE.  
      
      * add the removal of the active node flag on append of REMOVE and (add back if reverted)
      * modify is_voting to check for active state as well
      
      this enables simplifying appending and reverting nodes, as we shouldn't be touching voting state, (as a removing node might not be voting yet), only its active state.  and as the is_voting check also now checks for active state, simplifies a lot of code that manually tested both.
      
      * add a test for reversion of a non voting node removal
      
      previously, the code could not handle demoting/removing a non voting node, as demote would want to unset the voting flag (which a non voting node obviously doesn't have), and would therefore fail an assertion.
      
      with the new code, we no longer unset the voting flag in removal, and this test make sure both the is_voting and is_active return as expected through a process of add/removal/revert
      d4d15e04
  7. 26 Jul, 2021 1 commit
    • Shaya Potter's avatar
      only promote node to voting when its nonvoting has been applied (#12) · 600cf4fe
      Shaya Potter authored
      before we were able to promote a "ready" but not applied nonvoting node to a voting state, which means it would change the calculation as could vote for itself to be added.
      
      * fix tests that check for has_sufficient_logs
      
      because of a fix put in to not allow a node to be added until its "addition" as a non voter was comitted, that broke existing tests where that flag wasn't being set and testing that the nodes could be promoted
      
      * add a test that has_sufficient_logs will fail if addition not committed yet
      
      code before would add a node as a voter (via has_sufficient_logs) even if the initial non voter addition wasn't committed
      
      the test for this in the code actually tested after setting addition_committed.  add a test that does the same without that flag being set and expects that has_sufficient_logs will not be set
      600cf4fe
  8. 19 Jul, 2021 1 commit
  9. 12 Mar, 2020 1 commit
    • 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
  10. 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
  11. 18 Dec, 2018 1 commit
  12. 09 Dec, 2018 1 commit
  13. 06 Dec, 2018 1 commit
  14. 20 Jun, 2018 2 commits
  15. 13 Jun, 2018 2 commits
  16. 11 Jun, 2018 1 commit
    • 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
  17. 08 Jun, 2018 1 commit
  18. 24 May, 2018 1 commit
  19. 17 May, 2018 1 commit
  20. 16 May, 2018 1 commit
  21. 11 Apr, 2018 1 commit
  22. 07 Mar, 2018 1 commit
    • Yossi Gottlieb's avatar
      Ignore RequestVote when leader is established. · 6cac5767
      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.
      6cac5767
  23. 08 Jan, 2018 2 commits
  24. 29 Dec, 2017 1 commit
    • Willem Thiart's avatar
      Fix: log edge cases · b912ff5a
      Willem Thiart authored
      The raft_log API is now being fuzzed tested. This change fixes all of
      the bugs detected by the fuzzer so far.
      b912ff5a
  25. 21 Nov, 2017 7 commits
    • Li Wei's avatar
      DAOS-333 server: Handle storage access errors · 76d56d0c
      Li Wei authored
      
      
      User storage callbacks may return negative errors smaller than
      RAFT_ERR_LAST. These will be returned all the way to the API methods,
      which report the errors back to users, so that appropriate handlings may
      be performed.
      Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
      76d56d0c
    • Li Wei's avatar
      DAOS-333 server: Don't remove later entries for matching AEs · 77fb6117
      Li Wei authored
      
      
      If an AE request's previous entry matches the follower's, then the
      follower doesn't need to truncate its log at prev_log_idx. When the
      follower checks if the other entries in the AE request are consistent
      with its local ones, it already takes care of truncating at any
      inconsistency. If any later entries not covered by this AE request are
      inconsistent, future AE requests shall truncate them.
      Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
      77fb6117
    • Li Wei's avatar
      DAOS-279 server: Zero timeout_elapsed for leaders · 51e049fd
      Li Wei authored
      
      
      If raft_become_candidate() assigns a negative value e (i.e.,
      -election_timeout < e < 0) to timeout_elapsed, and if this replica
      successfully becomes the leader, then this leader won't send heartbeats
      for request_timeout - e milliseconds. This may be longer than
      election_timeout and cause an unnecessary leadership change.
      
      This patch zeroes timeout_elapsed in raft_become_leader(), randomizes
      election timeouts in [election_timeout, 2 * election_timeout), and fixes
      raft_recv_appendentries() to avoid zeroing timeout_elapsed if the AE
      request has an older term.
      Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
      51e049fd
    • Li Wei's avatar
      DAOS-279 server: Discard current_leader when term changes · 14a4e6a2
      Li Wei authored
      
      
      When a leader learns of a newer term and steps down, it should discard
      current_leader. Otherwise, a client request may be rejected with
      RAFT_ERR_NOT_LEADER and a hint pointing to this replica itself!
      
      For simplicity, this patche follows the Raft paper to discard
      current_leader whenever current_term changes. And, when receiving an AE
      with an up-to-date term, a server always updates current_leader, as this
      information is absolute, even if the previous entry doesn't match.
      
      This patch also fixes a test that has previously been failing due to
      incorrect node IDs.
      Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
      14a4e6a2
    • Li Wei's avatar
      DAOS-333 log: Pass correct indices to log_offer and log_poll · 3096ecd7
      Li Wei authored
      
      
      log_offer and log_poll should get log entry index rather than internal
      array index. That would match the callback comment in raft.h and would
      also match the log_pop case.
      Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
      3096ecd7
    • Li Wei's avatar
      DAOS-333 server: Persist term and vote atomically · 854a06d2
      Li Wei authored
      
      
      Remind users' persist_term implementations to persist currentTerm and
      nil votedFor atomically.
      Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
      854a06d2
    • Li Wei's avatar
      DAOS-279 log: Avoid changing caller input entry · 920d574a
      Li Wei authored
      
      
      log_append_entry() passes caller's raft_entry_t to log_offer. If the
      log_offer implementation sets the data buffer to different value,
      caller's raft_entry_t gets modified as a side effect. This is
      error-prone as callers are usually responsible for freeing the data
      buffer with such a log_offer implementation. This patch passes the
      raft_entry_t in the log to log_offer instead. Also, ety in
      raft_recv_entry() is no longer required.
      Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
      920d574a
  26. 20 Nov, 2017 1 commit
  27. 20 Jun, 2017 1 commit
    • Willem Thiart's avatar
      Fixes #37 · 3e011ae2
      Willem Thiart authored
      Avoid deleting logs because of out-of-order/quick heartbeats.
      3e011ae2
  28. 09 May, 2017 1 commit
    • Willem Thiart's avatar
      Change: code now assumes callbacks are provided · c3443aac
      Willem Thiart authored
      Beforehand there were if statements to check if callbacks were provided
      by the user. This was only useful for making the test suites shorter.
      These if statements have been removed so that the core code is more
      concise.
      c3443aac
  29. 20 Sep, 2016 1 commit
  30. 10 Sep, 2016 1 commit
  31. 11 Jun, 2016 1 commit