From: "Fabio M. Di Nitto" <fdinitto@xxxxxxxxxx> this improves the monitoring option a ton Signed-off-by: Fabio M. Di Nitto <fdinitto@xxxxxxxxxx> --- :100644 100644 785ee7a... 37ae4cb... M tools/corosync-quorumtool.c tools/corosync-quorumtool.c | 90 ++++++++++++++++++++---------------------- 1 files changed, 43 insertions(+), 47 deletions(-) diff --git a/tools/corosync-quorumtool.c b/tools/corosync-quorumtool.c index 785ee7a..37ae4cb 100644 --- a/tools/corosync-quorumtool.c +++ b/tools/corosync-quorumtool.c @@ -289,6 +289,43 @@ static void quorum_notification_fn( } } +static int display_quorum_data(int is_quorate) +{ + struct votequorum_info info; + int err; + char quorum_type[256]; + + printf("Version: %s\n", VERSION); + printf("Nodes: %d\n", g_view_list_entries); + printf("Ring ID: %" PRIu64 "\n", g_ring_id); + if (get_quorum_type(quorum_type, sizeof(quorum_type))) { + strncpy(quorum_type, "Not configured", sizeof(quorum_type) - 1); + } + printf("Quorum type: %s\n", quorum_type); + printf("Quorate: %s\n", is_quorate?"Yes":"No"); + + if (!v_handle) { + return CS_OK; + } + + if ((err=votequorum_getinfo(v_handle, 0, &info)) == CS_OK) { + printf("Node votes: %d\n", info.node_votes); + printf("Expected votes: %d\n", info.node_expected_votes); + printf("Highest expected: %d\n", info.highest_expected); + printf("Total votes: %d\n", info.total_votes); + printf("Quorum: %d %s\n", info.quorum, info.flags & VOTEQUORUM_INFO_FLAG_QUORATE?" ":"Activity blocked"); + printf("Flags: "); + if (info.flags & VOTEQUORUM_INFO_FLAG_HASSTATE) printf("HasState "); + if (info.flags & VOTEQUORUM_INFO_FLAG_TWONODE) printf("2Node "); + if (info.flags & VOTEQUORUM_INFO_FLAG_QUORATE) printf("Quorate "); + printf("\n"); + } else { + fprintf(stderr, "votequorum_getinfo FAILED: %d\n", err); + } + + return err; +} + /* * return 1 if quorate * 0 if not quorate @@ -296,10 +333,8 @@ static void quorum_notification_fn( */ static int show_status(void) { - struct votequorum_info info; int is_quorate; int err; - char quorum_type[256]; err=quorum_getquorate(q_handle, &is_quorate); if (err != CS_OK) { @@ -330,33 +365,7 @@ quorum_err: return err; } - printf("Version: %s\n", VERSION); - printf("Nodes: %d\n", g_view_list_entries); - printf("Ring ID: %" PRIu64 "\n", g_ring_id); - if (get_quorum_type(quorum_type, sizeof(quorum_type))) { - strncpy(quorum_type, "Not configured", sizeof(quorum_type) - 1); - } - printf("Quorum type: %s\n", quorum_type); - printf("Quorate: %s\n", is_quorate?"Yes":"No"); - - if (!v_handle) { - return is_quorate; - } - - if ((err=votequorum_getinfo(v_handle, 0, &info)) == CS_OK) { - printf("Node votes: %d\n", info.node_votes); - printf("Expected votes: %d\n", info.node_expected_votes); - printf("Highest expected: %d\n", info.highest_expected); - printf("Total votes: %d\n", info.total_votes); - printf("Quorum: %d %s\n", info.quorum, info.flags & VOTEQUORUM_INFO_FLAG_QUORATE?" ":"Activity blocked"); - printf("Flags: "); - if (info.flags & VOTEQUORUM_INFO_FLAG_HASSTATE) printf("HasState "); - if (info.flags & VOTEQUORUM_INFO_FLAG_TWONODE) printf("2Node "); - if (info.flags & VOTEQUORUM_INFO_FLAG_QUORATE) printf("Quorate "); - printf("\n"); - } else { - fprintf(stderr, "votequorum_getinfo FAILED: %d\n", err); - } + err = display_quorum_data(is_quorate); if (err != CS_OK) { return err; @@ -367,15 +376,12 @@ quorum_err: static int monitor_status(nodeid_format_t nodeid_format, name_format_t name_format) { int err; - show_status(); - if (q_type == QUORUM_FREE) { + show_status(); printf("\nQuorum is not configured - cannot monitor\n"); return 0; } - printf("starting monitoring loop\n"); - err=quorum_trackstart(q_handle, CS_TRACK_CHANGES); if (err != CS_OK) { fprintf(stderr, "quorum_trackstart FAILED: %d\n", err); @@ -384,7 +390,6 @@ static int monitor_status(nodeid_format_t nodeid_format, name_format_t name_form while (1) { time_t t; - int i; err = quorum_dispatch(q_handle, CS_DISPATCH_ONE); if (err != CS_OK) { @@ -393,20 +398,11 @@ static int monitor_status(nodeid_format_t nodeid_format, name_format_t name_form } time(&t); printf("\ndate: %s", ctime((const time_t *)&t)); - printf("Nodes: %d\n", g_view_list_entries); - printf("Ring ID: %" PRIu64 "\n", g_ring_id); - printf("Quorate: %s\n", g_quorate?"Yes":"No"); - printf("Nodeid\tName\n"); - for (i=0; i < g_view_list_entries; i++) { - if (nodeid_format == NODEID_FORMAT_DECIMAL) { - printf("%4u\t", g_view_list[i]); - } else { - printf("0x%04x\t", g_view_list[i]); - } - printf("%s\n", node_name(g_view_list[i], name_format)); + err = display_quorum_data(g_quorate); + if (err != CS_OK) { + fprintf(stderr, "display_quorum_data FAILED: %d\n", err); + goto quorum_err; } - free(g_view_list); - g_view_list = NULL; } quorum_err: -- 1.7.7.5 _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss