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
eee32459
Commit
eee32459
authored
Jan 20, 2016
by
Willem Thiart
Browse files
Add node removal
parent
1c6cb689
Changes
3
Hide whitespace changes
Inline
Side-by-side
include/raft.h
View file @
eee32459
...
...
@@ -350,6 +350,10 @@ raft_node_t* raft_add_node(raft_server_t* me, void* user_data, int id, int is_se
* Parameters are identical to raft_add_node */
raft_node_t
*
raft_add_non_voting_node
(
raft_server_t
*
me_
,
void
*
udata
,
int
id
,
int
is_self
);
/** Remove node.
* @param node The node to be removed. */
void
raft_remove_node
(
raft_server_t
*
me_
,
raft_node_t
*
node
);
/** Set election timeout.
* The amount of time that needs to elapse before we assume the leader is down
* @param[in] msec Election timeout in milliseconds */
...
...
src/raft_server.c
View file @
eee32459
...
...
@@ -692,6 +692,30 @@ raft_node_t* raft_add_non_voting_node(raft_server_t* me_, void* udata, int id, i
return
node
;
}
void
raft_remove_node
(
raft_server_t
*
me_
,
raft_node_t
*
node
)
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_node_t
*
new_array
,
*
new_node
;
new_array
=
(
raft_node_t
*
)
calloc
((
me
->
num_nodes
-
1
),
sizeof
(
raft_node_t
*
));
new_node
=
new_array
;
for
(
int
i
=
0
;
i
<
me
->
num_nodes
;
i
++
)
{
if
(
me
->
nodes
[
i
]
==
node
)
continue
;
*
new_node
=
me
->
nodes
[
i
];
new_node
++
;
}
me
->
num_nodes
--
;
free
(
me
->
nodes
);
me
->
nodes
=
new_array
;
free
(
node
);
}
int
raft_get_nvotes_for_me
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
...
...
tests/test_server.c
View file @
eee32459
...
...
@@ -61,6 +61,19 @@ void TestRaft_server_voting_results_in_voting(CuTest * tc)
CuAssertTrue
(
tc
,
9
==
raft_get_voted_for
(
r
));
}
void
TestRaft_server_remove_node
(
CuTest
*
tc
)
{
void
*
r
=
raft_new
();
void
*
n1
=
raft_add_node
(
r
,
NULL
,
1
,
0
);
void
*
n2
=
raft_add_node
(
r
,
NULL
,
9
,
0
);
raft_remove_node
(
r
,
n1
);
CuAssertTrue
(
tc
,
NULL
==
raft_get_node
(
r
,
1
));
CuAssertTrue
(
tc
,
NULL
!=
raft_get_node
(
r
,
9
));
raft_remove_node
(
r
,
n2
);
CuAssertTrue
(
tc
,
NULL
==
raft_get_node
(
r
,
9
));
}
void
TestRaft_election_start_increments_term
(
CuTest
*
tc
)
{
void
*
r
=
raft_new
();
...
...
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