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
3fc7f32b
"app/vscode:/vscode.git/clone" did not exist on "b74a9dbdf77ba2e2ca0dc38681fd2c5e9dc4b1c0"
Commit
3fc7f32b
authored
Nov 06, 2015
by
Willem Thiart
Browse files
Fix entries not having their term checked
Thanks to @ar104 for the fix!
parent
30e4688b
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/raft_server.c
View file @
3fc7f32b
...
...
@@ -283,9 +283,19 @@ int raft_recv_appendentries(
/* 3. If an existing entry conflicts with a new one (same index
but different terms), delete the existing entry and all that
follow it (§5.3) */
raft_entry_t
*
e2
=
raft_get_entry_from_idx
(
me_
,
ae
->
prev_log_idx
+
1
);
if
(
e2
)
log_delete
(
me
->
log
,
ae
->
prev_log_idx
+
1
);
int
has_mismatch
=
0
,
i
;
for
(
i
=
0
;
i
<
ae
->
n_entries
;
i
++
)
{
msg_entry_t
*
cmd
=
&
ae
->
entries
[
i
];
int
index
=
ae
->
prev_log_idx
+
1
+
i
;
raft_entry_t
*
e2
=
raft_get_entry_from_idx
(
me_
,
index
);
if
(
!
e2
)
break
;
/* reached end of log */
if
(
e2
&&
e2
->
term
!=
cmd
->
term
)
has_mismatch
=
1
;
if
(
has_mismatch
)
log_delete
(
me
->
log
,
index
);
}
/* 4. If leaderCommit > commitIndex, set commitIndex =
min(leaderCommit, index of most recent entry) */
...
...
@@ -304,8 +314,6 @@ int raft_recv_appendentries(
/* update current leader because we accepted appendentries from it */
me
->
current_leader
=
node
;
int
i
;
/* append all entries to log */
for
(
i
=
0
;
i
<
ae
->
n_entries
;
i
++
)
{
...
...
tests/test_server.c
View file @
3fc7f32b
...
...
@@ -711,8 +711,7 @@ TestRaft_follower_recv_appendentries_reply_false_if_doesnt_have_log_at_prev_log_
}
/* 5.3 */
void
TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries
(
void
TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries
(
CuTest
*
tc
)
{
msg_appendentries_t
ae
;
...
...
@@ -747,6 +746,17 @@ TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries
CuAssertTrue
(
tc
,
NULL
!=
(
ety_appended
=
raft_get_entry_from_idx
(
r
,
2
)));
CuAssertTrue
(
tc
,
!
strncmp
(
ety_appended
->
data
.
buf
,
str2
,
3
));
/* this log will be overwritten by the appendentries below */
char
*
str3
=
"333"
;
ety
.
data
.
buf
=
str3
;
ety
.
data
.
len
=
3
;
ety
.
id
=
3
;
ety
.
term
=
1
;
raft_append_entry
(
r
,
&
ety
);
CuAssertTrue
(
tc
,
3
==
raft_get_log_count
(
r
));
CuAssertTrue
(
tc
,
NULL
!=
(
ety_appended
=
raft_get_entry_from_idx
(
r
,
3
)));
CuAssertTrue
(
tc
,
!
strncmp
(
ety_appended
->
data
.
buf
,
str3
,
3
));
/* pass a appendentry that is newer */
msg_entry_t
mety
;
...
...
@@ -756,10 +766,10 @@ TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries
ae
.
prev_log_term
=
1
;
/* include one entry */
memset
(
&
mety
,
0
,
sizeof
(
msg_entry_t
));
char
*
str
3
=
"
333
"
;
mety
.
data
.
buf
=
str
3
;
char
*
str
4
=
"
444
"
;
mety
.
data
.
buf
=
str
4
;
mety
.
data
.
len
=
3
;
mety
.
id
=
3
;
mety
.
id
=
4
;
ae
.
entries
=
&
mety
;
ae
.
n_entries
=
1
;
...
...
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