Commit 94048d4a authored by Willem Thiart's avatar Willem Thiart
Browse files

Auto commit if num_nodes == 1

parent 9ebc6d71
...@@ -433,6 +433,10 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e, ...@@ -433,6 +433,10 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e,
if (me->nodeid != i) if (me->nodeid != i)
raft_send_appendentries(me_, i); raft_send_appendentries(me_, i);
/* if we're the only node, we can consider the entry committed */
if (1 == me->num_nodes)
me->commit_idx = raft_get_current_idx(me_);
r->id = e->id; r->id = e->id;
r->idx = raft_get_current_idx(me_); r->idx = raft_get_current_idx(me_);
r->term = me->current_term; r->term = me->current_term;
......
...@@ -324,6 +324,27 @@ void TestRaft_server_election_timeout_promotes_us_to_leader_if_there_is_only_1_n ...@@ -324,6 +324,27 @@ void TestRaft_server_election_timeout_promotes_us_to_leader_if_there_is_only_1_n
CuAssertTrue(tc, 1 == raft_is_leader(r)); CuAssertTrue(tc, 1 == raft_is_leader(r));
} }
void TestRaft_server_recv_entry_auto_commits_if_we_are_the_only_node(CuTest * tc)
{
void *r = raft_new();
raft_add_node(r, (void*)1, 1);
raft_set_election_timeout(r, 1000);
raft_become_leader(r);
CuAssertTrue(tc, 0 == raft_get_commit_idx(r));
/* entry message */
msg_entry_t ety;
ety.id = 1;
ety.data.buf = "entry";
ety.data.len = strlen("entry");
/* receive entry */
msg_entry_response_t cr;
raft_recv_entry(r, 1, &ety, &cr);
CuAssertTrue(tc, 1 == raft_get_log_count(r));
CuAssertTrue(tc, 1 == raft_get_commit_idx(r));
}
void TestRaft_server_cfg_sets_num_nodes(CuTest * tc) void TestRaft_server_cfg_sets_num_nodes(CuTest * tc)
{ {
void *r = raft_new(); void *r = raft_new();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment