Просмотр исходного кода

votequorum: simplify getinfo data and protect against call against quorum node

Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
Reviewed-by: Jan Friesse <jfriesse@redhat.com>
Fabio M. Di Nitto 13 лет назад
Родитель
Сommit
c9e207ec92
2 измененных файлов с 10 добавлено и 6 удалено
  1. 9 5
      exec/votequorum.c
  2. 1 1
      tools/corosync-quorumtool.c

+ 9 - 5
exec/votequorum.c

@@ -1945,12 +1945,17 @@ static void message_handler_req_lib_votequorum_getinfo (void *conn, const void *
 	unsigned int highest_expected = 0;
 	unsigned int total_votes = 0;
 	cs_error_t error = CS_OK;
+	uint32_t nodeid = req_lib_votequorum_getinfo->nodeid;
 
 	ENTER();
 
 	log_printf(LOGSYS_LEVEL_DEBUG, "got getinfo request on %p for node %u", conn, req_lib_votequorum_getinfo->nodeid);
 
-	node = find_node_by_nodeid(req_lib_votequorum_getinfo->nodeid);
+	if (nodeid == NODEID_QDEVICE) {
+		nodeid = us->node_id;
+	}
+
+	node = find_node_by_nodeid(nodeid);
 	if (node) {
 		struct cluster_node *iternode;
 		struct list_head *nodelist;
@@ -1965,10 +1970,9 @@ static void message_handler_req_lib_votequorum_getinfo (void *conn, const void *
 			}
 		}
 
-		if (((us->flags & NODE_FLAGS_QDEVICE_REGISTERED) && (qdevice->state == NODESTATE_MEMBER)) ||
-		    ((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_REGISTERED) &&
+		    (node->flags & NODE_FLAGS_QDEVICE_ALIVE) &&
+		    (node->flags & NODE_FLAGS_QDEVICE_CAST_VOTE)) {
 			total_votes += qdevice->votes;
 		}
 

+ 1 - 1
tools/corosync-quorumtool.c

@@ -409,7 +409,7 @@ static int display_quorum_data(int is_quorate, uint32_t nodeid,
 	if ((err == CS_OK) || (err == CS_ERR_NOT_EXIST)) {
 		printf("\nVotequorum information\n");
 		printf("----------------------\n");
-		printf("Node ID:          %u\n", nodeid);
+		printf("Node ID:          %u\n", nodeid?nodeid:our_nodeid);
 		printf("Node state:       ");
 		if (err == CS_ERR_NOT_EXIST) {
 			printf("Unknown\n");