- 15 May, 2022 1 commit
-
-
Ozan Tezcan authored
Fix next_idx and next_msgid usages
-
- 02 May, 2022 1 commit
-
-
Ozan Tezcan authored
-
- 26 Apr, 2022 1 commit
-
-
Ozan Tezcan authored
Add raft_config() function for configuration
-
- 25 Apr, 2022 1 commit
-
-
Ozan Tezcan authored
-
- 18 Apr, 2022 1 commit
-
-
Ozan Tezcan authored
Refactor
-
- 06 Apr, 2022 1 commit
-
-
Ozan Tezcan authored
-
- 04 Apr, 2022 1 commit
-
-
Ozan Tezcan authored
-
- 03 Apr, 2022 1 commit
-
-
Ozan Tezcan authored
-
- 30 Mar, 2022 2 commits
-
-
Ozan Tezcan authored
-
Ozan Tezcan authored
-
- 24 Mar, 2022 1 commit
-
-
Ozan Tezcan authored
Delete private typedefs, use namespace raft_ for exported symbols
-
- 21 Mar, 2022 1 commit
-
-
Ozan Tezcan authored
-
- 13 Mar, 2022 5 commits
-
-
Ozan Tezcan authored
Enabled compiler warnings and fixed issues
-
Ozan Tezcan authored
-
Ozan Tezcan authored
-
Ozan Tezcan authored
-
Ozan Tezcan authored
-
- 08 Mar, 2022 1 commit
-
-
Ozan Tezcan authored
-
- 06 Mar, 2022 1 commit
-
-
Ozan Tezcan authored
-
- 15 Feb, 2022 1 commit
-
-
Ozan Tezcan authored
-
- 07 Feb, 2022 1 commit
-
-
Ozan Tezcan authored
Add support for async disk flush, backpressure and batching
-
- 07 Dec, 2021 1 commit
-
-
Shaya Potter authored
the only valid return values are 0 (success) or RAFT_ERR_SHUTDOWN. this is now enforced by an assert
-
- 17 Nov, 2021 1 commit
-
-
Yossi Gottlieb authored
* Build libraft_shared.so to support tests. * CMake target to create raft_cffi module. * CMake changes to handle LD_LIBRARY_PATH for libraft.so to be found. * raft_cffi_builder changes to support arbitrary include and library paths. Co-authored-by:
tezc <ozantezcan@gmail.com>
-
- 16 Nov, 2021 1 commit
-
-
Yossi Gottlieb authored
* Add COVERAGE=1 Makefile option to build libraft with coverage. * Refactor CFFI module to use the existing shared object in an out-of-line configuration, so there's no need to build and re-build it. * Makefile adjustments to build the module CFFI as needed. * Remove raft_get_snapshot_entry_idx, a prototype for an undefined function that breaks CFFI. * Add a gcov Makefile target to fetch both unit tests and integration test coverage in one shot.
-
- 15 Nov, 2021 1 commit
-
-
Ozan Tezcan authored
Added snapshot RPC to support large state machines.
-
- 14 Nov, 2021 1 commit
-
-
Yossi Gottlieb authored
A public repository does not require a token, so we get the benefit of being able to run coverage on PRs as well.
-
- 11 Nov, 2021 1 commit
-
-
Shaya Potter authored
* print out table with better labels * print out a nodes voting peers (can help debugging based on partitions) * fix node "status" (connected/connecting/disconnected...) in case of an entry pop of a remove entry
-
- 03 Nov, 2021 1 commit
-
-
Shaya Potter authored
this is to avoid sending duplicate entries each time raft_send_appendentries is called, just because they haven't been acked yet. it will still be reset backwards upon the leader receiving a raft_recv_appendentries_response() with a failure mode + a test for next_idx on append entry, which changes a number of tests which checked for this in order to do this, I had to modify the existing mock callback to return 0 instead of 1. this needs to be verified + fixes for raft tests that this change exposed 1) when we issues a sequence of entries, each was given an increasing term, so had entries whose term was higher than leaders term so had to fix that 2) by setting the term of appendentries_repsonse to not be equal to leaders term (because of fix above), we now fail on receiving them do all that by not allowing raft_append_entry to append an entry that break raft semantics (i.e. term of entry > log term), but this breaks many tests that don't set term, so set them
-
- 20 Oct, 2021 2 commits
-
-
Yossi Gottlieb authored
Also, remove the more detailed documentation and code samples which are no longer accurate/up-to-date and can be misleading.
-
Yossi Gottlieb authored
* Add a daily job. * Pin Python 3.9 due to CFFI issues. * Add codecov.
-
- 12 Oct, 2021 1 commit
-
-
Shaya Potter authored
this was recorded in 2 places, inconsistently, when it only neededed to be recorded once. it was in raft_recv_entry() as if (raft_entry_is_voting_cfg_change(ety)) me->voting_cfg_change_log_idx = raft_get_current_idx(me_); and in raft_append_entry() as me->voting_cfg_change_log_idx = raft_get_current_idx(me_) - 1; it only should be in raft_append_entry() becaues raft_recv_entry() is only from the leader, but its value was wrong, while raft_recv_entry() was correct. This is also why it generally worked, if no leader election happened, it always had correct value, but if a new leader was elected that would have to commit this entry, it be wrong.
-
- 07 Oct, 2021 1 commit
-
-
Shaya Potter authored
this started off as a small tweak and grew a bit 1) new callback for transfer leader result, along with its own enum of states 2) change/remove raft_reset_transfer_leader() calls only call in places where there's a new leader or timeout (i.e. failed to transfer within period). so, we only reset in 3 places 1) recv_appendentries 2) raft_periodic (timeout) 3) raft_become_leader 2a) raft_become_leader also got refactored a little to only issue the normal cb.notify_state_event() callback after it has set its state to be leader (as before, it could fail after the callback was issued) 2b) in raft_periodic the raft_reset_transfer_leader() is pulled out the "if LEADER" block, as will lose leader when a vote is issued to it, we still want it to timeout if leadership isn't gained 3) raft_reset_transfer_leader() does the logic for determining success/failure now, but becaue timeout is its own result which can't be determined by just looking at leader/desired, add a new flag to it to note timeout state 4) leader stickiness in requestvote is only tested for prevote (as in a timeout now case, we want to drop the timeout now flag after prevotes are sent). The idea is that we will only get to actual election if prevote passes. 4) a bunch of new tests * fix issue with timeout flag to reset_transfer_leader also fix test to catch the original error * libraft/redisraft changes needed for e2e leader transfer * make leader stickiness only for prevote
-
- 26 Sep, 2021 1 commit
-
-
Shaya Potter authored
it has to be after we notify the caller, not before, as caller needs the state to know what happened I had it before, realized it had to be after, but in efforts of rebasing previous PR, it got moved back to before, without me realizing. Now that integrating it into redisraft, realized the problem
-
- 23 Sep, 2021 2 commits
-
-
Shaya Potter authored
this is the small modifications needed for raftlib to support timeout now rpc 1) add a flag to requestvote type to tell other nodes its overriding normal chec 2) new send_timeoutnow callback to send a timeout now rpc at right time 3) call said callback is we've marked the node as timeout now and in raft_appendentries_response raft_get_current_idx(me_) == r->current_idx (i.e. response says the node's idx is up to date with leader) 4) add helper functions to set/get/reset timeout flag on node structs for targeted node. how it would be used by client 1) client of libraft will call raft_transfer_leader(raft_server_t* me_, raft_node_id_t node_id) to target the node they want to transfer to. 2) client of libraft will provide the send_timeoutnow() callback for the actual sending of the rpc 3) client of libraft will modify their existing notify_state_event() callback to observe the result of the timeout now operation. if it receives a RAFT_STATE_LEADERSHIP_TRANSFER_FAILED, then the transfer failed if it received a RAFT_STATE_FOLLOWER, then it inspects for the actual leader to see if its the expected one and can return that it was transferred to expected node or not if it received a RAFT_STATE_CANDIDATE, then the transfer also failed, as the targeted node sent a request vote which removed leadership, but wasn't able to win the election. With PreVote, this latter case should be very rare.
-
Ozan Tezcan authored
Define separate callback function for node id retrieval
-
- 22 Sep, 2021 1 commit
-
-
Shaya Potter authored
* fix read queue test to be more accurate 1) each server's set of nodes, keeps the max msg_id its seen from that node when that node has been later 1a) because of this get_max_seen now operates on a server's nodes, not on the server itself b 2) virtraft encodes the leader id into the "arg" (with a user redefinable multiplier) it sends as part of the callback, so when we get the callback, we can know what leader its for and check its voters for correctness.
-
- 15 Sep, 2021 2 commits
-
-
Ozan Tezcan authored
-
Ozan Tezcan authored
-
- 14 Sep, 2021 2 commits
-
-
Ozan Tezcan authored
-
Ozan Tezcan authored
* prevote implementation
-