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