- 24 May, 2018 2 commits
-
-
Yossi Gottlieb authored
-
Yossi Gottlieb authored
-
- 23 May, 2018 2 commits
-
-
Yossi Gottlieb authored
-
Yossi Gottlieb authored
-
- 17 May, 2018 4 commits
-
-
Li Wei authored
An AE request's prevLogTerm and entries should never conflict with the follower's committed entries, according to the Raft protocol. If this happens, we should print a warning and inform callers to shut down. Signed-off-by:
Li Wei <wei.g.li@intel.com>
-
Li Wei authored
Since mod() has a short name and is only in raft_log.c, it should be static. Signed-off-by:
Li Wei <wei.g.li@intel.com>
-
Willem Thiart authored
-
Willem Thiart authored
This fixes the virtraft checks.
-
- 16 May, 2018 7 commits
-
-
Willem Thiart authored
-
skypexu authored
Fix raft_begin_load_snapshot last_included_term handling
-
Yossi Gottlieb authored
-
Willem Thiart authored
-
Willem Thiart authored
-
Yossi Gottlieb authored
This fails the fuzzer tests.
-
Yossi Gottlieb authored
This is a breaking change.
-
- 13 May, 2018 1 commit
-
-
Yossi Gottlieb authored
This fix is possibly incomplete and may shadow another problem, possibly an off-by-one handling of the voting configuration change index.
-
- 06 May, 2018 1 commit
-
-
Yossi Gottlieb authored
-
- 02 May, 2018 1 commit
-
-
Yossi Gottlieb authored
-
- 25 Apr, 2018 1 commit
-
-
Yossi Gottlieb authored
-
- 11 Apr, 2018 2 commits
-
-
Yossi Gottlieb authored
-
Yossi Gottlieb authored
AE responses from a non-voting node can be ignored during a voting change, causing has_sufficient_logs for this node to never fire in the future.
-
- 07 Mar, 2018 2 commits
-
-
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.
-
Yossi Gottlieb authored
This fails the fuzzer tests.
-
- 04 Mar, 2018 2 commits
-
-
Yossi Gottlieb authored
This is useful to allow leaders to pass context between raft_recv_entry() and a subsequent execution of the entry (after it was committed) as an applylog callback. This allows an optimized use pattern when entries received locally on the leader can be used without going through an unnecessary deserialization.
-
Yossi Gottlieb authored
-
- 09 Jan, 2018 2 commits
-
-
Willem Thiart authored
-
Willem Thiart authored
-
- 08 Jan, 2018 4 commits
-
-
Willem Thiart authored
-
Willem Thiart authored
-
Willem Thiart authored
-
Willem Thiart authored
-
- 29 Dec, 2017 2 commits
-
-
Willem Thiart authored
-
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
-
-
Willem Thiart authored
-
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:
Li Wei <wei.g.li@intel.com>
-
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>
-