Jelajahi Sumber

quorumtool: Sort output by nodeid

corosync-quorumtool prints the node listing by IP address
(as passed back to it from corosync) but this can be
counter-intuitive if the node IDs aren't in the same
order as the IP addresses. This patch sorts the nodes
by node ID so that the output is easier for humans to
parse.

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
Reviewed-By: Jan Friesse <jfriesse@redhat.com>
Christine Caulfield 11 tahun lalu
induk
melakukan
ddb017fa0e
1 mengubah file dengan 20 tambahan dan 4 penghapusan
  1. 20 4
      tools/corosync-quorumtool.c

+ 20 - 4
tools/corosync-quorumtool.c

@@ -36,6 +36,7 @@
 #include <config.h>
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -368,6 +369,20 @@ static void print_uint32_padded(uint32_t value)
 	print_string_padded(buf);
 }
 
+static int compare_nodeids(const void *one, const void *two)
+{
+      const struct votequorum_info *info1 = one;
+      const struct votequorum_info *info2 = two;
+
+      if (info1->node_id == info2->node_id) {
+	  return 0;
+      }
+      if (info1->node_id > info2->node_id) {
+	  return 1;
+      }
+      return -1;
+}
+
 static void display_nodes_data(nodeid_format_t nodeid_format, name_format_t name_format)
 {
 	int i, display_qdevice = 0;
@@ -399,11 +414,12 @@ static void display_nodes_data(nodeid_format_t nodeid_format, name_format_t name
 	}
 	printf("Name\n");
 
+	qsort(info, g_view_list_entries, sizeof(struct votequorum_info), compare_nodeids);
 	for (i=0; i < g_view_list_entries; i++) {
 		if (nodeid_format == NODEID_FORMAT_DECIMAL) {
-			print_uint32_padded(g_view_list[i]);
+			print_uint32_padded(info[i].node_id);
 		} else {
-			printf("0x%08x ", g_view_list[i]);
+			printf("0x%08x ", info[i].node_id);
 		}
 		if (v_handle) {
 			int votes = -1;
@@ -426,8 +442,8 @@ static void display_nodes_data(nodeid_format_t nodeid_format, name_format_t name
 				}
 			}
 		}
-		printf("%s", node_name(g_view_list[i], name_format));
-		if (g_view_list[i] == our_nodeid) {
+		printf("%s", node_name(info[i].node_id, name_format));
+		if (info[i].node_id == our_nodeid) {
 			printf(" (local)");
 		}
 		printf("\n");