Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
RedisLabs Raft
Commits
733123ab
Unverified
Commit
733123ab
authored
Sep 04, 2022
by
Ozan Tezcan
Committed by
GitHub
Sep 04, 2022
Browse files
Propagate persist_metadata() failure (#138)
Propagate error codes from persist_metadata() callback
parent
e79d3b6a
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/raft_server.c
View file @
733123ab
...
@@ -509,7 +509,10 @@ int raft_become_candidate(raft_server_t *me)
...
@@ -509,7 +509,10 @@ int raft_become_candidate(raft_server_t *me)
}
}
if
(
raft_node_is_voting
(
me
->
node
))
{
if
(
raft_node_is_voting
(
me
->
node
))
{
raft_vote
(
me
,
me
->
node
);
e
=
raft_vote
(
me
,
me
->
node
);
if
(
e
!=
0
)
{
return
e
;
}
}
}
me
->
leader_id
=
RAFT_NODE_ID_NONE
;
me
->
leader_id
=
RAFT_NODE_ID_NONE
;
...
@@ -1867,16 +1870,19 @@ int raft_begin_load_snapshot(raft_server_t *me,
...
@@ -1867,16 +1870,19 @@ int raft_begin_load_snapshot(raft_server_t *me,
return
RAFT_ERR_SNAPSHOT_ALREADY_LOADED
;
return
RAFT_ERR_SNAPSHOT_ALREADY_LOADED
;
}
}
if
(
last_included_term
>
me
->
current_term
)
{
int
e
=
raft_set_current_term
(
me
,
last_included_term
);
if
(
e
!=
0
)
{
return
e
;
}
}
me
->
log_impl
->
reset
(
me
->
log
,
last_included_index
+
1
,
last_included_term
);
me
->
log_impl
->
reset
(
me
->
log
,
last_included_index
+
1
,
last_included_term
);
if
(
last_included_index
>
me
->
commit_idx
)
{
if
(
last_included_index
>
me
->
commit_idx
)
{
raft_set_commit_idx
(
me
,
last_included_index
);
raft_set_commit_idx
(
me
,
last_included_index
);
}
}
if
(
last_included_term
>
me
->
current_term
)
{
raft_set_current_term
(
me
,
last_included_term
);
}
me
->
last_applied_term
=
last_included_term
;
me
->
last_applied_term
=
last_included_term
;
me
->
last_applied_idx
=
last_included_index
;
me
->
last_applied_idx
=
last_included_index
;
me
->
next_snapshot_last_term
=
last_included_term
;
me
->
next_snapshot_last_term
=
last_included_term
;
...
...
tests/test_server.c
View file @
733123ab
...
@@ -4988,6 +4988,45 @@ void TestRaft_delete_configuration_change_entries(CuTest *tc)
...
@@ -4988,6 +4988,45 @@ void TestRaft_delete_configuration_change_entries(CuTest *tc)
CuAssertIntEquals(tc, 0, raft_recv_entry(r, ety, NULL));
CuAssertIntEquals(tc, 0, raft_recv_entry(r, ety, NULL));
}
}
static int fail_sequence = 0;
static int cb_persist_metadata_fail(raft_server_t *raft, void *udata,
raft_term_t term, raft_node_id_t vote)
{
if (--fail_sequence >= 0) {
return 0;
}
return -1;
}
void TestRaft_propagate_persist_metadata_failure(CuTest *tc)
{
int e;
raft_cbs_t funcs = {
.persist_metadata = cb_persist_metadata_fail,
};
raft_server_t *r = raft_new();
raft_set_callbacks(r, &funcs, NULL);
raft_add_node(r, NULL, 1, 1);
raft_add_node(r, NULL, 2, 0);
/* This will fail when we increment the term. */
e = raft_become_candidate(r);
CuAssertIntEquals(tc, e, -1);
/* This will fail when we vote for ourselves. */
fail_sequence = 1;
e = raft_become_candidate(r);
CuAssertIntEquals(tc, e, -1);
fail_sequence = 0;
e = raft_begin_load_snapshot(r, 2, 10);
CuAssertIntEquals(tc, e, -1);
}
int main(void)
int main(void)
{
{
CuString *output = CuStringNew();
CuString *output = CuStringNew();
...
@@ -5141,6 +5180,7 @@ int main(void)
...
@@ -5141,6 +5180,7 @@ int main(void)
SUITE_ADD_TEST(suite, TestRaft_test_metadata_on_restart);
SUITE_ADD_TEST(suite, TestRaft_test_metadata_on_restart);
SUITE_ADD_TEST(suite, TestRaft_rebuild_config_after_restart);
SUITE_ADD_TEST(suite, TestRaft_rebuild_config_after_restart);
SUITE_ADD_TEST(suite, TestRaft_delete_configuration_change_entries);
SUITE_ADD_TEST(suite, TestRaft_delete_configuration_change_entries);
SUITE_ADD_TEST(suite, TestRaft_propagate_persist_metadata_failure);
CuSuiteRun(suite);
CuSuiteRun(suite);
CuSuiteDetails(suite, output);
CuSuiteDetails(suite, output);
printf("%s\n", output->buffer);
printf("%s\n", output->buffer);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment