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
Willemt Raft
Commits
2d93191b
Commit
2d93191b
authored
Aug 22, 2015
by
Willem Thiart
Browse files
Removed current_index field from server
parent
475f897b
Changes
6
Hide whitespace changes
Inline
Side-by-side
include/raft_log.h
View file @
2d93191b
...
@@ -43,4 +43,6 @@ void log_mark_node_has_committed(log_t* me_, int idx);
...
@@ -43,4 +43,6 @@ void log_mark_node_has_committed(log_t* me_, int idx);
void
log_delete
(
log_t
*
me_
,
int
idx
);
void
log_delete
(
log_t
*
me_
,
int
idx
);
int
log_get_current_idx
(
log_t
*
me_
);
#endif
/* RAFT_LOG_H_ */
#endif
/* RAFT_LOG_H_ */
include/raft_private.h
View file @
2d93191b
...
@@ -44,9 +44,6 @@ typedef struct {
...
@@ -44,9 +44,6 @@ typedef struct {
/* follower/leader/candidate indicator */
/* follower/leader/candidate indicator */
int
state
;
int
state
;
/* most recently append idx, also indicates size of log */
int
current_idx
;
/* amount of time left till timeout */
/* amount of time left till timeout */
int
timeout_elapsed
;
int
timeout_elapsed
;
...
@@ -83,8 +80,6 @@ void raft_vote(raft_server_t* me, int node);
...
@@ -83,8 +80,6 @@ void raft_vote(raft_server_t* me, int node);
void
raft_set_current_term
(
raft_server_t
*
me
,
int
term
);
void
raft_set_current_term
(
raft_server_t
*
me
,
int
term
);
void
raft_set_current_idx
(
raft_server_t
*
me
,
int
idx
);
/**
/**
* @return 0 on error */
* @return 0 on error */
int
raft_send_requestvote
(
raft_server_t
*
me
,
int
node
);
int
raft_send_requestvote
(
raft_server_t
*
me
,
int
node
);
...
...
src/raft_log.c
View file @
2d93191b
...
@@ -198,3 +198,9 @@ void log_mark_node_has_committed(log_t* me_, int idx)
...
@@ -198,3 +198,9 @@ void log_mark_node_has_committed(log_t* me_, int idx)
if
(
e
)
if
(
e
)
e
->
num_nodes
+=
1
;
e
->
num_nodes
+=
1
;
}
}
int
log_get_current_idx
(
log_t
*
me_
)
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
return
log_count
(
me_
)
+
me
->
base_log_idx
;
}
src/raft_server.c
View file @
2d93191b
...
@@ -44,7 +44,6 @@ raft_server_t* raft_new()
...
@@ -44,7 +44,6 @@ raft_server_t* raft_new()
return
NULL
;
return
NULL
;
me
->
current_term
=
0
;
me
->
current_term
=
0
;
me
->
voted_for
=
-
1
;
me
->
voted_for
=
-
1
;
me
->
current_idx
=
0
;
me
->
timeout_elapsed
=
0
;
me
->
timeout_elapsed
=
0
;
me
->
request_timeout
=
200
;
me
->
request_timeout
=
200
;
me
->
election_timeout
=
1000
;
me
->
election_timeout
=
1000
;
...
@@ -289,10 +288,7 @@ int raft_recv_appendentries(
...
@@ -289,10 +288,7 @@ int raft_recv_appendentries(
follow it (§5.3) */
follow it (§5.3) */
raft_entry_t
*
e2
=
raft_get_entry_from_idx
(
me_
,
ae
->
prev_log_idx
+
1
);
raft_entry_t
*
e2
=
raft_get_entry_from_idx
(
me_
,
ae
->
prev_log_idx
+
1
);
if
(
e2
)
if
(
e2
)
{
log_delete
(
me
->
log
,
ae
->
prev_log_idx
+
1
);
log_delete
(
me
->
log
,
ae
->
prev_log_idx
+
1
);
raft_set_current_idx
(
me_
,
ae
->
prev_log_idx
);
}
/* 4. If leaderCommit > commitIndex, set commitIndex =
/* 4. If leaderCommit > commitIndex, set commitIndex =
min(leaderCommit, last log index) */
min(leaderCommit, last log index) */
...
@@ -350,7 +346,7 @@ static int __should_grant_vote(raft_server_private_t* me, msg_requestvote_t* vr)
...
@@ -350,7 +346,7 @@ static int __should_grant_vote(raft_server_private_t* me, msg_requestvote_t* vr)
return
0
;
return
0
;
/* we have a more up-to-date log */
/* we have a more up-to-date log */
if
(
vr
->
last_log_idx
<
me
->
current_idx
)
if
(
vr
->
last_log_idx
<
raft_get_
current_idx
((
void
*
)
me
)
)
return
0
;
return
0
;
return
1
;
return
1
;
...
@@ -446,7 +442,7 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e,
...
@@ -446,7 +442,7 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e,
raft_send_appendentries
(
me_
,
i
);
raft_send_appendentries
(
me_
,
i
);
r
->
id
=
e
->
id
;
r
->
id
=
e
->
id
;
r
->
idx
=
me
->
current_idx
;
r
->
idx
=
raft_get_
current_idx
(
me_
)
;
r
->
term
=
me
->
current_term
;
r
->
term
=
me
->
current_term
;
return
0
;
return
0
;
}
}
...
@@ -470,13 +466,7 @@ int raft_send_requestvote(raft_server_t* me_, int node)
...
@@ -470,13 +466,7 @@ int raft_send_requestvote(raft_server_t* me_, int node)
int
raft_append_entry
(
raft_server_t
*
me_
,
raft_entry_t
*
c
)
int
raft_append_entry
(
raft_server_t
*
me_
,
raft_entry_t
*
c
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
return
log_append_entry
(
me
->
log
,
c
);
if
(
0
==
log_append_entry
(
me
->
log
,
c
))
{
me
->
current_idx
+=
1
;
return
0
;
}
return
-
1
;
}
}
int
raft_apply_entry
(
raft_server_t
*
me_
)
int
raft_apply_entry
(
raft_server_t
*
me_
)
...
...
src/raft_server_properties.c
View file @
2d93191b
...
@@ -81,15 +81,10 @@ int raft_get_current_term(raft_server_t* me_)
...
@@ -81,15 +81,10 @@ int raft_get_current_term(raft_server_t* me_)
return
((
raft_server_private_t
*
)
me_
)
->
current_term
;
return
((
raft_server_private_t
*
)
me_
)
->
current_term
;
}
}
void
raft_set_current_idx
(
raft_server_t
*
me_
,
int
idx
)
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
current_idx
=
idx
;
}
int
raft_get_current_idx
(
raft_server_t
*
me_
)
int
raft_get_current_idx
(
raft_server_t
*
me_
)
{
{
return
((
raft_server_private_t
*
)
me_
)
->
current_idx
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
return
log_get_current_idx
(
me
->
log
);
}
}
int
raft_get_my_id
(
raft_server_t
*
me_
)
int
raft_get_my_id
(
raft_server_t
*
me_
)
...
...
tests/test_server.c
View file @
2d93191b
...
@@ -864,7 +864,14 @@ void TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log(
...
@@ -864,7 +864,14 @@ void TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log(
/* server's term and idx are more up-to-date */
/* server's term and idx are more up-to-date */
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
raft_set_current_idx
(
r
,
2
);
raft_entry_t
ety
;
ety
.
term
=
1
;
ety
.
id
=
100
;
ety
.
data
.
len
=
4
;
ety
.
data
.
buf
=
(
unsigned
char
*
)
"aaa"
;
raft_append_entry
(
r
,
&
ety
);
ety
.
id
=
101
;
raft_append_entry
(
r
,
&
ety
);
/* vote not granted */
/* vote not granted */
raft_recv_requestvote
(
r
,
1
,
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
1
,
&
rv
,
&
rvr
);
...
@@ -947,7 +954,6 @@ void TestRaft_follower_becoming_candidate_requests_votes_from_other_servers(
...
@@ -947,7 +954,6 @@ void TestRaft_follower_becoming_candidate_requests_votes_from_other_servers(
/* set term so we can check it gets included in the outbound message */
/* set term so we can check it gets included in the outbound message */
raft_set_current_term
(
r
,
2
);
raft_set_current_term
(
r
,
2
);
raft_set_current_idx
(
r
,
5
);
/* becoming candidate triggers vote requests */
/* becoming candidate triggers vote requests */
raft_become_candidate
(
r
);
raft_become_candidate
(
r
);
...
@@ -1059,7 +1065,17 @@ void TestRaft_candidate_requestvote_includes_logidx(CuTest * tc)
...
@@ -1059,7 +1065,17 @@ void TestRaft_candidate_requestvote_includes_logidx(CuTest * tc)
raft_set_callbacks
(
r
,
&
funcs
,
sender
);
raft_set_callbacks
(
r
,
&
funcs
,
sender
);
raft_set_current_term
(
r
,
5
);
raft_set_current_term
(
r
,
5
);
raft_set_current_idx
(
r
,
3
);
/* 3 entries */
raft_entry_t
ety
;
ety
.
term
=
1
;
ety
.
id
=
100
;
ety
.
data
.
len
=
4
;
ety
.
data
.
buf
=
(
unsigned
char
*
)
"aaa"
;
raft_append_entry
(
r
,
&
ety
);
ety
.
id
=
101
;
raft_append_entry
(
r
,
&
ety
);
ety
.
id
=
102
;
raft_append_entry
(
r
,
&
ety
);
raft_send_requestvote
(
r
,
1
);
raft_send_requestvote
(
r
,
1
);
msg_requestvote_t
*
rv
=
sender_poll_msg_data
(
sender
);
msg_requestvote_t
*
rv
=
sender_poll_msg_data
(
sender
);
...
@@ -1108,7 +1124,6 @@ TestRaft_candidate_recv_appendentries_frm_invalid_leader_doesnt_result_in_follow
...
@@ -1108,7 +1124,6 @@ TestRaft_candidate_recv_appendentries_frm_invalid_leader_doesnt_result_in_follow
/* server's log is newer */
/* server's log is newer */
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
raft_set_current_idx
(
r
,
2
);
/* is a candidate */
/* is a candidate */
raft_set_state
(
r
,
RAFT_STATE_CANDIDATE
);
raft_set_state
(
r
,
RAFT_STATE_CANDIDATE
);
...
@@ -1687,22 +1702,15 @@ void TestRaft_leader_recv_appendentries_response_increment_idx_of_peer(
...
@@ -1687,22 +1702,15 @@ void TestRaft_leader_recv_appendentries_response_increment_idx_of_peer(
void
TestRaft_leader_recv_appendentries_steps_down_if_newer
(
void
TestRaft_leader_recv_appendentries_steps_down_if_newer
(
CuTest
*
tc
)
CuTest
*
tc
)
{
{
raft_cbs_t
funcs
=
{
.
log
=
NULL
};
msg_appendentries_t
ae
;
msg_appendentries_t
ae
;
msg_appendentries_response_t
aer
;
msg_appendentries_response_t
aer
;
void
*
sender
=
sender_new
(
NULL
);
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_add_peer
(
r
,
(
void
*
)
1
,
1
);
raft_add_peer
(
r
,
(
void
*
)
1
,
1
);
raft_add_peer
(
r
,
(
void
*
)
2
,
0
);
raft_add_peer
(
r
,
(
void
*
)
2
,
0
);
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_current_term
(
r
,
5
);
raft_set_current_term
(
r
,
5
);
raft_set_current_idx
(
r
,
5
);
raft_set_callbacks
(
r
,
&
funcs
,
sender
);
/* check that node 0 considers itself the leader */
/* check that node 0 considers itself the leader */
CuAssertTrue
(
tc
,
1
==
raft_is_leader
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_is_leader
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_current_leader
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_current_leader
(
r
));
...
@@ -1731,7 +1739,6 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer_term(
...
@@ -1731,7 +1739,6 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer_term(
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_current_term
(
r
,
5
);
raft_set_current_term
(
r
,
5
);
raft_set_current_idx
(
r
,
5
);
memset
(
&
ae
,
0
,
sizeof
(
msg_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
msg_appendentries_t
));
ae
.
term
=
6
;
ae
.
term
=
6
;
...
...
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