From: "Fabio M. Di Nitto" <fdinitto@xxxxxxxxxx> votequorum internal quorum/expected_vote check was slightly too conservative and was not done correctly when leave_remove feature is enabled. this fix allows admins to effectively override expected_votes and drive ev_barrier as expected. Signed-off-by: Fabio M. Di Nitto <fdinitto@xxxxxxxxxx> --- exec/votequorum.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/exec/votequorum.c b/exec/votequorum.c index faa1bf6..5f37980 100644 --- a/exec/votequorum.c +++ b/exec/votequorum.c @@ -1166,8 +1166,7 @@ static void message_handler_req_exec_votequorum_reconfigure ( case VOTEQUORUM_RECONFIG_PARAM_EXPECTED_VOTES: list_iterate(nodelist, &cluster_members_list) { node = list_entry(nodelist, struct cluster_node, list); - if (node->state == NODESTATE_MEMBER && - node->expected_votes > req_exec_quorum_reconfigure->value) { + if (node->state == NODESTATE_MEMBER) { node->expected_votes = req_exec_quorum_reconfigure->value; } } @@ -1497,13 +1496,18 @@ static void message_handler_req_lib_votequorum_setexpected (void *conn, const vo cs_error_t error = CS_OK; unsigned int newquorum; unsigned int total_votes; + uint8_t leave_remove_status = 0; ENTER(); + leave_remove_status = leave_remove; + leave_remove = 0; + /* * Validate new expected votes */ newquorum = calculate_quorum(1, req_lib_votequorum_setexpected->expected_votes, &total_votes); + leave_remove = leave_remove_status; if (newquorum < total_votes / 2 || newquorum > total_votes) { error = CS_ERR_INVALID_PARAM; -- 1.7.7.6 _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss