- 11 Jun, 2018 1 commit
-
-
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.
-
- 08 Jun, 2018 1 commit
-
-
Jiale Zhi authored
-
- 17 May, 2018 1 commit
-
-
Willem Thiart authored
-
- 16 May, 2018 1 commit
-
-
Willem Thiart authored
-
- 08 Jan, 2018 2 commits
-
-
Willem Thiart authored
-
Willem Thiart authored
-
- 29 Dec, 2017 1 commit
-
-
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.
-
- 21 Nov, 2017 7 commits
-
-
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:
Li Wei <wei.g.li@intel.com>
-
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:
Li Wei <wei.g.li@intel.com>
-
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:
Li Wei <wei.g.li@intel.com>
-
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:
Li Wei <wei.g.li@intel.com>
-
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:
Li Wei <wei.g.li@intel.com>
-
Li Wei authored
Remind users' persist_term implementations to persist currentTerm and nil votedFor atomically. Signed-off-by:
Li Wei <wei.g.li@intel.com>
-
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:
Li Wei <wei.g.li@intel.com>
-
- 20 Nov, 2017 1 commit
-
-
Li Wei authored
When the calling replica isn't in the leader state, raft_recv_appendentries_response() should return RAFT_ERR_NOT_LEADER instead of -1. Signed-off-by:
Li Wei <wei.g.li@intel.com>
-
- 20 Jun, 2017 1 commit
-
-
Willem Thiart authored
Avoid deleting logs because of out-of-order/quick heartbeats.
-
- 09 May, 2017 1 commit
-
-
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.
-
- 20 Sep, 2016 1 commit
-
-
Willem Thiart authored
-
- 10 Sep, 2016 1 commit
-
-
Willem Thiart authored
-
- 11 Jun, 2016 2 commits
-
-
Willem Thiart authored
-
Willem Thiart authored
-
- 22 May, 2016 1 commit
-
-
Willem Thiart authored
-
- 18 May, 2016 1 commit
-
-
Willem Thiart authored
-
- 13 May, 2016 3 commits
-
-
Willem Thiart authored
It makes sense that a single voting node should be able to receive entries. This prevents deadlocks in cases where the cluster removes all but one node.
-
Willem Thiart authored
-
Willem Thiart authored
This fix prevents deadlocks (ie. when we are trying to get votes from non-voting nodes that never vote).
-
- 11 Apr, 2016 2 commits
-
-
Willem Thiart authored
Regression caused by 6f318d01
-
Willem Thiart authored
Regression caused by d106d229
-
- 16 Mar, 2016 2 commits
-
-
Willem Thiart authored
-
Willem Thiart authored
This change is backwards incompatible. The following functions return different return codes: * applylog * log_offer * raft_append_entry * raft_apply_all * raft_recv_entry
-
- 03 Feb, 2016 1 commit
-
-
Willem Thiart authored
-
- 28 Jan, 2016 1 commit
-
-
Willem Thiart authored
A bug where if a node voted for node ID 0, it would continue to grant vote requests. This could result in candidates or leaders voting erroneously. This regression was caused by eefa3687.
-
- 25 Jan, 2016 5 commits
-
-
Willem Thiart authored
-
Willem Thiart authored
-
Willem Thiart authored
-
Willem Thiart authored
-
Willem Thiart authored
-
- 24 Jan, 2016 1 commit
-
-
Willem Thiart authored
-
- 20 Jan, 2016 2 commits
-
-
Willem Thiart authored
-
Willem Thiart authored
-