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
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
...
@@ -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 */
* 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
);
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.
/** Set election timeout.
* The amount of time that needs to elapse before we assume the leader is down
* The amount of time that needs to elapse before we assume the leader is down
* @param[in] msec Election timeout in milliseconds */
* @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
...
@@ -692,6 +692,30 @@ raft_node_t* raft_add_non_voting_node(raft_server_t* me_, void* udata, int id, i
return
node
;
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_
)
int
raft_get_nvotes_for_me
(
raft_server_t
*
me_
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_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)
...
@@ -61,6 +61,19 @@ void TestRaft_server_voting_results_in_voting(CuTest * tc)
CuAssertTrue
(
tc
,
9
==
raft_get_voted_for
(
r
));
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
TestRaft_election_start_increments_term
(
CuTest
*
tc
)
{
{
void
*
r
=
raft_new
();
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