Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
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
Show 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)
...
@@ -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
)
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
)
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)
...
@@ -106,16 +106,16 @@ raft_server_t* raft_new_with_log(const raft_log_impl_t *log_impl, void *log_arg)
return
NULL
;
return
NULL
;
me
->
current_term
=
0
;
me
->
current_term
=
0
;
me
->
voted_for
=
-
1
;
me
->
voted_for
=
RAFT_NODE_ID_NONE
;
me
->
timeout_elapsed
=
0
;
me
->
timeout_elapsed
=
0
;
me
->
request_timeout
=
200
;
me
->
request_timeout
=
200
;
me
->
election_timeout
=
1000
;
me
->
election_timeout
=
1000
;
me
->
node_transferring_leader_to
=
RAFT_NODE_ID_NONE
;
me
->
node_transferring_leader_to
=
RAFT_NODE_ID_NONE
;
me
->
auto_flush
=
1
;
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_impl
=
log_impl
;
me
->
log
=
me
->
log_impl
->
init
(
me
,
log_arg
);
me
->
log
=
me
->
log_impl
->
init
(
me
,
log_arg
);
if
(
!
me
->
log
)
{
if
(
!
me
->
log
)
{
...
@@ -124,13 +124,13 @@ raft_server_t* raft_new_with_log(const raft_log_impl_t *log_impl, void *log_arg)
...
@@ -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
;
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
->
leader_id
=
RAFT_NODE_ID_NONE
;
me
->
snapshot_in_progress
=
0
;
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
)
raft_server_t
*
raft_new
(
void
)
...
@@ -140,7 +140,7 @@ 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
)
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
;
me
->
udata
=
udata
;
}
}
...
@@ -153,11 +153,11 @@ void raft_destroy(raft_server_t* me)
...
@@ -153,11 +153,11 @@ void raft_destroy(raft_server_t* me)
void
raft_clear
(
raft_server_t
*
me
)
void
raft_clear
(
raft_server_t
*
me
)
{
{
me
->
current_term
=
0
;
me
->
current_term
=
0
;
me
->
voted_for
=
-
1
;
me
->
voted_for
=
RAFT_NODE_ID_NONE
;
me
->
timeout_elapsed
=
0
;
me
->
timeout_elapsed
=
0
;
raft_randomize_election_timeout
(
me
);
raft_randomize_election_timeout
(
me
);
me
->
voting_cfg_change_log_idx
=
-
1
;
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
->
leader_id
=
RAFT_NODE_ID_NONE
;
me
->
commit_idx
=
0
;
me
->
commit_idx
=
0
;
me
->
last_applied_idx
=
0
;
me
->
last_applied_idx
=
0
;
...
@@ -618,11 +618,8 @@ int raft_periodic(raft_server_t* me, int msec_since_last_period)
...
@@ -618,11 +618,8 @@ int raft_periodic(raft_server_t* me, int msec_since_last_period)
return
e
;
return
e
;
}
}
if
(
me
->
last_applied_idx
<
raft_get_commit_idx
(
me
)
&&
raft_is_apply_allowed
(
me
))
{
int
e
=
raft_apply_all
(
me
);
int
e
=
raft_apply_all
(
me
);
if
(
0
!=
e
)
if
(
e
!=
0
)
{
return
e
;
return
e
;
}
}
...
@@ -957,10 +954,13 @@ int raft_recv_requestvote(raft_server_t* me,
...
@@ -957,10 +954,13 @@ int raft_recv_requestvote(raft_server_t* me,
goto
done
;
goto
done
;
}
}
if
(
me
->
current_term
==
vr
->
term
&&
if
(
me
->
current_term
==
vr
->
term
)
{
(
me
->
voted_for
!=
-
1
&&
me
->
voted_for
!=
vr
->
candidate_id
))
{
/* 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
;
goto
done
;
}
}
}
/* Below we check if log is more up-to-date... */
/* Below we check if log is more up-to-date... */
raft_index_t
current_idx
=
raft_get_current_idx
(
me
);
raft_index_t
current_idx
=
raft_get_current_idx
(
me
);
...
@@ -1189,11 +1189,7 @@ int raft_apply_entry(raft_server_t* me)
...
@@ -1189,11 +1189,7 @@ int raft_apply_entry(raft_server_t* me)
}
}
}
}
/* voting cfg change is now complete.
if
(
log_idx
==
me
->
voting_cfg_change_log_idx
)
* 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
)
me
->
voting_cfg_change_log_idx
=
-
1
;
me
->
voting_cfg_change_log_idx
=
-
1
;
if
(
!
raft_entry_is_cfg_change
(
ety
))
if
(
!
raft_entry_is_cfg_change
(
ety
))
...
@@ -1550,7 +1546,7 @@ int raft_get_nvotes_for_me(raft_server_t* me)
...
@@ -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
)
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
)
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)
...
@@ -1584,7 +1580,7 @@ int raft_apply_all(raft_server_t* me)
if
(
!
raft_is_apply_allowed
(
me
))
if
(
!
raft_is_apply_allowed
(
me
))
return
0
;
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
);
int
e
=
raft_apply_entry
(
me
);
if
(
0
!=
e
)
if
(
0
!=
e
)
...
@@ -1754,7 +1750,7 @@ int raft_begin_load_snapshot(
...
@@ -1754,7 +1750,7 @@ int raft_begin_load_snapshot(
me
->
current_term
=
last_included_term
;
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
->
leader_id
=
RAFT_NODE_ID_NONE
;
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
);
...
@@ -2132,12 +2128,10 @@ int raft_flush(raft_server_t* me, raft_index_t sync_index)
...
@@ -2132,12 +2128,10 @@ int raft_flush(raft_server_t* me, raft_index_t sync_index)
raft_send_appendentries
(
me
,
me
->
nodes
[
i
]);
raft_send_appendentries
(
me
,
me
->
nodes
[
i
]);
}
}
if
(
me
->
last_applied_idx
<
raft_get_commit_idx
(
me
))
{
e
=
raft_apply_all
(
me
);
e
=
raft_apply_all
(
me
);
if
(
e
!=
0
)
{
if
(
e
!=
0
)
{
return
e
;
return
e
;
}
}
}
out:
out:
raft_process_read_queue
(
me
);
raft_process_read_queue
(
me
);
...
...
src/raft_server_properties.c
View file @
391120db
...
@@ -33,8 +33,6 @@ void raft_set_log_enabled(raft_server_t* me, int enable)
...
@@ -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
)
raft_node_id_t
raft_get_nodeid
(
raft_server_t
*
me
)
{
{
if
(
!
me
->
node
)
return
-
1
;
return
raft_node_get_id
(
me
->
node
);
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)
...
@@ -81,15 +79,14 @@ int raft_set_current_term(raft_server_t* me, const raft_term_t term)
{
{
if
(
me
->
current_term
<
term
)
if
(
me
->
current_term
<
term
)
{
{
int
voted_for
=
-
1
;
if
(
me
->
cb
.
persist_term
)
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
)
if
(
0
!=
e
)
return
e
;
return
e
;
}
}
me
->
current_term
=
term
;
me
->
current_term
=
term
;
me
->
voted_for
=
voted_for
;
me
->
voted_for
=
RAFT_NODE_ID_NONE
;
}
}
return
0
;
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