cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2006-12-13 17:12 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2006-12-13 17:12 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2006-12-13 17:12:03

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix segfault in clustat if node is not a cluster member

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.25&r2=1.26

--- cluster/rgmanager/src/utils/clustat.c	2006/10/12 22:07:57	1.25
+++ cluster/rgmanager/src/utils/clustat.c	2006/12/13 17:12:02	1.26
@@ -345,6 +345,9 @@
 	int x, y;
 	cman_node_t *m, *new;
 
+	if (!these)
+		return all;
+
 	for (x=0; x<these->cml_count; x++) {
 
 		m = NULL;



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-12-10 18:24 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-12-10 18:24 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2007-12-10 18:24:13

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix type-pun warnings in clustat.c on i386

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.25.2.8&r2=1.25.2.9

--- cluster/rgmanager/src/utils/clustat.c	2007/12/06 17:52:32	1.25.2.8
+++ cluster/rgmanager/src/utils/clustat.c	2007/12/10 18:24:12	1.25.2.9
@@ -492,6 +492,8 @@
 void
 _txt_rg_state_v(rg_state_t *rs, cluster_member_list_t *members, int flags)
 {
+	time_t t;
+
 	printf("Service Name      : %s\n", rs->rs_name);
 	printf("  Current State   : %s (%d)\n",
 	       rg_state_str(rs->rs_state), rs->rs_state);
@@ -499,8 +501,9 @@
 	       my_memb_id_to_name(members, rs->rs_owner));
 	printf("  Last Owner      : %s\n",
 	       my_memb_id_to_name(members, rs->rs_last_owner));
-	printf("  Last Transition : %s\n",
-	       ctime((time_t *)(&rs->rs_transition)));
+
+	t = (time_t)(rs->rs_transition);
+	printf("  Last Transition : %s\n", ctime(&t));
 }
 
 
@@ -520,9 +523,11 @@
 {
 	char time_str[32];
 	int x;
+	time_t t;
 
 	/* Chop off newlines */
-	ctime_r((time_t *)&rs->rs_transition, time_str);
+       	t = (time_t)(rs->rs_transition);
+	ctime_r(&t, time_str);
 	for (x = 0; time_str[x]; x++) {
 		if (time_str[x] < 32) {
 			time_str[x] = 0;



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-12-10 18:11 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-12-10 18:11 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-12-10 18:11:57

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix type-punned errors on i386

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.37&r2=1.38

--- cluster/rgmanager/src/utils/clustat.c	2007/12/06 17:47:06	1.37
+++ cluster/rgmanager/src/utils/clustat.c	2007/12/10 18:11:56	1.38
@@ -492,6 +492,8 @@
 void
 _txt_rg_state_v(rg_state_t *rs, cluster_member_list_t *members, int flags)
 {
+	time_t t;
+
 	printf("Service Name      : %s\n", rs->rs_name);
 	printf("  Current State   : %s (%d)\n",
 	       rg_state_str(rs->rs_state), rs->rs_state);
@@ -499,8 +501,9 @@
 	       my_memb_id_to_name(members, rs->rs_owner));
 	printf("  Last Owner      : %s\n",
 	       my_memb_id_to_name(members, rs->rs_last_owner));
-	printf("  Last Transition : %s\n",
-	       ctime((time_t *)(&rs->rs_transition)));
+
+	t = (time_t)(rs->rs_transition);
+	printf("  Last Transition : %s\n", ctime(&t));
 }
 
 
@@ -520,9 +523,11 @@
 {
 	char time_str[32];
 	int x;
+	time_t t;
 
 	/* Chop off newlines */
-	ctime_r((time_t *)&rs->rs_transition, time_str);
+       	t = (time_t)(rs->rs_transition);
+	ctime_r(&t, time_str);
 	for (x = 0; time_str[x]; x++) {
 		if (time_str[x] < 32) {
 			time_str[x] = 0;



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-12-06 17:52 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-12-06 17:52 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2007-12-06 17:52:32

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix format warnings on newer GCC

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.25.2.7&r2=1.25.2.8

--- cluster/rgmanager/src/utils/clustat.c	2007/11/30 19:47:15	1.25.2.7
+++ cluster/rgmanager/src/utils/clustat.c	2007/12/06 17:52:32	1.25.2.8
@@ -451,10 +451,9 @@
 
 void
 _txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags,
-	      char *fmt_buf, int ns)
+	      int svcsize, int nodesize, int statsize)
 {
 	char owner[MAXHOSTNAMELEN+1];
-	char owner_fmt[16];
 	char *name = rs->rs_name, *ptr;
 	int l;
 
@@ -469,27 +468,24 @@
 	}
 
 	memset(owner, 0, sizeof(owner));
-	memset(owner_fmt, 0, sizeof(owner_fmt));
 
 	if (rs->rs_state == RG_STATE_STOPPED ||
 	    rs->rs_state == RG_STATE_DISABLED ||
 	    rs->rs_state == RG_STATE_ERROR ||
 	    rs->rs_state == RG_STATE_FAILED) {
 
-		snprintf(owner_fmt, sizeof(owner_fmt)-1, "(%%-.%ds)", ns-2);
-		snprintf(owner, sizeof(owner)-1, owner_fmt,
+		snprintf(owner, sizeof(owner)-1, "(%-.*s)", nodesize-2,
 			 my_memb_id_to_name(members, rs->rs_last_owner));
 	} else {
 
-		snprintf(owner_fmt, sizeof(owner_fmt)-1, "%%-.%ds", ns);
-		snprintf(owner, sizeof(owner)-1, owner_fmt,
+		snprintf(owner, sizeof(owner)-1, "%-.*s", nodesize,
 			 my_memb_id_to_name(members, rs->rs_owner));
 	}
 	
-	printf(fmt_buf,
-	       name,
-	       owner,
-	       rg_state_str(rs->rs_state));
+	printf(" %-*.*s %-*.*s %-*.*s\n",
+	       svcsize, svcsize, rs->rs_name,
+	       nodesize, nodesize, owner,
+	       statsize, statsize, rg_state_str(rs->rs_state));
 }
 
 
@@ -509,12 +505,13 @@
 
 
 void
-txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags, char *fmt_buf, int ns)
+txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags, int svcsize, 
+	     int nodesize, int statsize)
 {
 	if (flags & RG_VERBOSE) 
 		_txt_rg_state_v(rs, members, flags);
 	else
-		_txt_rg_state(rs, members, flags, fmt_buf, ns);
+		_txt_rg_state(rs, members, flags, svcsize, nodesize, statsize);
 }
 
 
@@ -548,27 +545,20 @@
 
 
 void
-build_service_format(char *buf, int buflen, int cols, int *ns)
+build_service_field_sizes(int cols, int *svcsize, int *nodesize, int *statsize)
 {
 	/* Based on 80 columns */
-	int svcsize = 30;
-	int nodesize = 30;
-	int statsize = 14;	/* uninitialized */
+	*svcsize = 30;
+	*nodesize = 30;
+	*statsize = 14;	/* uninitialized */
 	int pad = 6;		/* Spaces and such; newline */
 
-	svcsize = (cols - (statsize + pad)) / 2;
-	nodesize = (cols - (statsize + pad)) / 2;
-	if (svcsize > MAXHOSTNAMELEN)
-		svcsize = MAXHOSTNAMELEN;
-	if (nodesize > MAXHOSTNAMELEN)
-		nodesize = MAXHOSTNAMELEN;
-
-	memset(buf, 0, buflen);
-	snprintf(buf, buflen-1, "  %%-%d.%ds %%-%d.%ds %%-%d.%ds\n",
-		 svcsize, svcsize, nodesize, nodesize, statsize,
-		 statsize);
-
-	*ns = nodesize;
+	*svcsize = (cols - (*statsize + pad)) / 2;
+	*nodesize = (cols - (*statsize + pad)) / 2;
+	if (*svcsize > MAXHOSTNAMELEN)
+		*svcsize = MAXHOSTNAMELEN;
+	if (*nodesize > MAXHOSTNAMELEN)
+		*nodesize = MAXHOSTNAMELEN;
 }
 
 
@@ -576,8 +566,7 @@
 txt_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members, 
 	      char *svcname, int flags)
 {
-	int x, ret = 0, ns;
-	char fmt_buf[80];
+	int x, ret = 0, svcsize, nodesize, statsize;
 
 	if (!rgl || !members)
 		return -1;
@@ -585,14 +574,18 @@
 	if (svcname)
 		ret = -1;
 
-	build_service_format(fmt_buf, sizeof(fmt_buf), dimx, &ns);
+	build_service_field_sizes(dimx, &svcsize, &nodesize, &statsize);
 
 	if (!(flags & RG_VERBOSE)) {
 
-		printf(fmt_buf,
-		       "Service Name", "Owner (Last)", "State");
-		printf(fmt_buf,
-		       "------- ----", "----- ------", "-----");
+		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, "-----");
 	} else {
 		printf("Service Information\n"
 		       "------- -----------\n\n");
@@ -602,7 +595,8 @@
 		if (svcname &&
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
-		txt_rg_state(&rgl->rgl_states[x], members, flags, fmt_buf, ns);
+		txt_rg_state(&rgl->rgl_states[x], members, flags,
+			     svcsize, nodesize, statsize);
 		if (svcname) {
 			switch (rgl->rgl_states[x].rs_state) {
 			case RG_STATE_STARTING:
@@ -706,25 +700,21 @@
 }
 
 void
-build_member_format(char *buf, int buflen, int cols)
+build_member_field_size(int cols, int *nodesize)
 {
 	/* Based on 80 columns */
-	int nodesize = 40;
-
-	nodesize = (cols / 2);
-	if (nodesize > MAXHOSTNAMELEN)
-		nodesize = MAXHOSTNAMELEN;
+	*nodesize = 40;
 
-	memset(buf, 0, buflen);
-	snprintf(buf, buflen-1, "  %%-%d.%ds ",
-		 nodesize, nodesize);
+	*nodesize = (cols / 2);
+	if (*nodesize > MAXHOSTNAMELEN)
+		*nodesize = MAXHOSTNAMELEN;
 }
 
 
 void
-txt_member_state(cman_node_t *node, char *fmt_buf)
+txt_member_state(cman_node_t *node, int nodesize)
 {
-	printf(fmt_buf, node->cn_name);
+	printf(" %-*.*s ", nodesize, nodesize, node->cn_name);
 	printf("%4d ", node->cn_nodeid);
 
 	if (node->cn_member & FLAG_UP)
@@ -776,25 +766,24 @@
 int
 txt_member_states(cluster_member_list_t *membership, char *name)
 {
-	char buf[80];
-	int x, ret = 0;
+	int x, ret = 0, nodesize;
 
   	if (!membership) {
   		printf("Membership information not available\n");
  		return -1;
   	}
 
-	build_member_format(buf, sizeof(buf), dimx);
+	build_member_field_size(dimx, &nodesize);
 
-	printf(buf, "Member Name");
+	printf(" %-*.*s", nodesize, nodesize, "Member Name");
 	printf("%-4.4s %s\n", "ID", "Status");
-	printf(buf, "------ ----");
+	printf(" %-*.*s", nodesize, nodesize, "------ ----");
 	printf("%-4.4s %s\n", "----", "------");
 
 	for (x = 0; x < membership->cml_count; x++) {
 		if (name && strcmp(membership->cml_members[x].cn_name, name))
 			continue;
-		txt_member_state(&membership->cml_members[x], buf);
+		txt_member_state(&membership->cml_members[x], nodesize);
  		ret = !(membership->cml_members[x].cn_member & FLAG_UP);
 	}
 
@@ -1072,8 +1061,12 @@
 		ret = !(cman_is_quorate(ch));
 		goto cleanup;
 	case VERSION_ONLY:
+#ifdef RELEASE_VERSION
 		printf("%s version %s\n", basename(argv[0]),
-		       PACKAGE_VERSION);
+		       RELEASE_VERSION);
+#else
+		printf("%s version DEVEL\n", basename(argv[0]));
+#endif
 		if (!ch)
 		       break;
 		goto cleanup;



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-12-06 17:47 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-12-06 17:47 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-12-06 17:47:06

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix format warnings on newer GCC

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.36&r2=1.37

--- cluster/rgmanager/src/utils/clustat.c	2007/11/30 20:06:55	1.36
+++ cluster/rgmanager/src/utils/clustat.c	2007/12/06 17:47:06	1.37
@@ -451,10 +451,9 @@
 
 void
 _txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags,
-	      char *fmt_buf, int ns)
+	      int svcsize, int nodesize, int statsize)
 {
 	char owner[MAXHOSTNAMELEN+1];
-	char owner_fmt[16];
 	char *name = rs->rs_name, *ptr;
 	int l;
 
@@ -469,27 +468,24 @@
 	}
 
 	memset(owner, 0, sizeof(owner));
-	memset(owner_fmt, 0, sizeof(owner_fmt));
 
 	if (rs->rs_state == RG_STATE_STOPPED ||
 	    rs->rs_state == RG_STATE_DISABLED ||
 	    rs->rs_state == RG_STATE_ERROR ||
 	    rs->rs_state == RG_STATE_FAILED) {
 
-		snprintf(owner_fmt, sizeof(owner_fmt)-1, "(%%-.%ds)", ns-2);
-		snprintf(owner, sizeof(owner)-1, owner_fmt,
+		snprintf(owner, sizeof(owner)-1, "(%-.*s)", nodesize-2,
 			 my_memb_id_to_name(members, rs->rs_last_owner));
 	} else {
 
-		snprintf(owner_fmt, sizeof(owner_fmt)-1, "%%-.%ds", ns);
-		snprintf(owner, sizeof(owner)-1, owner_fmt,
+		snprintf(owner, sizeof(owner)-1, "%-.*s", nodesize,
 			 my_memb_id_to_name(members, rs->rs_owner));
 	}
 	
-	printf(fmt_buf,
-	       name,
-	       owner,
-	       rg_state_str(rs->rs_state));
+	printf(" %-*.*s %-*.*s %-*.*s\n",
+	       svcsize, svcsize, rs->rs_name,
+	       nodesize, nodesize, owner,
+	       statsize, statsize, rg_state_str(rs->rs_state));
 }
 
 
@@ -509,12 +505,13 @@
 
 
 void
-txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags, char *fmt_buf, int ns)
+txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags, int svcsize, 
+	     int nodesize, int statsize)
 {
 	if (flags & RG_VERBOSE) 
 		_txt_rg_state_v(rs, members, flags);
 	else
-		_txt_rg_state(rs, members, flags, fmt_buf, ns);
+		_txt_rg_state(rs, members, flags, svcsize, nodesize, statsize);
 }
 
 
@@ -548,27 +545,20 @@
 
 
 void
-build_service_format(char *buf, int buflen, int cols, int *ns)
+build_service_field_sizes(int cols, int *svcsize, int *nodesize, int *statsize)
 {
 	/* Based on 80 columns */
-	int svcsize = 30;
-	int nodesize = 30;
-	int statsize = 14;	/* uninitialized */
+	*svcsize = 30;
+	*nodesize = 30;
+	*statsize = 14;	/* uninitialized */
 	int pad = 6;		/* Spaces and such; newline */
 
-	svcsize = (cols - (statsize + pad)) / 2;
-	nodesize = (cols - (statsize + pad)) / 2;
-	if (svcsize > MAXHOSTNAMELEN)
-		svcsize = MAXHOSTNAMELEN;
-	if (nodesize > MAXHOSTNAMELEN)
-		nodesize = MAXHOSTNAMELEN;
-
-	memset(buf, 0, buflen);
-	snprintf(buf, buflen-1, "  %%-%d.%ds %%-%d.%ds %%-%d.%ds\n",
-		 svcsize, svcsize, nodesize, nodesize, statsize,
-		 statsize);
-
-	*ns = nodesize;
+	*svcsize = (cols - (*statsize + pad)) / 2;
+	*nodesize = (cols - (*statsize + pad)) / 2;
+	if (*svcsize > MAXHOSTNAMELEN)
+		*svcsize = MAXHOSTNAMELEN;
+	if (*nodesize > MAXHOSTNAMELEN)
+		*nodesize = MAXHOSTNAMELEN;
 }
 
 
@@ -576,8 +566,7 @@
 txt_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members, 
 	      char *svcname, int flags)
 {
-	int x, ret = 0, ns;
-	char fmt_buf[80];
+	int x, ret = 0, svcsize, nodesize, statsize;
 
 	if (!rgl || !members)
 		return -1;
@@ -585,14 +574,18 @@
 	if (svcname)
 		ret = -1;
 
-	build_service_format(fmt_buf, sizeof(fmt_buf), dimx, &ns);
+	build_service_field_sizes(dimx, &svcsize, &nodesize, &statsize);
 
 	if (!(flags & RG_VERBOSE)) {
 
-		printf(fmt_buf,
-		       "Service Name", "Owner (Last)", "State");
-		printf(fmt_buf,
-		       "------- ----", "----- ------", "-----");
+		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, "-----");
 	} else {
 		printf("Service Information\n"
 		       "------- -----------\n\n");
@@ -602,7 +595,8 @@
 		if (svcname &&
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
-		txt_rg_state(&rgl->rgl_states[x], members, flags, fmt_buf, ns);
+		txt_rg_state(&rgl->rgl_states[x], members, flags,
+			     svcsize, nodesize, statsize);
 		if (svcname) {
 			switch (rgl->rgl_states[x].rs_state) {
 			case RG_STATE_STARTING:
@@ -706,25 +700,21 @@
 }
 
 void
-build_member_format(char *buf, int buflen, int cols)
+build_member_field_size(int cols, int *nodesize)
 {
 	/* Based on 80 columns */
-	int nodesize = 40;
-
-	nodesize = (cols / 2);
-	if (nodesize > MAXHOSTNAMELEN)
-		nodesize = MAXHOSTNAMELEN;
+	*nodesize = 40;
 
-	memset(buf, 0, buflen);
-	snprintf(buf, buflen-1, "  %%-%d.%ds ",
-		 nodesize, nodesize);
+	*nodesize = (cols / 2);
+	if (*nodesize > MAXHOSTNAMELEN)
+		*nodesize = MAXHOSTNAMELEN;
 }
 
 
 void
-txt_member_state(cman_node_t *node, char *fmt_buf)
+txt_member_state(cman_node_t *node, int nodesize)
 {
-	printf(fmt_buf, node->cn_name);
+	printf(" %-*.*s ", nodesize, nodesize, node->cn_name);
 	printf("%4d ", node->cn_nodeid);
 
 	if (node->cn_member & FLAG_UP)
@@ -776,25 +766,24 @@
 int
 txt_member_states(cluster_member_list_t *membership, char *name)
 {
-	char buf[80];
-	int x, ret = 0;
+	int x, ret = 0, nodesize;
 
   	if (!membership) {
   		printf("Membership information not available\n");
  		return -1;
   	}
 
-	build_member_format(buf, sizeof(buf), dimx);
+	build_member_field_size(dimx, &nodesize);
 
-	printf(buf, "Member Name");
+	printf(" %-*.*s", nodesize, nodesize, "Member Name");
 	printf("%-4.4s %s\n", "ID", "Status");
-	printf(buf, "------ ----");
+	printf(" %-*.*s", nodesize, nodesize, "------ ----");
 	printf("%-4.4s %s\n", "----", "------");
 
 	for (x = 0; x < membership->cml_count; x++) {
 		if (name && strcmp(membership->cml_members[x].cn_name, name))
 			continue;
-		txt_member_state(&membership->cml_members[x], buf);
+		txt_member_state(&membership->cml_members[x], nodesize);
  		ret = !(membership->cml_members[x].cn_member & FLAG_UP);
 	}
 



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-11-30 19:47 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-11-30 19:47 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2007-11-30 19:47:15

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Make clustat terminal-width dependent, but don't break scripts.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.25.2.6&r2=1.25.2.7

--- cluster/rgmanager/src/utils/clustat.c	2007/08/15 18:41:12	1.25.2.6
+++ cluster/rgmanager/src/utils/clustat.c	2007/11/30 19:47:15	1.25.2.7
@@ -21,6 +21,7 @@
 #define FLAG_RGMGR 0x4
 #define FLAG_NOCFG 0x8	/* Shouldn't happen */
 #define FLAG_QDISK 0x10
+#define FLAG_RGMAST 0x20 /* for RIND */
 
 #define RG_VERBOSE 0x1
 
@@ -30,6 +31,8 @@
 
 
 int running = 1;
+int dimx = 80, dimy = 24, stdout_is_tty = 0;
+int rgmanager_master_present = 0;
 
 void
 term_handler(int sig)
@@ -44,6 +47,28 @@
 } rg_state_list_t;
 
 
+int
+rg_name_sort(const void *left, const void *right)
+{
+	return strcmp(((rg_state_t *)left)->rs_name,
+		      ((rg_state_t *)right)->rs_name);
+}
+
+
+int
+member_id_sort(const void *left, const void *right)
+{
+	cman_node_t *l = (cman_node_t *)left;
+	cman_node_t *r = (cman_node_t *)right;
+
+	if (l->cn_nodeid < r->cn_nodeid)
+		return -1;
+	if (l->cn_nodeid > r->cn_nodeid)
+		return 1;
+	return 0;
+}
+
+
 void
 flag_rgmanager_nodes(cluster_member_list_t *cml)
 {
@@ -55,7 +80,7 @@
 	struct timeval tv;
 
 	if (msg_open(MSG_SOCKET, 0, 0, &ctx, 10) < 0) {
-		perror("msg_open");
+		//perror("msg_open");
 		return;
 	}
 
@@ -121,6 +146,10 @@
 			if (cml->cml_members[n].cn_nodeid != msgp->gh_arg1)
 				continue;
 			cml->cml_members[n].cn_member |= FLAG_RGMGR;
+			if (msgp->gh_arg2) {
+				rgmanager_master_present = 1;
+				cml->cml_members[n].cn_member |= FLAG_RGMAST;
+			}
 		}
 
 		free(msgp);
@@ -147,7 +176,7 @@
 	struct timeval tv;
 
 	if (msg_open(MSG_SOCKET, 0, 0, &ctx, 10) < 0) {
-		perror("msg_open");
+		//perror("msg_open");
 		return NULL;
 	}
 
@@ -248,6 +277,9 @@
 		return NULL;
 	}
 
+	qsort(rsl->rgl_states, rsl->rgl_count, sizeof(rg_state_t),
+	      rg_name_sort);
+
 	return rsl;
 }
 
@@ -270,9 +302,11 @@
 		sleep(1);
 	
 	x = 0;
+	memset(buf, 0, sizeof(buf));
+
 	while (++x) {
 		name = NULL;
-		snprintf(buf, sizeof(buf),
+		snprintf(buf, sizeof(buf)-1,
 			"/cluster/clusternodes/clusternode[%d]/@name", x);
 
 		if (ccs_get(desc, buf, &name) != 0)
@@ -307,7 +341,7 @@
 		free(name);
 
 		/* Add node ID */
-		snprintf(buf, sizeof(buf),
+		snprintf(buf, sizeof(buf)-1,
 			 "/cluster/clusternodes/clusternode[%d]/@nodeid", x);
 		if (ccs_get(desc, buf, &name) == 0) {
 			nodes[x-1].cn_nodeid = atoi(name);
@@ -320,6 +354,9 @@
 	ccs_disconnect(desc);
 	ret->cml_members = nodes;
 
+	qsort(ret->cml_members, ret->cml_count, sizeof(cman_node_t),
+	      member_id_sort);
+
 	return ret;
 }
 
@@ -413,25 +450,44 @@
 
 
 void
-_txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags)
+_txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags,
+	      char *fmt_buf, int ns)
 {
-	char owner[31];
+	char owner[MAXHOSTNAMELEN+1];
+	char owner_fmt[16];
+	char *name = rs->rs_name, *ptr;
+	int l;
+
+	if (stdout_is_tty) {
+		ptr = strchr(rs->rs_name, ':');
+		if (ptr) {
+			l = (int)(ptr - rs->rs_name);
+			if ((l == 7) &&  /* strlen("service") == 7 */
+			    (strncmp(rs->rs_name, "service", l) == 0)) 
+				name = ptr+1;
+		}
+	}
 
+	memset(owner, 0, sizeof(owner));
+	memset(owner_fmt, 0, sizeof(owner_fmt));
 
 	if (rs->rs_state == RG_STATE_STOPPED ||
 	    rs->rs_state == RG_STATE_DISABLED ||
 	    rs->rs_state == RG_STATE_ERROR ||
 	    rs->rs_state == RG_STATE_FAILED) {
 
-		snprintf(owner, sizeof(owner), "(%-.28s)",
+		snprintf(owner_fmt, sizeof(owner_fmt)-1, "(%%-.%ds)", ns-2);
+		snprintf(owner, sizeof(owner)-1, owner_fmt,
 			 my_memb_id_to_name(members, rs->rs_last_owner));
 	} else {
 
-		snprintf(owner, sizeof(owner), "%-.30s",
+		snprintf(owner_fmt, sizeof(owner_fmt)-1, "%%-.%ds", ns);
+		snprintf(owner, sizeof(owner)-1, owner_fmt,
 			 my_memb_id_to_name(members, rs->rs_owner));
 	}
-	printf("  %-20.20s %-30.30s %-16.16s\n",
-	       rs->rs_name,
+	
+	printf(fmt_buf,
+	       name,
 	       owner,
 	       rg_state_str(rs->rs_state));
 }
@@ -453,12 +509,12 @@
 
 
 void
-txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags)
+txt_rg_state(rg_state_t *rs, cluster_member_list_t *members, int flags, char *fmt_buf, int ns)
 {
 	if (flags & RG_VERBOSE) 
 		_txt_rg_state_v(rs, members, flags);
 	else
-		_txt_rg_state(rs, members, flags);
+		_txt_rg_state(rs, members, flags, fmt_buf, ns);
 }
 
 
@@ -491,11 +547,37 @@
 }
 
 
+void
+build_service_format(char *buf, int buflen, int cols, int *ns)
+{
+	/* Based on 80 columns */
+	int svcsize = 30;
+	int nodesize = 30;
+	int statsize = 14;	/* uninitialized */
+	int pad = 6;		/* Spaces and such; newline */
+
+	svcsize = (cols - (statsize + pad)) / 2;
+	nodesize = (cols - (statsize + pad)) / 2;
+	if (svcsize > MAXHOSTNAMELEN)
+		svcsize = MAXHOSTNAMELEN;
+	if (nodesize > MAXHOSTNAMELEN)
+		nodesize = MAXHOSTNAMELEN;
+
+	memset(buf, 0, buflen);
+	snprintf(buf, buflen-1, "  %%-%d.%ds %%-%d.%ds %%-%d.%ds\n",
+		 svcsize, svcsize, nodesize, nodesize, statsize,
+		 statsize);
+
+	*ns = nodesize;
+}
+
+
 int
 txt_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members, 
 	      char *svcname, int flags)
 {
-	int x, ret = 0;
+	int x, ret = 0, ns;
+	char fmt_buf[80];
 
 	if (!rgl || !members)
 		return -1;
@@ -503,10 +585,13 @@
 	if (svcname)
 		ret = -1;
 
+	build_service_format(fmt_buf, sizeof(fmt_buf), dimx, &ns);
+
 	if (!(flags & RG_VERBOSE)) {
-		printf("  %-20.20s %-30.30s %-14.14s\n",
+
+		printf(fmt_buf,
 		       "Service Name", "Owner (Last)", "State");
-		printf("  %-20.20s %-30.30s %-14.14s\n",
+		printf(fmt_buf,
 		       "------- ----", "----- ------", "-----");
 	} else {
 		printf("Service Information\n"
@@ -517,7 +602,7 @@
 		if (svcname &&
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
-		txt_rg_state(&rgl->rgl_states[x], members, flags);
+		txt_rg_state(&rgl->rgl_states[x], members, flags, fmt_buf, ns);
 		if (svcname) {
 			switch (rgl->rgl_states[x].rs_state) {
 			case RG_STATE_STARTING:
@@ -530,7 +615,7 @@
 			}
 		}
 	}
-	
+
 	return ret;
 }
 
@@ -583,6 +668,24 @@
 
 
 void
+txt_cluster_info(cman_cluster_t *ci) 
+{
+	time_t now = time(NULL);
+
+	printf("Cluster Status for %s @ %s",
+	       ci->ci_name, ctime(&now));
+}
+
+
+void
+xml_cluster_info(cman_cluster_t *ci) 
+{
+	printf("  <cluster name=\"%s\" id=\"%d\" generation=\"%d\"/>\n",
+	       ci->ci_name, ci->ci_number, ci->ci_generation);
+}
+
+
+void
 xml_quorum_state(int qs)
 {
 	/* XXX output groupmember attr (carry over from RHCS4) */
@@ -598,15 +701,31 @@
 	} else {
 		printf(" groupmember=\"0\"");
 	}
+
 	printf("/>\n");
 }
 
+void
+build_member_format(char *buf, int buflen, int cols)
+{
+	/* Based on 80 columns */
+	int nodesize = 40;
+
+	nodesize = (cols / 2);
+	if (nodesize > MAXHOSTNAMELEN)
+		nodesize = MAXHOSTNAMELEN;
+
+	memset(buf, 0, buflen);
+	snprintf(buf, buflen-1, "  %%-%d.%ds ",
+		 nodesize, nodesize);
+}
+
 
 void
-txt_member_state(cman_node_t *node)
+txt_member_state(cman_node_t *node, char *fmt_buf)
 {
-	printf("  %-34.34s %4d ", node->cn_name,
-	       node->cn_nodeid);
+	printf(fmt_buf, node->cn_name);
+	printf("%4d ", node->cn_nodeid);
 
 	if (node->cn_member & FLAG_UP)
 		printf("Online");
@@ -619,15 +738,21 @@
 	if (node->cn_member & FLAG_NOCFG)
 		printf(", Estranged");
 	
-	if (node->cn_member & FLAG_RGMGR)
-		printf(", rgmanager");
+	if (node->cn_member & FLAG_RGMGR) {
+		if (rgmanager_master_present) {
+			if (node->cn_member & FLAG_RGMAST) 
+				printf(", RG-Master");
+			else
+				printf(", RG-Worker");
+		} else {
+			printf(", rgmanager");
+		}
+	}
 	
 	if (node->cn_member & FLAG_QDISK)
 		printf(", Quorum Disk");
 
 	printf("\n");
-		
-
 }
 
 
@@ -635,12 +760,14 @@
 xml_member_state(cman_node_t *node)
 {
 	printf("    <node name=\"%s\" state=\"%d\" local=\"%d\" "
-	       "estranged=\"%d\" rgmanager=\"%d\" qdisk=\"%d\" nodeid=\"0x%08x\"/>\n",
+	       "estranged=\"%d\" rgmanager=\"%d\" rgmanager_master=\"%d\" "
+	       "qdisk=\"%d\" nodeid=\"0x%08x\"/>\n",
 	       node->cn_name,
 	       !!(node->cn_member & FLAG_UP),
 	       !!(node->cn_member & FLAG_LOCAL),
 	       !!(node->cn_member & FLAG_NOCFG),
 	       !!(node->cn_member & FLAG_RGMGR),
+	       !!(node->cn_member & FLAG_RGMAST),
 	       !!(node->cn_member & FLAG_QDISK),
 	       (uint32_t)((node->cn_nodeid      )&0xffffffff));
 }
@@ -649,6 +776,7 @@
 int
 txt_member_states(cluster_member_list_t *membership, char *name)
 {
+	char buf[80];
 	int x, ret = 0;
 
   	if (!membership) {
@@ -656,13 +784,17 @@
  		return -1;
   	}
 
-	printf("  %-34.34s %-4.4s %s\n", "Member Name", "ID", "Status");
-	printf("  %-34.34s %-4.4s %s\n", "------ ----", "----", "------");
+	build_member_format(buf, sizeof(buf), dimx);
+
+	printf(buf, "Member Name");
+	printf("%-4.4s %s\n", "ID", "Status");
+	printf(buf, "------ ----");
+	printf("%-4.4s %s\n", "----", "------");
 
 	for (x = 0; x < membership->cml_count; x++) {
 		if (name && strcmp(membership->cml_members[x].cn_name, name))
 			continue;
-		txt_member_state(&membership->cml_members[x]);
+		txt_member_state(&membership->cml_members[x], buf);
  		ret = !(membership->cml_members[x].cn_member & FLAG_UP);
 	}
 
@@ -696,13 +828,15 @@
 
 
 int 
-txt_cluster_status(int qs, cluster_member_list_t *membership,
+txt_cluster_status(cman_cluster_t *ci,
+		   int qs, cluster_member_list_t *membership,
 		   rg_state_list_t *rgs, char *name, char *svcname, 
 		   int flags)
 {
 	int ret;
 	
 	if (!svcname && !name) {
+  		txt_cluster_info(ci);
 		txt_quorum_state(qs);
 		if (!membership) {
 			/* XXX Check for rgmanager?! */
@@ -717,12 +851,14 @@
  		return ret;
  	if (!name || (name && svcname))
  		ret = txt_rg_states(rgs, membership, svcname, flags);
+
  	return ret;
 }
 
 
 int
-xml_cluster_status(int qs, cluster_member_list_t *membership,
+xml_cluster_status(cman_cluster_t *ci, int qs,
+		   cluster_member_list_t *membership,
 		   rg_state_list_t *rgs, char *name, char *svcname,
 		   int flags)
 {
@@ -747,6 +883,8 @@
 	}
 
   	if (!svcname && !name)
+  		xml_cluster_info(ci);
+  	if (!svcname && !name)
   		xml_quorum_state(qs);
   	if (!svcname || (name && svcname)) 
  		ret1 = xml_member_states(membership, name);
@@ -841,7 +979,9 @@
 	int local_node_id;
 	int fast = 0;
 	int runtype = 0;
+	time_t now;
 	cman_handle_t ch = NULL;
+	cman_cluster_t ci;
 
 	int refresh_sec = 0, errors = 0;
 	int opt, xml = 0, flags = 0;
@@ -879,8 +1019,9 @@
 		case 's':
 			rg_name = optarg;
 			if (!strchr(rg_name,':')) {
+				memset(real_rg_name, 0, sizeof(real_rg_name));
 				snprintf(real_rg_name,
-					 sizeof(real_rg_name),
+					 sizeof(real_rg_name)-1,
 					 "service:%s", rg_name);
 				rg_name = real_rg_name;
 			}
@@ -920,7 +1061,7 @@
 	/* Connect & grab all our info */
 	ch = cman_init(NULL);
 	if (!ch) {
-		printf("CMAN is not running.\n");
+		perror("Could not connect to CMAN");
 		return 1;
 	}
 
@@ -953,6 +1094,16 @@
 	signal(SIGINT, term_handler);
 	signal(SIGTERM, term_handler);
 
+	if (isatty(STDOUT_FILENO)) {
+		stdout_is_tty = 1;
+		setupterm((char *) 0, STDOUT_FILENO, (int *) 0);
+		dimx = tigetnum("cols");
+		dimy = tigetnum("lines");
+	}
+
+	memset(&ci, 0, sizeof(ci));
+	cman_get_cluster(ch, &ci);
+
 	while (1) {
 		qs = cman_is_quorate(ch);
 		membership = build_member_list(ch, &local_node_id);
@@ -964,16 +1115,16 @@
 		}
 
 		if (refresh_sec) {
-			setupterm((char *) 0, STDOUT_FILENO, (int *) 0);
 			tputs(clear_screen, lines > 0 ? lines : 1, putchar);
+			now = time(NULL);
 		}
 
 		if (xml)
-			ret = xml_cluster_status(qs, membership, rgs,
+			ret = xml_cluster_status(&ci, qs, membership, rgs,
 						 member_name, rg_name,
 						 flags);
 		else
-			ret = txt_cluster_status(qs, membership, rgs,
+			ret = txt_cluster_status(&ci, qs, membership, rgs,
 						 member_name, rg_name,
 						 flags);
 
@@ -990,5 +1141,6 @@
 
 cleanup:
 	cman_finish(ch);
+
 	return ret;
 }



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-09-19 10:56 pcaulfield
  0 siblings, 0 replies; 23+ messages in thread
From: pcaulfield @ 2007-09-19 10:56 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	pcaulfield at sourceware.org	2007-09-19 10:56:08

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix type-punned pointer warnings

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.34&r2=1.35

--- cluster/rgmanager/src/utils/clustat.c	2007/08/22 08:58:47	1.34
+++ cluster/rgmanager/src/utils/clustat.c	2007/09/19 10:56:08	1.35
@@ -446,6 +446,7 @@
 _txt_rg_state_v(rg_state_t *rs, cluster_member_list_t *members, int flags)
 {
 	char flags_string[255] = "";
+	time_t transtime = rs->rs_transition;
 
 	rg_flags_str(flags_string, sizeof(flags_string), rs->rs_flags, ", ");
 
@@ -463,7 +464,7 @@
 	printf("  Last Owner      : %s\n",
 	       my_memb_id_to_name(members, rs->rs_last_owner));
 	printf("  Last Transition : %s\n",
-	       ctime((time_t *)(&rs->rs_transition)));
+	       ctime(&transtime));
 }
 
 
@@ -482,10 +483,11 @@
 {
 	char time_str[32];
 	char flags_string[255] = "";
+	time_t transtime = rs->rs_transition;
 	int x;
 
 	/* Chop off newlines */
-	ctime_r((time_t *)&rs->rs_transition, time_str);
+	ctime_r((time_t *)&transtime, time_str);
 	for (x = 0; time_str[x]; x++) {
 		if (time_str[x] < 32) {
 			time_str[x] = 0;



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-02-06 20:22 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-02-06 20:22 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	STABLE
Changes by:	lhh at sourceware.org	2007-02-06 20:22:46

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Don't query rgmanager if the user only wants a node state; also fix 227507

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=STABLE&r1=1.5.2.3.6.12&r2=1.5.2.3.6.13

--- cluster/rgmanager/src/utils/clustat.c	2007/01/29 19:40:38	1.5.2.3.6.12
+++ cluster/rgmanager/src/utils/clustat.c	2007/02/06 20:22:46	1.5.2.3.6.13
@@ -398,7 +398,7 @@
 
 int
 xml_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members,
-	      char *svcname)
+	      char *svcname, int flags)
 {
 	int x;
 	int ret = 0;
@@ -412,6 +412,7 @@
 		if (svcname &&
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
+		xml_rg_state(&rgl->rgl_states[x], members, flags);
 		if (svcname) {
 			switch (rgl->rgl_states[x].rs_state) {
 			case RG_STATE_STARTING:
@@ -592,7 +593,7 @@
 	
 	if (rgs &&
 	    (!name || (name && svcname)))
-		ret2 = xml_rg_states(rgs, membership, svcname);
+		ret2 = xml_rg_states(rgs, membership, svcname, flags);
 	printf("</clustat>\n");
 	
 	if (name && ret1)
@@ -791,7 +792,8 @@
 		qs = clu_quorum_status(RG_SERVICE_GROUP);
 		membership = build_member_list(&local_node_id);
 		
-		rgs = rg_state_list(local_node_id, fast);
+		if (!member_name)
+			rgs = rg_state_list(local_node_id, fast);
 
 		if (refresh_sec) {
 			setupterm((char *) 0, STDOUT_FILENO, (int *) 0);



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-02-06 20:21 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-02-06 20:21 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-02-06 20:21:17

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Don't query rgmanager if the user only wants a node state

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.30&r2=1.31

--- cluster/rgmanager/src/utils/clustat.c	2007/01/29 19:42:18	1.30
+++ cluster/rgmanager/src/utils/clustat.c	2007/02/06 20:21:17	1.31
@@ -957,7 +957,8 @@
 		qs = cman_is_quorate(ch);
 		membership = build_member_list(ch, &local_node_id);
 		
-		rgs = rg_state_list(local_node_id, fast);
+		if (!member_name)
+			rgs = rg_state_list(local_node_id, fast);
 		if (rgs) {
 			flag_rgmanager_nodes(membership);
 		}



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-02-06 20:20 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-02-06 20:20 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2007-02-06 20:20:23

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Don't query rgmanager if the user only wants a node state

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.25.2.4&r2=1.25.2.5

--- cluster/rgmanager/src/utils/clustat.c	2007/01/29 19:41:25	1.25.2.4
+++ cluster/rgmanager/src/utils/clustat.c	2007/02/06 20:20:23	1.25.2.5
@@ -957,7 +957,8 @@
 		qs = cman_is_quorate(ch);
 		membership = build_member_list(ch, &local_node_id);
 		
-		rgs = rg_state_list(local_node_id, fast);
+		if (!member_name)
+			rgs = rg_state_list(local_node_id, fast);
 		if (rgs) {
 			flag_rgmanager_nodes(membership);
 		}



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-02-06 20:18 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-02-06 20:18 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL4
Changes by:	lhh at sourceware.org	2007-02-06 20:18:48

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Don't query rgmanager if the user only wants a node state

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.18&r2=1.5.2.19

--- cluster/rgmanager/src/utils/clustat.c	2007/02/06 19:54:51	1.5.2.18
+++ cluster/rgmanager/src/utils/clustat.c	2007/02/06 20:18:48	1.5.2.19
@@ -792,7 +792,8 @@
 		qs = clu_quorum_status(RG_SERVICE_GROUP);
 		membership = build_member_list(&local_node_id);
 		
-		rgs = rg_state_list(local_node_id, fast);
+		if (!member_name)
+			rgs = rg_state_list(local_node_id, fast);
 
 		if (refresh_sec) {
 			setupterm((char *) 0, STDOUT_FILENO, (int *) 0);



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-02-06 19:54 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-02-06 19:54 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL4
Changes by:	lhh at sourceware.org	2007-02-06 19:54:53

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix #227507 - missing output of service info in clustat -x

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.17&r2=1.5.2.18

--- cluster/rgmanager/src/utils/clustat.c	2007/01/29 19:40:11	1.5.2.17
+++ cluster/rgmanager/src/utils/clustat.c	2007/02/06 19:54:51	1.5.2.18
@@ -398,7 +398,7 @@
 
 int
 xml_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members,
-	      char *svcname)
+	      char *svcname, int flags)
 {
 	int x;
 	int ret = 0;
@@ -412,6 +412,7 @@
 		if (svcname &&
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
+		xml_rg_state(&rgl->rgl_states[x], members, flags);
 		if (svcname) {
 			switch (rgl->rgl_states[x].rs_state) {
 			case RG_STATE_STARTING:
@@ -592,7 +593,7 @@
 	
 	if (rgs &&
 	    (!name || (name && svcname)))
-		ret2 = xml_rg_states(rgs, membership, svcname);
+		ret2 = xml_rg_states(rgs, membership, svcname, flags);
 	printf("</clustat>\n");
 	
 	if (name && ret1)



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-01-29 19:42 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-01-29 19:42 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-01-29 19:42:18

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Add error reporting if msg_open fails; patch from Josef Whiter

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.29&r2=1.30

--- cluster/rgmanager/src/utils/clustat.c	2007/01/26 21:37:57	1.29
+++ cluster/rgmanager/src/utils/clustat.c	2007/01/29 19:42:18	1.30
@@ -54,8 +54,10 @@
 
 	struct timeval tv;
 
-	if (msg_open(MSG_SOCKET, 0, 0, &ctx, 10) < 0)
+	if (msg_open(MSG_SOCKET, 0, 0, &ctx, 10) < 0) {
+		perror("msg_open");
 		return;
+	}
 
 	msg_send_simple(&ctx, RG_STATUS_NODE, 0, 0);
 
@@ -145,6 +147,7 @@
 	struct timeval tv;
 
 	if (msg_open(MSG_SOCKET, 0, 0, &ctx, 10) < 0) {
+		perror("msg_open");
 		return NULL;
 	}
 



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-01-29 19:41 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-01-29 19:41 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2007-01-29 19:41:25

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Add error reporting if msg_open fails; patch from Josef Whiter

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.25.2.3&r2=1.25.2.4

--- cluster/rgmanager/src/utils/clustat.c	2007/01/26 20:41:41	1.25.2.3
+++ cluster/rgmanager/src/utils/clustat.c	2007/01/29 19:41:25	1.25.2.4
@@ -54,8 +54,10 @@
 
 	struct timeval tv;
 
-	if (msg_open(MSG_SOCKET, 0, 0, &ctx, 10) < 0)
+	if (msg_open(MSG_SOCKET, 0, 0, &ctx, 10) < 0) {
+		perror("msg_open");
 		return;
+	}
 
 	msg_send_simple(&ctx, RG_STATUS_NODE, 0, 0);
 
@@ -145,6 +147,7 @@
 	struct timeval tv;
 
 	if (msg_open(MSG_SOCKET, 0, 0, &ctx, 10) < 0) {
+		perror("msg_open");
 		return NULL;
 	}
 



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-01-29 19:40 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-01-29 19:40 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	STABLE
Changes by:	lhh at sourceware.org	2007-01-29 19:40:38

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Add error reporting if msg_open fails; patch from Josef Whiter

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=STABLE&r1=1.5.2.3.6.11&r2=1.5.2.3.6.12

--- cluster/rgmanager/src/utils/clustat.c	2007/01/26 21:06:01	1.5.2.3.6.11
+++ cluster/rgmanager/src/utils/clustat.c	2007/01/29 19:40:38	1.5.2.3.6.12
@@ -52,6 +52,7 @@
 
 	fd = msg_open(local_node_id, RG_PORT, RG_PURPOSE, 10);
 	if (fd == -1) {
+		perror("msg_open");
 		return NULL;
 	}
 



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-01-29 19:40 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-01-29 19:40 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL4
Changes by:	lhh at sourceware.org	2007-01-29 19:40:11

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Add error reporting if msg_open fails; patch from Josef Whiter

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.16&r2=1.5.2.17

--- cluster/rgmanager/src/utils/clustat.c	2007/01/26 21:02:28	1.5.2.16
+++ cluster/rgmanager/src/utils/clustat.c	2007/01/29 19:40:11	1.5.2.17
@@ -52,6 +52,7 @@
 
 	fd = msg_open(local_node_id, RG_PORT, RG_PURPOSE, 10);
 	if (fd == -1) {
+		perror("msg_open");
 		return NULL;
 	}
 



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-01-26 21:38 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-01-26 21:38 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-01-26 21:37:59

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	merge fixes from RHEL5 branch

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.28&r2=1.29

--- cluster/rgmanager/src/utils/clustat.c	2007/01/17 16:21:25	1.28
+++ cluster/rgmanager/src/utils/clustat.c	2007/01/26 21:37:57	1.29
@@ -20,6 +20,7 @@
 #define FLAG_LOCAL 0x2
 #define FLAG_RGMGR 0x4
 #define FLAG_NOCFG 0x8	/* Shouldn't happen */
+#define FLAG_QDISK 0x10
 
 #define RG_VERBOSE 0x1
 
@@ -342,8 +343,8 @@
 cluster_member_list_t *
 add_missing(cluster_member_list_t *all, cluster_member_list_t *these)
 {
-	int x, y;
-	cman_node_t *m, *new;
+	int x, y, addflag;
+	cman_node_t *m, *nn;
 
 	if (!these)
 		return all;
@@ -356,12 +357,8 @@
 				    these->cml_members[x].cn_name))
                         	m = &all->cml_members[y];
 		}
-
+        	
 		if (!m) {
-			printf("%s not found\n", these->cml_members[x].cn_name);
-			/* WTF? It's not in our config */
-			printf("realloc %d\n", (int)((all->cml_count+1) *
-			       sizeof(cman_node_t)));
 			all->cml_members = realloc(all->cml_members,
 						   (all->cml_count+1) *
 						   sizeof(cman_node_t));
@@ -370,15 +367,21 @@
 				exit(1);
 			}
 			
-			new = &all->cml_members[all->cml_count];
+			nn = &all->cml_members[all->cml_count];
 
-			memcpy(new, &these->cml_members[x],
+			memcpy(nn, &these->cml_members[x],
 			       sizeof(cman_node_t));
+			
+			if (nn->cn_nodeid == 0) { /* quorum disk? */
+				addflag = FLAG_QDISK;
+			} else {
+				addflag = FLAG_NOCFG;
+			}
 
-			if (new->cn_member) {
-				new->cn_member = FLAG_UP | FLAG_NOCFG;
+			if (nn->cn_member) {
+				nn->cn_member = FLAG_UP | addflag;
 			} else {
-				new->cn_member = FLAG_NOCFG;
+				nn->cn_member = addflag;
 			}
 			++all->cml_count;
 
@@ -612,9 +615,12 @@
 	
 	if (node->cn_member & FLAG_NOCFG)
 		printf(", Estranged");
-
+	
 	if (node->cn_member & FLAG_RGMGR)
 		printf(", rgmanager");
+	
+	if (node->cn_member & FLAG_QDISK)
+		printf(", Quorum Disk");
 
 	printf("\n");
 		
@@ -626,12 +632,13 @@
 xml_member_state(cman_node_t *node)
 {
 	printf("    <node name=\"%s\" state=\"%d\" local=\"%d\" "
-	       "estranged=\"%d\" rgmanager=\"%d\" nodeid=\"0x%08x\"/>\n",
+	       "estranged=\"%d\" rgmanager=\"%d\" qdisk=\"%d\" nodeid=\"0x%08x\"/>\n",
 	       node->cn_name,
 	       !!(node->cn_member & FLAG_UP),
 	       !!(node->cn_member & FLAG_LOCAL),
 	       !!(node->cn_member & FLAG_NOCFG),
 	       !!(node->cn_member & FLAG_RGMGR),
+	       !!(node->cn_member & FLAG_QDISK),
 	       (uint32_t)((node->cn_nodeid      )&0xffffffff));
 }
 



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-01-17 16:21 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-01-17 16:21 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-01-17 16:21:25

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix #222961 - required for Conga to work.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.27&r2=1.28

--- cluster/rgmanager/src/utils/clustat.c	2006/12/13 18:36:09	1.27
+++ cluster/rgmanager/src/utils/clustat.c	2007/01/17 16:21:25	1.28
@@ -531,7 +531,7 @@
 
 int
 xml_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members,
-	      char *svcname)
+	      char *svcname, int flags)
 {
 	int x;
 	int ret = 0;
@@ -545,6 +545,7 @@
 		if (svcname &&
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
+		xml_rg_state(&rgl->rgl_states[x], members, flags);
 		if (svcname) {
 			switch (rgl->rgl_states[x].rs_state) {
 			case RG_STATE_STARTING:
@@ -742,7 +743,7 @@
  	
   	if (rgs &&
   	    (!name || (name && svcname)))
- 		ret2 = xml_rg_states(rgs, membership, svcname);
+ 		ret2 = xml_rg_states(rgs, membership, svcname, flags);
   	printf("</clustat>\n");
  	
  	if (name && ret1)



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-01-17 16:20 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-01-17 16:20 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2007-01-17 16:20:29

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix #222961 - required for Conga to work.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.25.2.1&r2=1.25.2.2

--- cluster/rgmanager/src/utils/clustat.c	2006/12/13 18:38:41	1.25.2.1
+++ cluster/rgmanager/src/utils/clustat.c	2007/01/17 16:20:29	1.25.2.2
@@ -531,7 +531,7 @@
 
 int
 xml_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members,
-	      char *svcname)
+	      char *svcname, int flags)
 {
 	int x;
 	int ret = 0;
@@ -545,6 +545,7 @@
 		if (svcname &&
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
+		xml_rg_state(&rgl->rgl_states[x], members, flags);
 		if (svcname) {
 			switch (rgl->rgl_states[x].rs_state) {
 			case RG_STATE_STARTING:
@@ -742,7 +743,7 @@
  	
   	if (rgs &&
   	    (!name || (name && svcname)))
- 		ret2 = xml_rg_states(rgs, membership, svcname);
+ 		ret2 = xml_rg_states(rgs, membership, svcname, flags);
   	printf("</clustat>\n");
  	
  	if (name && ret1)



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2007-01-17 16:19 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2007-01-17 16:19 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL50
Changes by:	lhh at sourceware.org	2007-01-17 16:19:07

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix #222961 - required for Conga to work.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&only_with_tag=RHEL50&r1=1.25.4.1&r2=1.25.4.2

--- cluster/rgmanager/src/utils/clustat.c	2006/12/13 18:39:20	1.25.4.1
+++ cluster/rgmanager/src/utils/clustat.c	2007/01/17 16:19:07	1.25.4.2
@@ -531,7 +531,7 @@
 
 int
 xml_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members,
-	      char *svcname)
+	      char *svcname, int flags)
 {
 	int x;
 	int ret = 0;
@@ -545,6 +545,7 @@
 		if (svcname &&
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
+		xml_rg_state(&rgl->rgl_states[x], members, flags);
 		if (svcname) {
 			switch (rgl->rgl_states[x].rs_state) {
 			case RG_STATE_STARTING:
@@ -742,7 +743,7 @@
  	
   	if (rgs &&
   	    (!name || (name && svcname)))
- 		ret2 = xml_rg_states(rgs, membership, svcname);
+ 		ret2 = xml_rg_states(rgs, membership, svcname, flags);
   	printf("</clustat>\n");
  	
  	if (name && ret1)



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2006-12-13 18:36 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2006-12-13 18:36 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2006-12-13 18:36:09

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Fix #211468 - clustat always returns 0, but should give a nonzero code for non-running services.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.26&r2=1.27

--- cluster/rgmanager/src/utils/clustat.c	2006/12/13 17:12:02	1.26
+++ cluster/rgmanager/src/utils/clustat.c	2006/12/13 18:36:09	1.27
@@ -485,14 +485,17 @@
 }
 
 
-void
+int
 txt_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members, 
 	      char *svcname, int flags)
 {
-	int x;
+	int x, ret = 0;
 
 	if (!rgl || !members)
-		return;
+		return -1;
+
+	if (svcname)
+		ret = -1;
 
 	if (!(flags & RG_VERBOSE)) {
 		printf("  %-20.20s %-30.30s %-14.14s\n",
@@ -509,18 +512,32 @@
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
 		txt_rg_state(&rgl->rgl_states[x], members, flags);
+		if (svcname) {
+			switch (rgl->rgl_states[x].rs_state) {
+			case RG_STATE_STARTING:
+			case RG_STATE_STARTED:
+			case RG_STATE_STOPPING:
+				ret = 0;
+				break;
+			default:
+				ret = rgl->rgl_states[x].rs_state;
+			}
+		}
 	}
+	
+	return ret;
 }
 
 
-void
+int
 xml_rg_states(rg_state_list_t *rgl, cluster_member_list_t *members,
 	      char *svcname)
 {
 	int x;
+	int ret = 0;
 
 	if (!rgl || !members)
-		return;
+		return -1;
 
 	printf("  <groups>\n");
 
@@ -528,14 +545,23 @@
 		if (svcname &&
 		    strcmp(rgl->rgl_states[x].rs_name, svcname))
 			continue;
-		xml_rg_state(&rgl->rgl_states[x], members, 0);
+		if (svcname) {
+			switch (rgl->rgl_states[x].rs_state) {
+			case RG_STATE_STARTING:
+			case RG_STATE_STARTED:
+			case RG_STATE_STOPPING:
+				break;
+			default:
+				ret = rgl->rgl_states[x].rs_state;
+			}
+		}
 	}
 
 	printf("  </groups>\n");
+	return ret;
 }
 
 
-
 void
 txt_quorum_state(int qs)
 {
@@ -609,10 +635,15 @@
 }
 
 
-void
+int
 txt_member_states(cluster_member_list_t *membership, char *name)
 {
-	int x;
+	int x, ret = 0;
+
+  	if (!membership) {
+  		printf("Membership information not available\n");
+ 		return -1;
+  	}
 
 	printf("  %-34.34s %-4.4s %s\n", "Member Name", "ID", "Status");
 	printf("  %-34.34s %-4.4s %s\n", "------ ----", "----", "------");
@@ -621,35 +652,45 @@
 		if (name && strcmp(membership->cml_members[x].cn_name, name))
 			continue;
 		txt_member_state(&membership->cml_members[x]);
+ 		ret = !(membership->cml_members[x].cn_member & FLAG_UP);
 	}
 
 	printf("\n");
+	return ret;
 }
 
 
-void
+int
 xml_member_states(cluster_member_list_t *membership, char *name)
 {
-	int x;
+	int x, ret = 0;
 
-	if (!membership)
-		return;
+	if (!membership) {
+		printf("  <nodes/>\n");
+		return -1;
+	}
 
 	printf("  <nodes>\n");
 	for (x = 0; x < membership->cml_count; x++) {
 		if (name && strcmp(membership->cml_members[x].cn_name, name))
 			continue;
 		xml_member_state(&membership->cml_members[x]);
+		if (name)
+			ret = !(membership->cml_members[x].cn_member & FLAG_UP);
 	}
 	printf("  </nodes>\n");
+	
+	return ret;
 }
 
 
-void
+int 
 txt_cluster_status(int qs, cluster_member_list_t *membership,
 		   rg_state_list_t *rgs, char *name, char *svcname, 
 		   int flags)
 {
+	int ret;
+	
 	if (!svcname && !name) {
 		txt_quorum_state(qs);
 		if (!membership) {
@@ -659,18 +700,22 @@
 		}
 	}
 
-	if (!svcname || (name && svcname))
-		txt_member_states(membership, name);
-	if (!name || (name && svcname))
-		txt_rg_states(rgs, membership, svcname, flags);
+  	if (!svcname || (name && svcname))
+ 		ret = txt_member_states(membership, name);
+ 	if (name && !svcname)
+ 		return ret;
+ 	if (!name || (name && svcname))
+ 		ret = txt_rg_states(rgs, membership, svcname, flags);
+ 	return ret;
 }
 
 
-void
+int
 xml_cluster_status(int qs, cluster_member_list_t *membership,
 		   rg_state_list_t *rgs, char *name, char *svcname,
 		   int flags)
 {
+ 	int ret1 = 0, ret2 = -1;
 	int x;
 
 	printf("<?xml version=\"1.0\"?>\n");
@@ -690,36 +735,24 @@
 		}
 	}
 
-	if (!svcname && !name)
-		xml_quorum_state(qs);
-	if (!svcname || (name && svcname)) 
-		xml_member_states(membership, name);
-	if (rgs &&
-	    (!name || (name && svcname)))
-		xml_rg_states(rgs, membership, svcname);
-	printf("</clustat>\n");
+  	if (!svcname && !name)
+  		xml_quorum_state(qs);
+  	if (!svcname || (name && svcname)) 
+ 		ret1 = xml_member_states(membership, name);
+ 	
+  	if (rgs &&
+  	    (!name || (name && svcname)))
+ 		ret2 = xml_rg_states(rgs, membership, svcname);
+  	printf("</clustat>\n");
+ 	
+ 	if (name && ret1)
+ 		return ret1;
+ 	if (svcname && ret2)
+ 		return ret2;
+ 	return 0;
 }
 
 
-void
-dump_node(cman_node_t *node)
-{
-	printf("Node %s state %02x\n", node->cn_name, node->cn_member);
-}
-
-
-void 
-dump_nodes(cluster_member_list_t *nodes)
-{
-	int x;
-
-	for (x=0; x<nodes->cml_count; x++) {
-		dump_node(&nodes->cml_members[x]);
-	}
-}
-
-
-
 cluster_member_list_t *
 build_member_list(cman_handle_t ch, int *lid)
 {
@@ -924,11 +957,13 @@
 		}
 
 		if (xml)
-			xml_cluster_status(qs, membership, rgs, member_name,
-					   rg_name,flags);
+			ret = xml_cluster_status(qs, membership, rgs,
+						 member_name, rg_name,
+						 flags);
 		else
-			txt_cluster_status(qs, membership, rgs, member_name,
-					   rg_name,flags);
+			ret = txt_cluster_status(qs, membership, rgs,
+						 member_name, rg_name,
+						 flags);
 
 		if (membership)
 			free_member_list(membership);



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2006-10-12 22:07 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2006-10-12 22:07 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2006-10-12 22:07:57

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Ancillary patch to fix 202492 and actually add back groupmember attr, not just rgmanager (per-node) attr

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.24&r2=1.25

--- cluster/rgmanager/src/utils/clustat.c	2006/10/06 21:22:28	1.24
+++ cluster/rgmanager/src/utils/clustat.c	2006/10/12 22:07:57	1.25
@@ -549,13 +549,20 @@
 void
 xml_quorum_state(int qs)
 {
+	/* XXX output groupmember attr (carry over from RHCS4) */
 	printf("  <quorum ");
 
-	if (qs) {
-		printf("quorate=\"1\"/>");
+	if (qs & FLAG_UP) {
+		printf("quorate=\"1\"");
+	} else {
+		printf("quorate=\"0\"\n");
+	}
+	if (qs & FLAG_RGMGR) {
+		printf(" groupmember=\"1\"");
 	} else {
-		printf("quorate=\"0\"/>\n");
+		printf(" groupmember=\"0\"");
 	}
+	printf("/>\n");
 }
 
 
@@ -661,9 +668,25 @@
 		   rg_state_list_t *rgs, char *name, char *svcname,
 		   int flags)
 {
+	int x;
+
 	printf("<?xml version=\"1.0\"?>\n");
 	printf("<clustat version=\"4.1.1\">\n");
 
+	if (qs) {
+		qs = FLAG_UP;
+		if (membership) {
+			for (x = 0; x < membership->cml_count; x++) {
+				if ((membership->cml_members[x].cn_member &
+				     (FLAG_LOCAL|FLAG_RGMGR)) ==
+				     (FLAG_LOCAL|FLAG_RGMGR)) {
+					qs |= FLAG_RGMGR;
+					break;
+				}
+			}
+		}
+	}
+
 	if (!svcname && !name)
 		xml_quorum_state(qs);
 	if (!svcname || (name && svcname)) 
@@ -722,6 +745,11 @@
 		all = part;
 	}
 
+	if (!all) {
+		*lid = 0;
+		return NULL;
+	}
+
 	/* Grab the local node ID and flag it from the list of reported
 	   online nodes */
 	*lid = get_my_nodeid(ch);
@@ -844,6 +872,10 @@
 
 	/* Connect & grab all our info */
 	ch = cman_init(NULL);
+	if (!ch) {
+		printf("CMAN is not running.\n");
+		return 1;
+	}
 
 	switch(runtype) {
 	case QSTAT_ONLY:



^ permalink raw reply	[flat|nested] 23+ messages in thread
* [Cluster-devel] cluster/rgmanager/src/utils clustat.c
@ 2006-09-27 16:43 lhh
  0 siblings, 0 replies; 23+ messages in thread
From: lhh @ 2006-09-27 16:43 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2006-09-27 16:43:39

Modified files:
	rgmanager/src/utils: clustat.c 

Log message:
	Clean up build

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clustat.c.diff?cvsroot=cluster&r1=1.22&r2=1.23

--- cluster/rgmanager/src/utils/clustat.c	2006/09/27 16:32:13	1.22
+++ cluster/rgmanager/src/utils/clustat.c	2006/09/27 16:43:39	1.23
@@ -716,8 +716,11 @@
 		case 's':
 			rg_name = optarg;
 			if (!strchr(rg_name,':')) {
-				snprintf(real_rg_name, , sizeof(real_rg_name), "service:%s", rg_name);
+				snprintf(real_rg_name,
+					 sizeof(real_rg_name),
+					 "service:%s", rg_name);
 				rg_name = real_rg_name;
+			}
 			break;
 
 		case 'x':



^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2007-12-10 18:24 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-13 17:12 [Cluster-devel] cluster/rgmanager/src/utils clustat.c lhh
  -- strict thread matches above, loose matches on Subject: below --
2007-12-10 18:24 lhh
2007-12-10 18:11 lhh
2007-12-06 17:52 lhh
2007-12-06 17:47 lhh
2007-11-30 19:47 lhh
2007-09-19 10:56 pcaulfield
2007-02-06 20:22 lhh
2007-02-06 20:21 lhh
2007-02-06 20:20 lhh
2007-02-06 20:18 lhh
2007-02-06 19:54 lhh
2007-01-29 19:42 lhh
2007-01-29 19:41 lhh
2007-01-29 19:40 lhh
2007-01-29 19:40 lhh
2007-01-26 21:38 lhh
2007-01-17 16:21 lhh
2007-01-17 16:20 lhh
2007-01-17 16:19 lhh
2006-12-13 18:36 lhh
2006-10-12 22:07 lhh
2006-09-27 16:43 lhh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).