From: "Fabio M. Di Nitto" <fdinitto@xxxxxxxxxx> simplify different code path as checks are simpler, separate ALIVE and CAST_VOTE Signed-off-by: Fabio M. Di Nitto <fdinitto@xxxxxxxxxx> --- :100644 100644 98dced1... eb7f88d... M exec/votequorum.c exec/votequorum.c | 46 +++++++++++++++++++--------------------------- 1 files changed, 19 insertions(+), 27 deletions(-) diff --git a/exec/votequorum.c b/exec/votequorum.c index 98dced1..eb7f88d 100644 --- a/exec/votequorum.c +++ b/exec/votequorum.c @@ -620,13 +620,10 @@ static int calculate_quorum(int allow_decrease, unsigned int max_expected, unsig } } - if (us->flags & NODE_FLAGS_QDEVICE_REGISTERED) { - log_printf(LOGSYS_LEVEL_DEBUG, "node %u state=%d, votes=%u", - qdevice->node_id, qdevice->state, qdevice->votes); - if (qdevice->state == NODESTATE_MEMBER) { - total_votes += qdevice->votes; - total_nodes++; - } + if (us->flags & NODE_FLAGS_QDEVICE_CAST_VOTE) { + log_printf(LOGSYS_LEVEL_DEBUG, "node 0 state=1, votes=%u", qdevice->votes); + total_votes += qdevice->votes; + total_nodes++; } if (max_expected > 0) { @@ -757,6 +754,7 @@ static void get_total_votes(unsigned int *totalvotes, unsigned int *current_memb total_votes += qdevice->votes; cluster_members++; } + *totalvotes = total_votes; *current_members = cluster_members; @@ -1728,7 +1726,6 @@ static char *votequorum_exec_init_fn (struct corosync_api_v1 *api) LEAVE(); return ((char *)"Could not allocate node."); } - qdevice->state = NODESTATE_DEAD; qdevice->votes = 0; memset(qdevice_name, 0, VOTEQUORUM_MAX_QDEVICE_NAME_LEN); @@ -1915,14 +1912,12 @@ static void qdevice_timer_fn(void *arg) { ENTER(); - if ((!(us->flags & NODE_FLAGS_QDEVICE_REGISTERED)) || - (qdevice->state == NODESTATE_DEAD) || + if ((!(us->flags & NODE_FLAGS_QDEVICE_ALIVE)) || (!qdevice_timer_set)) { LEAVE(); return; } - qdevice->state = NODESTATE_DEAD; us->flags &= ~NODE_FLAGS_QDEVICE_ALIVE; us->flags &= ~NODE_FLAGS_QDEVICE_CAST_VOTE; log_printf(LOGSYS_LEVEL_INFO, "lost contact with quorum device %s", qdevice_name); @@ -1970,9 +1965,7 @@ static void message_handler_req_lib_votequorum_getinfo (void *conn, const void * } } - if ((node->flags & NODE_FLAGS_QDEVICE_REGISTERED) && - (node->flags & NODE_FLAGS_QDEVICE_ALIVE) && - (node->flags & NODE_FLAGS_QDEVICE_CAST_VOTE)) { + if (node->flags & NODE_FLAGS_QDEVICE_CAST_VOTE) { total_votes += qdevice->votes; } @@ -2252,7 +2245,6 @@ static void message_handler_req_lib_votequorum_qdevice_unregister (void *conn, us->flags &= ~NODE_FLAGS_QDEVICE_REGISTERED; us->flags &= ~NODE_FLAGS_QDEVICE_ALIVE; us->flags &= ~NODE_FLAGS_QDEVICE_CAST_VOTE; - qdevice->state = NODESTATE_DEAD; votequorum_exec_send_nodeinfo(us->node_id); votequorum_exec_send_qdevice_reg(VOTEQUORUM_QDEVICE_OPERATION_UNREGISTER, req_lib_votequorum_qdevice_unregister->name); @@ -2304,6 +2296,7 @@ static void message_handler_req_lib_votequorum_qdevice_poll (void *conn, const struct req_lib_votequorum_qdevice_poll *req_lib_votequorum_qdevice_poll = message; struct res_lib_votequorum_status res_lib_votequorum_status; cs_error_t error = CS_OK; + uint32_t oldflags; ENTER(); @@ -2317,25 +2310,24 @@ static void message_handler_req_lib_votequorum_qdevice_poll (void *conn, error = CS_ERR_INVALID_PARAM; goto out; } + if (qdevice_timer_set) { corosync_api->timer_delete(qdevice_timer); qdevice_timer_set = 0; } + oldflags = us->flags; + + us->flags |= NODE_FLAGS_QDEVICE_ALIVE; + if (req_lib_votequorum_qdevice_poll->state) { - if (qdevice->state == NODESTATE_DEAD) { - qdevice->state = NODESTATE_MEMBER; - us->flags |= NODE_FLAGS_QDEVICE_ALIVE; - us->flags |= NODE_FLAGS_QDEVICE_CAST_VOTE; - votequorum_exec_send_nodeinfo(us->node_id); - } + us->flags |= NODE_FLAGS_QDEVICE_CAST_VOTE; } else { - if (qdevice->state == NODESTATE_MEMBER) { - qdevice->state = NODESTATE_DEAD; - us->flags &= ~NODE_FLAGS_QDEVICE_ALIVE; - us->flags &= ~NODE_FLAGS_QDEVICE_CAST_VOTE; - votequorum_exec_send_nodeinfo(us->node_id); - } + us->flags &= ~NODE_FLAGS_QDEVICE_CAST_VOTE; + } + + if (us->flags != oldflags) { + votequorum_exec_send_nodeinfo(us->node_id); } corosync_api->timer_add_duration((unsigned long long)qdevice_timeout*1000000, qdevice, -- 1.7.7.6 _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss