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
41210d8e
Commit
41210d8e
authored
Nov 10, 2015
by
Willem Thiart
Browse files
Recventry doesn't send appendentries to slow nodes
parent
598edb13
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/raft_server.c
View file @
41210d8e
...
@@ -423,8 +423,15 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e,
...
@@ -423,8 +423,15 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e,
memcpy
(
&
ety
.
data
,
&
e
->
data
,
sizeof
(
raft_entry_data_t
));
memcpy
(
&
ety
.
data
,
&
e
->
data
,
sizeof
(
raft_entry_data_t
));
raft_append_entry
(
me_
,
&
ety
);
raft_append_entry
(
me_
,
&
ety
);
for
(
i
=
0
;
i
<
me
->
num_nodes
;
i
++
)
for
(
i
=
0
;
i
<
me
->
num_nodes
;
i
++
)
if
(
me
->
nodeid
!=
i
)
/* Only send new entries.
raft_send_appendentries
(
me_
,
i
);
* Don't send the entry to peers who are behind, to prevent them from
* becomming congested. */
if
(
me
->
nodeid
!=
i
)
{
int
next_idx
=
raft_node_get_next_idx
(
raft_get_node
(
me_
,
i
));
int
last_log_idx
=
raft_get_current_idx
(
me_
);
if
(
next_idx
==
last_log_idx
)
raft_send_appendentries
(
me_
,
i
);
}
/* if we're the only node, we can consider the entry committed */
/* if we're the only node, we can consider the entry committed */
if
(
1
==
me
->
num_nodes
)
if
(
1
==
me
->
num_nodes
)
...
...
tests/test_server.c
View file @
41210d8e
...
@@ -1814,6 +1814,50 @@ void TestRaft_leader_recv_entry_is_committed_returns_neg_1_if_invalidated(CuTest
...
@@ -1814,6 +1814,50 @@ void TestRaft_leader_recv_entry_is_committed_returns_neg_1_if_invalidated(CuTest
CuAssertTrue
(
tc
,
-
1
==
raft_msg_entry_response_committed
(
r
,
&
cr
));
CuAssertTrue
(
tc
,
-
1
==
raft_msg_entry_response_committed
(
r
,
&
cr
));
}
}
void
TestRaft_leader_recv_entry_does_not_send_new_appendentries_to_slow_nodes
(
CuTest
*
tc
)
{
void
*
r
=
raft_new
();
raft_add_node
(
r
,
(
void
*
)
1
,
1
);
raft_add_node
(
r
,
(
void
*
)
2
,
0
);
raft_cbs_t
funcs
=
{
.
send_appendentries
=
sender_appendentries
,
};
void
*
sender
=
sender_new
(
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
sender
);
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_current_term
(
r
,
1
);
raft_set_commit_idx
(
r
,
0
);
/* make the node slow */
raft_node_set_next_idx
(
raft_get_node
(
r
,
1
),
1
);
/* append entries */
raft_entry_t
ety
;
ety
.
term
=
1
;
ety
.
id
=
1
;
ety
.
data
.
buf
=
"aaaa"
;
ety
.
data
.
len
=
4
;
raft_append_entry
(
r
,
&
ety
);
/* entry message */
msg_entry_t
mety
;
mety
.
id
=
1
;
mety
.
data
.
buf
=
"entry"
;
mety
.
data
.
len
=
strlen
(
"entry"
);
/* receive entry */
msg_entry_response_t
cr
;
raft_recv_entry
(
r
,
1
,
&
mety
,
&
cr
);
/* check if the slow node got sent this appendentries */
msg_appendentries_t
*
ae
;
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
==
ae
);
}
void
TestRaft_leader_recv_appendentries_response_failure_does_not_set_node_nextid_to_0
(
void
TestRaft_leader_recv_appendentries_response_failure_does_not_set_node_nextid_to_0
(
CuTest
*
tc
)
CuTest
*
tc
)
{
{
...
...
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