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
9f2fb73a
Commit
9f2fb73a
authored
Dec 19, 2013
by
willem
Browse files
Passing unit tests
parent
37bbc66b
Changes
5
Hide whitespace changes
Inline
Side-by-side
CuTest.c
View file @
9f2fb73a
...
@@ -121,7 +121,7 @@ CuTest* CuTestNew(const char* name, TestFunction function)
...
@@ -121,7 +121,7 @@ CuTest* CuTestNew(const char* name, TestFunction function)
void
CuTestRun
(
CuTest
*
tc
)
void
CuTestRun
(
CuTest
*
tc
)
{
{
#if
1
/* debugging */
#if
0
/* debugging */
printf(" running %s\n", tc->name);
printf(" running %s\n", tc->name);
#endif
#endif
jmp_buf
buf
;
jmp_buf
buf
;
...
...
raft_log.c
View file @
9f2fb73a
...
@@ -111,6 +111,7 @@ int log_append_entry(log_t* me_, raft_entry_t* c)
...
@@ -111,6 +111,7 @@ int log_append_entry(log_t* me_, raft_entry_t* c)
// return 0;
// return 0;
memcpy
(
&
me
->
entries
[
me
->
back
],
c
,
sizeof
(
raft_entry_t
));
memcpy
(
&
me
->
entries
[
me
->
back
],
c
,
sizeof
(
raft_entry_t
));
me
->
entries
[
me
->
back
].
npeers
=
0
;
me
->
count
++
;
me
->
count
++
;
me
->
back
++
;
me
->
back
++
;
return
1
;
return
1
;
...
@@ -225,5 +226,12 @@ void log_free(log_t * me_)
...
@@ -225,5 +226,12 @@ void log_free(log_t * me_)
void
log_mark_peer_has_committed
(
log_t
*
me_
,
int
idx
)
void
log_mark_peer_has_committed
(
log_t
*
me_
,
int
idx
)
{
{
log_private_t
*
me
=
(
void
*
)
me_
;
raft_entry_t
*
e
;
if
((
e
=
log_get_from_idx
(
me_
,
idx
)))
{
e
->
npeers
+=
1
;
}
}
}
raft_server.c
View file @
9f2fb73a
...
@@ -106,7 +106,7 @@ static void __log(raft_server_t *me_, void *src, const char *fmt, ...)
...
@@ -106,7 +106,7 @@ static void __log(raft_server_t *me_, void *src, const char *fmt, ...)
va_start
(
args
,
fmt
);
va_start
(
args
,
fmt
);
vsprintf
(
buf
,
fmt
,
args
);
vsprintf
(
buf
,
fmt
,
args
);
printf
(
"%s
\n
"
,
buf
);
//
printf("%s\n", buf);
//__FUNC_log(bto,src,buf);
//__FUNC_log(bto,src,buf);
}
}
...
@@ -348,8 +348,8 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
...
@@ -348,8 +348,8 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
case
RAFT_STATE_FOLLOWER
:
case
RAFT_STATE_FOLLOWER
:
if
(
me
->
last_applied_idx
<
me
->
commit_idx
)
if
(
me
->
last_applied_idx
<
me
->
commit_idx
)
{
{
//
if (0 == raft_apply_entry(me_))
if
(
0
==
raft_apply_entry
(
me_
))
//
return 0;
return
0
;
}
}
break
;
break
;
}
}
...
@@ -381,7 +381,7 @@ int raft_recv_appendentries_response(raft_server_t* me_,
...
@@ -381,7 +381,7 @@ int raft_recv_appendentries_response(raft_server_t* me_,
{
{
int
i
;
int
i
;
for
(
i
=
aer
->
first_idx
;
i
<
aer
->
current_idx
;
i
++
)
for
(
i
=
aer
->
first_idx
;
i
<
=
aer
->
current_idx
;
i
++
)
log_mark_peer_has_committed
(
me
->
log
,
i
);
log_mark_peer_has_committed
(
me
->
log
,
i
);
while
(
1
)
while
(
1
)
...
@@ -390,13 +390,9 @@ int raft_recv_appendentries_response(raft_server_t* me_,
...
@@ -390,13 +390,9 @@ int raft_recv_appendentries_response(raft_server_t* me_,
e
=
log_get_from_idx
(
me
->
log
,
me
->
last_applied_idx
+
1
);
e
=
log_get_from_idx
(
me
->
log
,
me
->
last_applied_idx
+
1
);
if
(
e
)
printf
(
"comparing %d to %d
\n
"
,
me
->
npeers
/
2
,
e
->
npeers
);
/* majority has this */
/* majority has this */
if
(
e
&&
me
->
npeers
/
2
<=
e
->
npeers
)
if
(
e
&&
me
->
npeers
/
2
<=
e
->
npeers
)
{
{
printf
(
"applying entry
\n
"
);
if
(
0
==
raft_apply_entry
(
me_
))
break
;
if
(
0
==
raft_apply_entry
(
me_
))
break
;
}
}
else
else
...
@@ -429,10 +425,14 @@ int raft_recv_appendentries(
...
@@ -429,10 +425,14 @@ int raft_recv_appendentries(
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
void
*
)
me_
;
msg_appendentries_response_t
r
;
msg_appendentries_response_t
r
;
r
.
term
=
raft_get_current_term
(
me_
);
r
.
term
=
me
->
current_term
;
/* we've found a leader who is legitimate */
if
(
raft_is_leader
(
me_
)
&&
me
->
current_term
<=
ae
->
term
)
raft_become_follower
(
me_
);
/* 1. Reply false if term < currentTerm (5.1) */
/* 1. Reply false if term < currentTerm (5.1) */
if
(
ae
->
term
<
raft_get_
current_term
(
me_
)
)
if
(
ae
->
term
<
me
->
current_term
)
{
{
__log
(
me_
,
NULL
,
"AE term is less than current term"
);
__log
(
me_
,
NULL
,
"AE term is less than current term"
);
r
.
success
=
0
;
r
.
success
=
0
;
...
@@ -672,7 +672,7 @@ int raft_apply_entry(raft_server_t* me_)
...
@@ -672,7 +672,7 @@ int raft_apply_entry(raft_server_t* me_)
{
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
void
*
)
me_
;
if
(
!
log_get_from_idx
(
me
->
log
,
me
->
commit
_idx
+
1
))
if
(
!
log_get_from_idx
(
me
->
log
,
me
->
last_applied
_idx
+
1
))
return
0
;
return
0
;
me
->
last_applied_idx
++
;
me
->
last_applied_idx
++
;
...
...
test_log.c
View file @
9f2fb73a
...
@@ -59,6 +59,21 @@ void TestLog_get_at_idx_returns_null_where_out_of_bounds(CuTest * tc)
...
@@ -59,6 +59,21 @@ void TestLog_get_at_idx_returns_null_where_out_of_bounds(CuTest * tc)
CuAssertTrue
(
tc
,
NULL
==
log_get_from_idx
(
l
,
2
));
CuAssertTrue
(
tc
,
NULL
==
log_get_from_idx
(
l
,
2
));
}
}
void
TestLog_mark_peer_has_committed_adds_peers
(
CuTest
*
tc
)
{
void
*
l
;
raft_entry_t
e1
,
e2
,
e3
;
l
=
log_new
();
e1
.
id
=
1
;
log_append_entry
(
l
,
&
e1
);
CuAssertTrue
(
tc
,
0
==
log_get_from_idx
(
l
,
1
)
->
npeers
);
log_mark_peer_has_committed
(
l
,
1
);
CuAssertTrue
(
tc
,
1
==
log_get_from_idx
(
l
,
1
)
->
npeers
);
log_mark_peer_has_committed
(
l
,
1
);
CuAssertTrue
(
tc
,
2
==
log_get_from_idx
(
l
,
1
)
->
npeers
);
}
void
TestLog_delete
(
CuTest
*
tc
)
void
TestLog_delete
(
CuTest
*
tc
)
{
{
void
*
l
;
void
*
l
;
...
...
test_server.c
View file @
9f2fb73a
...
@@ -257,7 +257,8 @@ void TestRaft_server_increment_lastApplied_when_lastApplied_lt_commitidx(CuTest*
...
@@ -257,7 +257,8 @@ void TestRaft_server_increment_lastApplied_when_lastApplied_lt_commitidx(CuTest*
r
=
raft_new
();
r
=
raft_new
();
/* must be follower */
/* must be follower */
raft_set_state
(
r
,
RAFT_STATE_FOLLOWER
);
raft_set_state
(
r
,
RAFT_STATE_FOLLOWER
);
raft_set_commit_idx
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
raft_set_commit_idx
(
r
,
1
);
raft_set_last_applied_idx
(
r
,
0
);
raft_set_last_applied_idx
(
r
,
0
);
/* need at least one entry */
/* need at least one entry */
...
@@ -269,6 +270,7 @@ void TestRaft_server_increment_lastApplied_when_lastApplied_lt_commitidx(CuTest*
...
@@ -269,6 +270,7 @@ void TestRaft_server_increment_lastApplied_when_lastApplied_lt_commitidx(CuTest*
/* let time lapse */
/* let time lapse */
raft_periodic
(
r
,
1
);
raft_periodic
(
r
,
1
);
CuAssertTrue
(
tc
,
0
!=
raft_get_last_applied_idx
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_last_applied_idx
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_last_applied_idx
(
r
));
}
}
...
@@ -925,7 +927,6 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_prevLogIdx(CuTest * t
...
@@ -925,7 +927,6 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_prevLogIdx(CuTest * t
CuAssertTrue
(
tc
,
NULL
!=
aer
);
CuAssertTrue
(
tc
,
NULL
!=
aer
);
CuAssertTrue
(
tc
,
1
==
aer
->
success
);
CuAssertTrue
(
tc
,
1
==
aer
->
success
);
/* set to 4 because commitIDX is lower */
/* set to 4 because commitIDX is lower */
printf
(
"%d
\n
"
,
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
4
==
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
4
==
raft_get_commit_idx
(
r
));
}
}
...
@@ -1711,7 +1712,6 @@ void TestRaft_leader_increase_commit_idx_when_majority_have_entry_and_atleast_on
...
@@ -1711,7 +1712,6 @@ void TestRaft_leader_increase_commit_idx_when_majority_have_entry_and_atleast_on
/* I'm the leader */
/* I'm the leader */
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
raft_set_current_idx
(
r
,
0
);
raft_set_commit_idx
(
r
,
0
);
raft_set_commit_idx
(
r
,
0
);
/* the last applied idx will became 1, and then 2 */
/* the last applied idx will became 1, and then 2 */
raft_set_last_applied_idx
(
r
,
0
);
raft_set_last_applied_idx
(
r
,
0
);
...
@@ -1741,8 +1741,8 @@ void TestRaft_leader_increase_commit_idx_when_majority_have_entry_and_atleast_on
...
@@ -1741,8 +1741,8 @@ void TestRaft_leader_increase_commit_idx_when_majority_have_entry_and_atleast_on
raft_recv_appendentries_response
(
r
,
1
,
&
aer
);
raft_recv_appendentries_response
(
r
,
1
,
&
aer
);
raft_recv_appendentries_response
(
r
,
2
,
&
aer
);
raft_recv_appendentries_response
(
r
,
2
,
&
aer
);
/* leader will now have majority followers who have appended this log */
/* leader will now have majority followers who have appended this log */
printf
(
"last applied idx: %d
\n
"
,
raft_get_last_applied
_idx
(
r
));
CuAssertTrue
(
tc
,
0
!=
raft_get_commit
_idx
(
r
));
printf
(
"commit idx: %d
\n
"
,
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
2
!=
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_last_applied_idx
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_last_applied_idx
(
r
));
...
@@ -1759,8 +1759,6 @@ void TestRaft_leader_increase_commit_idx_when_majority_have_entry_and_atleast_on
...
@@ -1759,8 +1759,6 @@ void TestRaft_leader_increase_commit_idx_when_majority_have_entry_and_atleast_on
raft_recv_appendentries_response
(
r
,
1
,
&
aer
);
raft_recv_appendentries_response
(
r
,
1
,
&
aer
);
raft_recv_appendentries_response
(
r
,
2
,
&
aer
);
raft_recv_appendentries_response
(
r
,
2
,
&
aer
);
/* leader will now have majority followers who have appended this log */
/* leader will now have majority followers who have appended this log */
printf
(
"last applied idx: %d
\n
"
,
raft_get_last_applied_idx
(
r
));
printf
(
"commit idx: %d
\n
"
,
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
2
==
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
2
==
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
2
==
raft_get_last_applied_idx
(
r
));
CuAssertTrue
(
tc
,
2
==
raft_get_last_applied_idx
(
r
));
}
}
...
@@ -1782,10 +1780,6 @@ void TestRaft_leader_steps_down_if_received_appendentries_is_newer_than_itself(C
...
@@ -1782,10 +1780,6 @@ void TestRaft_leader_steps_down_if_received_appendentries_is_newer_than_itself(C
msg_appendentries_t
ae
;
msg_appendentries_t
ae
;
memset
(
&
ae
,
0
,
sizeof
(
msg_appendentries_t
));
ae
.
term
=
5
;
ae
.
prev_log_idx
=
6
;
ae
.
prev_log_term
=
5
;
sender
=
sender_new
();
sender
=
sender_new
();
r
=
raft_new
();
r
=
raft_new
();
...
@@ -1795,6 +1789,11 @@ void TestRaft_leader_steps_down_if_received_appendentries_is_newer_than_itself(C
...
@@ -1795,6 +1789,11 @@ void TestRaft_leader_steps_down_if_received_appendentries_is_newer_than_itself(C
raft_set_current_term
(
r
,
5
);
raft_set_current_term
(
r
,
5
);
raft_set_current_idx
(
r
,
5
);
raft_set_current_idx
(
r
,
5
);
raft_set_callbacks
(
r
,
&
funcs
,
sender
);
raft_set_callbacks
(
r
,
&
funcs
,
sender
);
memset
(
&
ae
,
0
,
sizeof
(
msg_appendentries_t
));
ae
.
term
=
5
;
ae
.
prev_log_idx
=
6
;
ae
.
prev_log_term
=
5
;
raft_recv_appendentries
(
r
,
1
,
&
ae
);
raft_recv_appendentries
(
r
,
1
,
&
ae
);
CuAssertTrue
(
tc
,
1
==
raft_is_follower
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_is_follower
(
r
));
...
@@ -1802,7 +1801,6 @@ void TestRaft_leader_steps_down_if_received_appendentries_is_newer_than_itself(C
...
@@ -1802,7 +1801,6 @@ void TestRaft_leader_steps_down_if_received_appendentries_is_newer_than_itself(C
/* TODO: If a server receives a request with a stale term number, it rejects the request. */
/* TODO: If a server receives a request with a stale term number, it rejects the request. */
#if 0
#if 0
void T_estRaft_leader_sends_appendentries_when_receive_entry_msg(CuTest * tc)
void T_estRaft_leader_sends_appendentries_when_receive_entry_msg(CuTest * tc)
#endif
#endif
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