1. 12 Sep, 2021 1 commit
    • Shaya Potter's avatar
      add a read_queue test to virtraft (#41) · bdd0797f
      Shaya Potter authored
      * add a read_queue test to virtraft
      
      every iteration we push a read_queue request and the handler and an we pass to it set a variable on calling.  we can use this to make sure that the read_queue doesn't get too far from the iteration.  i.e. we pass the leader's msg_id and can check to ensure that leader's msg_id doesn't get too far from the msg_id (variable) we see in read_queue test
      
      this is analog to the current log applying deadlock test.
      
      * implements msg_id checking in virtraft for verification of read_queue requests
      
      When we pop an entry off the read_queue with the can_read flag, we verify across all nodes that the majority of nodes have accepted from the leader a msg_id past what this read_queue entry needs.
      
      the problem with this is, that until now, msg_id was private to each server instance and has no relevance to the followre nodes except to include it back in response. 
      
      we change that to have the followers store the max msg_id they've seen from their current leader
      
      using that, in the read_queue_handler we can verify that the leader's voting nodes have a quorum past the msg_id variable that the handler will return to ensure that this read_queue handler call is correct.
      bdd0797f
  2. 09 Sep, 2021 1 commit
  3. 19 Aug, 2021 1 commit
  4. 18 Aug, 2021 1 commit
  5. 04 Aug, 2021 1 commit
  6. 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
  7. 06 Dec, 2018 1 commit
  8. 07 Aug, 2018 2 commits
  9. 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
  10. 20 Jun, 2018 1 commit
  11. 08 Jun, 2018 1 commit
  12. 24 May, 2018 1 commit
  13. 16 May, 2018 1 commit
  14. 04 Mar, 2018 1 commit
  15. 08 Jan, 2018 1 commit
  16. 21 Nov, 2017 5 commits
    • Li Wei's avatar
      DAOS-333 include: Export raft_become_follower() · a7a8291e
      Li Wei authored
      
      
      Move the declaration of raft_become_follower() from raft_private.h to
      raft.h, so that users may voluntarily give up leadership.
      Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
      a7a8291e
    • 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-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 server: Handle memory allocation errors · 6bf3f5f1
      Li Wei authored
      
      
      Check and handle memory allocation errors by reporting them back to
      users via NULL or RAFT_ERR_NOMEM return values.
      Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
      6bf3f5f1
  17. 21 Jun, 2017 1 commit
    • Willem Thiart's avatar
      Fixes #40 · 883d0d24
      Willem Thiart authored
      raft_send_requestvote and raft_send_appendentries now return proper
      error codes.
      883d0d24
  18. 11 Jun, 2016 2 commits
  19. 16 Mar, 2016 1 commit
  20. 25 Jan, 2016 2 commits
  21. 20 Jan, 2016 1 commit
  22. 31 Dec, 2015 2 commits
  23. 20 Dec, 2015 1 commit
  24. 19 Dec, 2015 1 commit
  25. 17 Nov, 2015 1 commit
  26. 30 Sep, 2015 1 commit
  27. 22 Aug, 2015 1 commit
  28. 14 Aug, 2015 1 commit
  29. 29 Jul, 2015 1 commit
  30. 28 May, 2014 1 commit
  31. 26 Feb, 2014 1 commit