Gitweb:
http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=...
Commit: d440c5f62d95c1ee4e59f9daff12fc64b29e4e3d
Parent: 42c94746ebea6466e09daac3949c7a784e2a6dad
Author: Lon Hohberger <lhh(a)redhat.com>
AuthorDate: Tue Sep 22 17:36:37 2009 -0400
Committer: Lon Hohberger <lhh(a)redhat.com>
CommitterDate: Mon Sep 28 11:14:11 2009 -0400
rgmanager: Fix -m and -s output when fed bad data
Resolves: rhbz#506346
Signed-off-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/src/utils/clustat.c | 73 +++++++++++++++++++++++++++++------------
1 files changed, 52 insertions(+), 21 deletions(-)
diff --git a/rgmanager/src/utils/clustat.c b/rgmanager/src/utils/clustat.c
index f638727..164d5b0 100644
--- a/rgmanager/src/utils/clustat.c
+++ b/rgmanager/src/utils/clustat.c
@@ -568,6 +568,20 @@ build_service_field_sizes(int cols, int *svcsize, int *nodesize, int
*statsize)
}
+static void
+print_svc_header(int svcsize, int nodesize, int statsize)
+{
+ printf(" %-*.*s %-*.*s %-*.*s\n",
+ svcsize, svcsize, "Service Name",
+ nodesize, nodesize, "Owner (Last)",
+ statsize, statsize, "State");
+ printf(" %-*.*s %-*.*s %-*.*s\n",
+ svcsize, svcsize, "------- ----",
+ nodesize, nodesize, "----- ------",
+ statsize, statsize, "-----");
+}
+
+
static int
txt_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members,
char *svcname, int flags)
@@ -583,24 +597,20 @@ txt_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members,
build_service_field_sizes(dimx, &svcsize, &nodesize, &statsize);
if (!(flags & RG_VERBOSE)) {
-
- printf(" %-*.*s %-*.*s %-*.*s\n",
- svcsize, svcsize, "Service Name",
- nodesize, nodesize, "Owner (Last)",
- statsize, statsize, "State");
- printf(" %-*.*s %-*.*s %-*.*s\n",
- svcsize, svcsize, "------- ----",
- nodesize, nodesize, "----- ------",
- statsize, statsize, "-----");
+ if (!svcname)
+ print_svc_header(svcsize, nodesize, statsize);
} else {
printf("Service Information\n"
"------- -----------\n\n");
}
for (x = 0; x < rgl->rgl_count; x++) {
- if (svcname &&
- strcmp(rgl->rgl_states[x].rs_name, svcname))
- continue;
+ if (svcname) {
+ if (strcmp(rgl->rgl_states[x].rs_name, svcname)) {
+ continue;
+ }
+ print_svc_header(svcsize, nodesize, statsize);
+ }
txt_rg_state(&rgl->rgl_states[x], members, flags,
svcsize, nodesize, statsize);
if (svcname) {
@@ -777,10 +787,20 @@ xml_member_state(cman_node_t *node)
}
+static void
+print_member_header(nodesize)
+{
+ printf(" %-*.*s", nodesize, nodesize, "Member Name");
+ printf("%-4.4s %s\n", "ID", "Status");
+ printf(" %-*.*s", nodesize, nodesize, "------ ----");
+ printf("%-4.4s %s\n", "----", "------");
+}
+
+
static int
txt_member_states(cluster_member_list_t *membership, char *name)
{
- int x, ret = 0, nodesize;
+ int x, ret = -1, nodesize;
if (!membership) {
printf("Membership information not available\n");
@@ -789,19 +809,30 @@ txt_member_states(cluster_member_list_t *membership, char *name)
build_member_field_size(dimx, &nodesize);
- printf(" %-*.*s", nodesize, nodesize, "Member Name");
- printf("%-4.4s %s\n", "ID", "Status");
- printf(" %-*.*s", nodesize, nodesize, "------ ----");
- printf("%-4.4s %s\n", "----", "------");
+ if (!name) {
+ printf(" %-*.*s", nodesize, nodesize, "Member Name");
+ printf("%-4.4s %s\n", "ID", "Status");
+ printf(" %-*.*s", nodesize, nodesize, "------ ----");
+ printf("%-4.4s %s\n", "----", "------");
+ ret = 0;
+ }
for (x = 0; x < membership->cml_count; x++) {
- if (name && strcmp(membership->cml_members[x].cn_name, name))
- continue;
+ if (name) {
+ if (strcmp(membership->cml_members[x].cn_name, name)) {
+ continue;
+ }
+ print_member_header(nodesize);
+ }
txt_member_state(&membership->cml_members[x], nodesize);
- ret = !(membership->cml_members[x].cn_member & FLAG_UP);
+ if (name) {
+ ret = !(membership->cml_members[x].cn_member & FLAG_UP);
+ return ret;
+ }
}
- printf("\n");
+ if (!name)
+ printf("\n");
return ret;
}