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
e5d1ceb1
Unverified
Commit
e5d1ceb1
authored
Aug 23, 2022
by
Ozan Tezcan
Committed by
GitHub
Aug 23, 2022
Browse files
Do not use API functions to access variables (#123)
parent
87c205e0
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/raft_server.c
View file @
e5d1ceb1
...
...
@@ -215,8 +215,10 @@ raft_node_t* raft_add_node_internal(raft_server_t* me, raft_entry_t *ety, void*
node
=
me
->
nodes
[
me
->
num_nodes
-
1
];
if
(
me
->
cb
.
notify_membership_event
)
me
->
cb
.
notify_membership_event
(
me
,
raft_get_udata
(
me
),
node
,
ety
,
RAFT_MEMBERSHIP_ADD
);
if
(
me
->
cb
.
notify_membership_event
)
{
me
->
cb
.
notify_membership_event
(
me
,
me
->
udata
,
node
,
ety
,
RAFT_MEMBERSHIP_ADD
);
}
return
node
;
}
...
...
@@ -246,8 +248,10 @@ raft_node_t* raft_add_non_voting_node(raft_server_t* me, void* udata, raft_node_
void
raft_remove_node
(
raft_server_t
*
me
,
raft_node_t
*
node
)
{
if
(
me
->
cb
.
notify_membership_event
)
me
->
cb
.
notify_membership_event
(
me
,
raft_get_udata
(
me
),
node
,
NULL
,
RAFT_MEMBERSHIP_REMOVE
);
if
(
me
->
cb
.
notify_membership_event
)
{
me
->
cb
.
notify_membership_event
(
me
,
me
->
udata
,
node
,
NULL
,
RAFT_MEMBERSHIP_REMOVE
);
}
assert
(
node
);
...
...
@@ -282,8 +286,7 @@ void raft_handle_append_cfg_change(raft_server_t* me, raft_entry_t* ety, raft_in
if
(
!
me
->
cb
.
get_node_id
)
return
;
void
*
udata
=
raft_get_udata
(
me
);
raft_node_id_t
node_id
=
me
->
cb
.
get_node_id
(
me
,
udata
,
ety
,
idx
);
raft_node_id_t
node_id
=
me
->
cb
.
get_node_id
(
me
,
me
->
udata
,
ety
,
idx
);
raft_node_t
*
node
=
raft_get_node
(
me
,
node_id
);
int
is_self
=
node_id
==
raft_get_nodeid
(
me
);
...
...
@@ -329,8 +332,7 @@ void raft_handle_remove_cfg_change(raft_server_t* me, raft_entry_t* ety, const r
if
(
!
me
->
cb
.
get_node_id
)
return
;
void
*
udata
=
raft_get_udata
(
me
);
raft_node_id_t
node_id
=
me
->
cb
.
get_node_id
(
me
,
udata
,
ety
,
idx
);
raft_node_id_t
node_id
=
me
->
cb
.
get_node_id
(
me
,
me
->
udata
,
ety
,
idx
);
raft_node_t
*
node
=
raft_get_node
(
me
,
node_id
);
switch
(
ety
->
type
)
...
...
@@ -356,7 +358,7 @@ void raft_handle_remove_cfg_change(raft_server_t* me, raft_entry_t* ety, const r
int
raft_delete_entry_from_idx
(
raft_server_t
*
me
,
raft_index_t
idx
)
{
assert
(
raft_get_
commit_idx
(
me
)
<
idx
);
assert
(
me
->
commit_idx
<
idx
);
if
(
idx
<=
me
->
voting_cfg_change_log_idx
)
me
->
voting_cfg_change_log_idx
=
-
1
;
...
...
@@ -403,7 +405,7 @@ int raft_become_leader(raft_server_t* me)
raft_log
(
me
,
"becoming leader term: %ld"
,
me
->
current_term
);
raft_entry_t
*
noop
=
raft_entry_new
(
0
);
noop
->
term
=
raft_get_
current_term
(
me
)
;
noop
->
term
=
me
->
current_term
;
noop
->
type
=
RAFT_LOGTYPE_NO_OP
;
int
e
=
raft_append_entry
(
me
,
noop
);
...
...
@@ -483,10 +485,12 @@ int raft_become_candidate(raft_server_t* me)
int
i
;
raft_log
(
me
,
"becoming candidate"
);
if
(
me
->
cb
.
notify_state_event
)
me
->
cb
.
notify_state_event
(
me
,
raft_get_udata
(
me
),
RAFT_STATE_CANDIDATE
);
int
e
=
raft_set_current_term
(
me
,
raft_get_current_term
(
me
)
+
1
);
if
(
me
->
cb
.
notify_state_event
)
{
me
->
cb
.
notify_state_event
(
me
,
me
->
udata
,
RAFT_STATE_CANDIDATE
);
}
int
e
=
raft_set_current_term
(
me
,
me
->
current_term
+
1
);
if
(
0
!=
e
)
return
e
;
for
(
i
=
0
;
i
<
me
->
num_nodes
;
i
++
)
...
...
@@ -513,8 +517,10 @@ int raft_become_candidate(raft_server_t* me)
void
raft_become_follower
(
raft_server_t
*
me
)
{
raft_log
(
me
,
"becoming follower"
);
if
(
me
->
cb
.
notify_state_event
)
me
->
cb
.
notify_state_event
(
me
,
raft_get_udata
(
me
),
RAFT_STATE_FOLLOWER
);
if
(
me
->
cb
.
notify_state_event
)
{
me
->
cb
.
notify_state_event
(
me
,
me
->
udata
,
RAFT_STATE_FOLLOWER
);
}
raft_set_state
(
me
,
RAFT_STATE_FOLLOWER
);
raft_randomize_election_timeout
(
me
);
...
...
@@ -594,7 +600,7 @@ int raft_periodic_internal(raft_server_t *me,
/* Only one voting node means it's safe for us to become the leader */
if
(
raft_is_single_node_voting_cluster
(
me
)
&&
!
raft_is_leader
(
me
))
{
// need to update term on new leadership
int
e
=
raft_set_current_term
(
me
,
raft_get_
current_term
(
me
)
+
1
);
int
e
=
raft_set_current_term
(
me
,
me
->
current_term
+
1
);
if
(
e
!=
0
)
{
return
e
;
}
...
...
@@ -852,8 +858,8 @@ int raft_recv_appendentries(raft_server_t* me,
{
raft_log_node
(
me
,
ae
->
leader_id
,
"AE term doesn't match prev_term (ie. %ld vs %ld) ci:%ld comi:%ld lcomi:%ld pli:%ld"
,
ety
->
term
,
ae
->
prev_log_term
,
raft_get_current_idx
(
me
),
raft_get_
commit_idx
(
me
)
,
ae
->
leader_commit
,
ae
->
prev_log_idx
);
if
(
ae
->
prev_log_idx
<=
raft_get_
commit_idx
(
me
)
)
me
->
commit_idx
,
ae
->
leader_commit
,
ae
->
prev_log_idx
);
if
(
ae
->
prev_log_idx
<=
me
->
commit_idx
)
{
/* Should never happen; something is seriously wrong! */
raft_log_node
(
me
,
ae
->
leader_id
,
...
...
@@ -899,11 +905,11 @@ int raft_recv_appendentries(raft_server_t* me,
if
(
existing_ety
&&
existing_term
!=
ety
->
term
)
{
if
(
ety_index
<=
raft_get_
commit_idx
(
me
)
)
if
(
ety_index
<=
me
->
commit_idx
)
{
/* Should never happen; something is seriously wrong! */
raft_log_node
(
me
,
ae
->
leader_id
,
"AE entry conflicts with committed entry ci:%ld comi:%ld lcomi:%ld pli:%ld"
,
raft_get_current_idx
(
me
),
raft_get_
commit_idx
(
me
)
,
raft_get_current_idx
(
me
),
me
->
commit_idx
,
ae
->
leader_commit
,
ae
->
prev_log_idx
);
e
=
RAFT_ERR_SHUTDOWN
;
goto
out
;
...
...
@@ -935,7 +941,7 @@ int raft_recv_appendentries(raft_server_t* me,
/* 4. If leaderCommit > commitIndex, set commitIndex =
min(leaderCommit, index of most recent entry) */
if
(
raft_get_
commit_idx
(
me
)
<
ae
->
leader_commit
)
if
(
me
->
commit_idx
<
ae
->
leader_commit
)
{
raft_index_t
last_log_idx
=
max
(
raft_get_current_idx
(
me
),
1
);
raft_set_commit_idx
(
me
,
min
(
last_log_idx
,
ae
->
leader_commit
));
...
...
@@ -975,7 +981,7 @@ int raft_recv_requestvote(raft_server_t* me,
}
/* Update the term only if this is not a prevote request */
if
(
!
vr
->
prevote
&&
raft_get_
current_term
(
me
)
<
vr
->
term
)
if
(
!
vr
->
prevote
&&
me
->
current_term
<
vr
->
term
)
{
e
=
raft_set_current_term
(
me
,
vr
->
term
);
if
(
0
!=
e
)
{
...
...
@@ -1030,7 +1036,7 @@ done:
r
->
vote_granted
==
1
?
"granted"
:
r
->
vote_granted
==
0
?
"not granted"
:
"unknown"
);
r
->
term
=
raft_get_
current_term
(
me
)
;
r
->
term
=
me
->
current_term
;
return
e
;
}
...
...
@@ -1200,7 +1206,7 @@ int raft_apply_entry(raft_server_t* me)
return
-
1
;
/* Don't apply after the commit_idx */
if
(
me
->
last_applied_idx
==
raft_get_
commit_idx
(
me
)
)
if
(
me
->
last_applied_idx
==
me
->
commit_idx
)
return
-
1
;
raft_index_t
idx
=
me
->
last_applied_idx
+
1
;
...
...
@@ -1365,7 +1371,7 @@ int raft_recv_snapshot(raft_server_t* me,
raft_log_node
(
me
,
raft_node_get_id
(
node
),
"recv snapshot: ci:%lu comi:%lu t:%lu li:%d mi:%lu si:%lu st:%lu o:%llu, lc:%d, len:%llu"
,
raft_get_current_idx
(
me
),
raft_get_
commit_idx
(
me
)
,
me
->
commit_idx
,
req
->
term
,
req
->
leader_id
,
req
->
msg_id
,
...
...
@@ -1456,7 +1462,7 @@ int raft_recv_snapshot_response(raft_server_t* me,
raft_log_node
(
me
,
raft_node_get_id
(
node
),
"recv snapshot response: ci:%lu comi:%lu mi:%lu t:%ld o:%llu s:%d lc:%d"
,
raft_get_current_idx
(
me
),
raft_get_
commit_idx
(
me
)
,
me
->
commit_idx
,
r
->
msg_id
,
r
->
term
,
r
->
offset
,
...
...
@@ -1548,7 +1554,7 @@ int raft_send_appendentries(raft_server_t* me, raft_node_t* node)
raft_appendentries_req_t
ae
=
{
.
term
=
me
->
current_term
,
.
leader_id
=
raft_get_nodeid
(
me
),
.
leader_commit
=
raft_get_
commit_idx
(
me
)
,
.
leader_commit
=
me
->
commit_idx
,
.
msg_id
=
++
me
->
msg_id
,
.
prev_log_idx
=
next_idx
-
1
,
.
prev_log_term
=
raft_get_previous_log_term
(
me
,
next_idx
),
...
...
@@ -1650,7 +1656,7 @@ int raft_msg_entry_response_committed(raft_server_t* me,
/* entry from another leader has invalidated this entry message */
if
(
r
->
term
!=
ety_term
)
return
-
1
;
return
r
->
idx
<=
raft_get_
commit_idx
(
me
)
;
return
r
->
idx
<=
me
->
commit_idx
;
}
int
raft_apply_all
(
raft_server_t
*
me
)
...
...
@@ -1714,7 +1720,7 @@ raft_index_t raft_get_num_snapshottable_logs(raft_server_t *me)
{
if
(
raft_get_log_count
(
me
)
<=
1
)
return
0
;
return
raft_get_
commit_idx
(
me
)
-
me
->
log_impl
->
first_idx
(
me
->
log
)
+
1
;
return
me
->
commit_idx
-
me
->
log_impl
->
first_idx
(
me
->
log
)
+
1
;
}
int
raft_restore_snapshot
(
raft_server_t
*
me
,
...
...
@@ -1803,7 +1809,7 @@ int raft_end_snapshot(raft_server_t *me)
raft_log
(
me
,
"end snapshot base:%ld commit-index:%ld current-index:%ld"
,
me
->
log_impl
->
first_idx
(
me
->
log
)
-
1
,
raft_get_
commit_idx
(
me
)
,
me
->
commit_idx
,
raft_get_current_idx
(
me
));
if
(
!
raft_is_leader
(
me
))
...
...
@@ -2050,7 +2056,7 @@ int raft_transfer_leader(raft_server_t* me, raft_node_id_t node_id, long timeout
raft_index_t
max
=
0
;
for
(
int
i
=
0
;
i
<
raft_get_num_nodes
(
me
);
i
++
)
{
raft_node_t
*
node
=
raft_get_node_from_idx
(
me
,
i
)
;
raft_node_t
*
node
=
me
->
nodes
[
i
]
;
raft_index_t
match
=
raft_node_get_match_idx
(
node
);
if
(
node
!=
me
->
node
&&
match
>
max
)
{
...
...
src/raft_server_properties.c
View file @
e5d1ceb1
...
...
@@ -171,22 +171,22 @@ void* raft_get_udata(raft_server_t* me)
int
raft_is_follower
(
raft_server_t
*
me
)
{
return
raft_get_
state
(
me
)
==
RAFT_STATE_FOLLOWER
;
return
me
->
state
==
RAFT_STATE_FOLLOWER
;
}
int
raft_is_leader
(
raft_server_t
*
me
)
{
return
raft_get_
state
(
me
)
==
RAFT_STATE_LEADER
;
return
me
->
state
==
RAFT_STATE_LEADER
;
}
int
raft_is_precandidate
(
raft_server_t
*
me
)
{
return
raft_get_
state
(
me
)
==
RAFT_STATE_PRECANDIDATE
;
return
me
->
state
==
RAFT_STATE_PRECANDIDATE
;
}
int
raft_is_candidate
(
raft_server_t
*
me
)
{
return
raft_get_
state
(
me
)
==
RAFT_STATE_CANDIDATE
;
return
me
->
state
==
RAFT_STATE_CANDIDATE
;
}
raft_term_t
raft_get_last_log_term
(
raft_server_t
*
me
)
...
...
@@ -199,8 +199,8 @@ raft_term_t raft_get_last_log_term(raft_server_t* me)
raft_term_t
term
=
ety
->
term
;
raft_entry_release
(
ety
);
return
term
;
}
else
if
(
raft_get_
snapshot_last_idx
(
me
)
==
current_idx
)
{
return
raft_get_
snapshot_last_term
(
me
)
;
}
else
if
(
me
->
snapshot_last_idx
==
current_idx
)
{
return
me
->
snapshot_last_term
;
}
}
...
...
@@ -215,14 +215,15 @@ int raft_snapshot_is_in_progress(raft_server_t *me)
int
raft_is_apply_allowed
(
raft_server_t
*
me
)
{
return
!
me
->
disable_apply
&&
(
!
raft_
snapshot_
is_
in_progress
(
me
)
||
me
->
nonblocking_apply
);
(
!
me
->
snapshot_in_progress
||
me
->
nonblocking_apply
);
}
raft_entry_t
*
raft_get_last_applied_entry
(
raft_server_t
*
me
)
{
if
(
raft_get_
last_applied_idx
(
me
)
==
0
)
if
(
me
->
last_applied_idx
==
0
)
{
return
NULL
;
return
me
->
log_impl
->
get
(
me
->
log
,
raft_get_last_applied_idx
(
me
));
}
return
me
->
log_impl
->
get
(
me
->
log
,
me
->
last_applied_idx
);
}
raft_index_t
raft_get_snapshot_last_idx
(
raft_server_t
*
me
)
...
...
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