- 16 Oct, 2018 1 commit
-
-
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.
-
- 04 Oct, 2018 1 commit
-
-
Yossi Gottlieb authored
To clarify, the desired behavior is: 1) Avoid false assertions. 2) Silently ignore AE responses which are stale or not monotonic (i.e. current index < match index).
-
- 27 Sep, 2018 2 commits
-
-
Yossi Gottlieb authored
Errors were ignored if node's match_idx==next_idx-1, I assume (??) as a precaution against silently feeding a node that is not monotonic. However this does not consider the case where send_appendentries() relies on snapshot_last_idx which may be greater than the node's index.
-
Yossi Gottlieb authored
-
- 15 Aug, 2018 1 commit
-
-
Yossi Gottlieb authored
-
- 07 Aug, 2018 1 commit
-
-
Yossi Gottlieb authored
If specified when calling raft_begin_snapshot(), the library will not postpone applying entries during snapshots. This requires the FSM to provide full isolation between the snapshot and active state.
-
- 30 Jul, 2018 1 commit
-
-
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.
-
- 12 Jul, 2018 2 commits
-
-
Yossi Gottlieb authored
-
Yossi Gottlieb authored
-
- 20 Jun, 2018 2 commits
-
-
Yossi Gottlieb authored
-
Yossi Gottlieb authored
-
- 13 Jun, 2018 2 commits
-
-
Willem Thiart authored
This fixes the virtraft checks.
-
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.
-
- 11 Jun, 2018 3 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.
-
Willem Thiart authored
-
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.
-
- 08 Jun, 2018 1 commit
-
-
Jiale Zhi authored
-
- 07 Jun, 2018 2 commits
-
-
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.
-
Yossi Gottlieb authored
* Fix off-by-one in apply_log idx. * Fix log_get_from_idx() off by one error.
-
- 17 May, 2018 3 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>
-
Willem Thiart authored
-
Willem Thiart authored
This fixes the virtraft checks.
-
- 16 May, 2018 3 commits
-
-
skypexu authored
Fix raft_begin_load_snapshot last_included_term handling
-
Yossi Gottlieb authored
-
Yossi Gottlieb authored
This is a breaking change.
-
- 08 Jan, 2018 2 commits
-
-
Willem Thiart authored
-
Willem Thiart authored
-
- 21 Nov, 2017 9 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
raft_recv_appendentries() doesn't need to check prev_log_idx against currentIndex, as this is already done implicitly by getting the entry at prev_log_idx. Signed-off-by:
Li Wei <wei.g.li@intel.com>
-
Li Wei authored
raft_recv_appendentries_response() should check r->term before checking r->current_idx. Signed-off-by:
Li Wei <wei.g.li@intel.com>
-
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:
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 2 commits
-
-
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>
-
Anuj Kalia authored
-
- 22 Jun, 2017 1 commit
-
-
Willem Thiart authored
-
- 21 Jun, 2017 1 commit
-
-
Willem Thiart authored
Second if statement was redundant.
-