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
Willemt Raft
Commits
9f2fb73a
Commit
9f2fb73a
authored
Dec 19, 2013
by
willem
Browse files
Passing unit tests
parent
37bbc66b
Changes
5
Show whitespace changes
Inline
Side-by-side
CuTest.c
View file @
9f2fb73a
...
...
@@ -121,7 +121,7 @@ CuTest* CuTestNew(const char* name, TestFunction function)
void
CuTestRun
(
CuTest
*
tc
)
{
#if
1
/* debugging */
#if
0
/* debugging */
printf(" running %s\n", tc->name);
#endif
jmp_buf
buf
;
...
...
raft_log.c
View file @
9f2fb73a
...
...
@@ -111,6 +111,7 @@ int log_append_entry(log_t* me_, raft_entry_t* c)
// return 0;
memcpy
(
&
me
->
entries
[
me
->
back
],
c
,
sizeof
(
raft_entry_t
));
me
->
entries
[
me
->
back
].
npeers
=
0
;
me
->
count
++
;
me
->
back
++
;
return
1
;
...
...
@@ -225,5 +226,12 @@ void log_free(log_t * me_)
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, ...)
va_start
(
args
,
fmt
);
vsprintf
(
buf
,
fmt
,
args
);
printf
(
"%s
\n
"
,
buf
);
//
printf("%s\n", buf);
//__FUNC_log(bto,src,buf);
}
...
...
@@ -348,8 +348,8 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
case
RAFT_STATE_FOLLOWER
:
if
(
me
->
last_applied_idx
<
me
->
commit_idx
)
{
//
if (0 == raft_apply_entry(me_))
//
return 0;
if
(
0
==
raft_apply_entry
(
me_
))
return
0
;
}
break
;
}
...
...
@@ -381,7 +381,7 @@ int raft_recv_appendentries_response(raft_server_t* me_,
{
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
);
while
(
1
)
...
...
@@ -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
);
if
(
e
)
printf
(
"comparing %d to %d
\n
"
,
me
->
npeers
/
2
,
e
->
npeers
);
/* majority has this */
if
(
e
&&
me
->
npeers
/
2
<=
e
->
npeers
)
{
printf
(
"applying entry
\n
"
);
if
(
0
==
raft_apply_entry
(
me_
))
break
;
}
else
...
...
@@ -429,10 +425,14 @@ int raft_recv_appendentries(
raft_server_private_t
*
me
=
(
void
*
)
me_
;
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) */
if
(
ae
->
term
<
raft_get_
current_term
(
me_
)
)
if
(
ae
->
term
<
me
->
current_term
)
{
__log
(
me_
,
NULL
,
"AE term is less than current term"
);
r
.
success
=
0
;
...
...
@@ -672,7 +672,7 @@ int raft_apply_entry(raft_server_t* 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
;
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)
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
*
l
;
...
...
test_server.c
View file @
9f2fb73a
...
...
@@ -257,7 +257,8 @@ void TestRaft_server_increment_lastApplied_when_lastApplied_lt_commitidx(CuTest*
r
=
raft_new
();
/* must be 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
);
/* need at least one entry */
...
...
@@ -269,6 +270,7 @@ void TestRaft_server_increment_lastApplied_when_lastApplied_lt_commitidx(CuTest*
/* let time lapse */
raft_periodic
(
r
,
1
);
CuAssertTrue
(
tc
,
0
!=
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
CuAssertTrue
(
tc
,
NULL
!=
aer
);
CuAssertTrue
(
tc
,
1
==
aer
->
success
);
/* set to 4 because commitIDX is lower */
printf
(
"%d
\n
"
,
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
/* I'm the leader */
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_current_term
(
r
,
1
);
raft_set_current_idx
(
r
,
0
);
raft_set_commit_idx
(
r
,
0
);
/* the last applied idx will became 1, and then 2 */
raft_set_last_applied_idx
(
r
,
0
);
...
...
@@ -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
,
2
,
&
aer
);
/* 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
,
0
!=
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_last_applied_idx
(
r
));
...
...
@@ -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
,
2
,
&
aer
);
/* 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_last_applied_idx
(
r
));
}
...
...
@@ -1782,10 +1780,6 @@ void TestRaft_leader_steps_down_if_received_appendentries_is_newer_than_itself(C
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
();
r
=
raft_new
();
...
...
@@ -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_idx
(
r
,
5
);
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
);
CuAssertTrue
(
tc
,
1
==
raft_is_follower
(
r
));
...
...
@@ -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. */
#if 0
void T_estRaft_leader_sends_appendentries_when_receive_entry_msg(CuTest * tc)
#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