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
391120db
Unverified
Commit
391120db
authored
Apr 18, 2022
by
Ozan Tezcan
Committed by
GitHub
Apr 18, 2022
Browse files
Refactor (#99)
Refactor
parent
fc503058
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/raft_node.c
View file @
391120db
...
...
@@ -195,7 +195,7 @@ int raft_node_is_voting_committed(raft_node_t* me)
raft_node_id_t
raft_node_get_id
(
raft_node_t
*
me
)
{
return
me
!=
NULL
?
me
->
id
:
-
1
;
return
me
!=
NULL
?
me
->
id
:
RAFT_NODE_ID_NONE
;
}
void
raft_node_set_addition_committed
(
raft_node_t
*
me
,
int
committed
)
...
...
src/raft_server.c
View file @
391120db
...
...
@@ -106,16 +106,16 @@ raft_server_t* raft_new_with_log(const raft_log_impl_t *log_impl, void *log_arg)
return NULL;
me->current_term = 0;
me
->
voted_for
=
-
1
;
me->voted_for =
RAFT_NODE_ID_NONE
;
me->timeout_elapsed = 0;
me->request_timeout = 200;
me->election_timeout = 1000;
me->node_transferring_leader_to = RAFT_NODE_ID_NONE;
me->auto_flush = 1;
raft_update_quorum_meta
(
(
raft_server_t
*
)
me
,
me
->
msg_id
);
raft_update_quorum_meta(me, me->msg_id);
raft_randomize_election_timeout
(
(
raft_server_t
*
)
me
);
raft_randomize_election_timeout(me);
me->log_impl = log_impl;
me->log = me->log_impl->init(me, log_arg);
if (!me->log) {
...
...
@@ -124,13 +124,13 @@ raft_server_t* raft_new_with_log(const raft_log_impl_t *log_impl, void *log_arg)
}
me->voting_cfg_change_log_idx = -1;
raft_set_state
(
(
raft_server_t
*
)
me
,
RAFT_STATE_FOLLOWER
);
raft_set_state(me, RAFT_STATE_FOLLOWER);
me->leader_id = RAFT_NODE_ID_NONE;
me->snapshot_in_progress = 0;
raft_set_snapshot_metadata
(
(
raft_server_t
*
)
me
,
0
,
0
);
raft_set_snapshot_metadata(me, 0, 0);
return
(
raft_server_t
*
)
me
;
return me;
}
raft_server_t* raft_new(void)
...
...
@@ -140,7 +140,7 @@ raft_server_t* raft_new(void)
void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs, void* udata)
{
me
mcpy
(
&
me
->
cb
,
funcs
,
sizeof
(
raft_cbs_t
))
;
me
->cb = *funcs
;
me->udata = udata;
}
...
...
@@ -153,11 +153,11 @@ void raft_destroy(raft_server_t* me)
void raft_clear(raft_server_t* me)
{
me->current_term = 0;
me
->
voted_for
=
-
1
;
me->voted_for =
RAFT_NODE_ID_NONE
;
me->timeout_elapsed = 0;
raft_randomize_election_timeout(me);
me->voting_cfg_change_log_idx = -1;
raft_set_state
(
(
raft_server_t
*
)
me
,
RAFT_STATE_FOLLOWER
);
raft_set_state(me, RAFT_STATE_FOLLOWER);
me->leader_id = RAFT_NODE_ID_NONE;
me->commit_idx = 0;
me->last_applied_idx = 0;
...
...
@@ -618,12 +618,9 @@ int raft_periodic(raft_server_t* me, int msec_since_last_period)
return e;
}
if
(
me
->
last_applied_idx
<
raft_get_commit_idx
(
me
)
&&
raft_is_apply_allowed
(
me
))
{
int
e
=
raft_apply_all
(
me
);
if
(
0
!=
e
)
return
e
;
int e = raft_apply_all(me);
if (e != 0) {
return e;
}
raft_process_read_queue(me);
...
...
@@ -957,9 +954,12 @@ int raft_recv_requestvote(raft_server_t* me,
goto done;
}
if
(
me
->
current_term
==
vr
->
term
&&
(
me
->
voted_for
!=
-
1
&&
me
->
voted_for
!=
vr
->
candidate_id
))
{
goto
done
;
if (me->current_term == vr->term) {
/* If already voted for some other node for this term, return failure */
if (me->voted_for != RAFT_NODE_ID_NONE &&
me->voted_for != vr->candidate_id) {
goto done;
}
}
/* Below we check if log is more up-to-date... */
...
...
@@ -1189,11 +1189,7 @@ int raft_apply_entry(raft_server_t* me)
}
}
/* voting cfg change is now complete.
* TODO: there seem to be a possible off-by-one bug hidden here, requiring
* checking log_idx >= voting_cfg_change_log_idx rather than plain ==.
*/
if
(
log_idx
>=
me
->
voting_cfg_change_log_idx
)
if (log_idx == me->voting_cfg_change_log_idx)
me->voting_cfg_change_log_idx = -1;
if (!raft_entry_is_cfg_change(ety))
...
...
@@ -1550,7 +1546,7 @@ int raft_get_nvotes_for_me(raft_server_t* me)
int raft_vote(raft_server_t* me, raft_node_t* node)
{
return
raft_vote_for_nodeid
(
me
,
node
?
raft_node_get_id
(
node
)
:
-
1
);
return raft_vote_for_nodeid(me, raft_node_get_id(node));
}
int raft_vote_for_nodeid(raft_server_t* me, const raft_node_id_t nodeid)
...
...
@@ -1584,7 +1580,7 @@ int raft_apply_all(raft_server_t* me)
if (!raft_is_apply_allowed(me))
return 0;
while
(
raft_get_last_applied_idx
(
me
)
<
raft_get_commit_idx
(
me
)
)
while (
me->commit_idx > me->last_applied_idx
)
{
int e = raft_apply_entry(me);
if (0 != e)
...
...
@@ -1754,7 +1750,7 @@ int raft_begin_load_snapshot(
me->current_term = last_included_term;
}
raft_set_state
(
(
raft_server_t
*
)
me
,
RAFT_STATE_FOLLOWER
);
raft_set_state(me, RAFT_STATE_FOLLOWER);
me->leader_id = RAFT_NODE_ID_NONE;
me->log_impl->reset(me->log, last_included_index + 1, last_included_term);
...
...
@@ -2132,11 +2128,9 @@ int raft_flush(raft_server_t* me, raft_index_t sync_index)
raft_send_appendentries(me, me->nodes[i]);
}
if
(
me
->
last_applied_idx
<
raft_get_commit_idx
(
me
))
{
e
=
raft_apply_all
(
me
);
if
(
e
!=
0
)
{
return
e
;
}
e = raft_apply_all(me);
if (e != 0) {
return e;
}
out:
...
...
src/raft_server_properties.c
View file @
391120db
...
...
@@ -33,8 +33,6 @@ void raft_set_log_enabled(raft_server_t* me, int enable)
raft_node_id_t
raft_get_nodeid
(
raft_server_t
*
me
)
{
if
(
!
me
->
node
)
return
-
1
;
return
raft_node_get_id
(
me
->
node
);
}
...
...
@@ -81,15 +79,14 @@ int raft_set_current_term(raft_server_t* me, const raft_term_t term)
{
if
(
me
->
current_term
<
term
)
{
int
voted_for
=
-
1
;
if
(
me
->
cb
.
persist_term
)
{
int
e
=
me
->
cb
.
persist_term
(
me
,
me
->
udata
,
term
,
voted_for
);
int
e
=
me
->
cb
.
persist_term
(
me
,
me
->
udata
,
term
,
RAFT_NODE_ID_NONE
);
if
(
0
!=
e
)
return
e
;
}
me
->
current_term
=
term
;
me
->
voted_for
=
voted_for
;
me
->
voted_for
=
RAFT_NODE_ID_NONE
;
}
return
0
;
}
...
...
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