cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
* [Cluster-devel] cluster/group/daemon main.c
@ 2007-01-11 17:59 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2007-01-11 17:59 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	teigland at sourceware.org	2007-01-11 17:59:25

Modified files:
	group/daemon   : main.c 

Log message:
	Move memset(0) into the for loop so we're clearing the data buffer
	each time through.  We were seeing some bogus data from group_tool -v.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.51.2.5&r2=1.51.2.6

--- cluster/group/daemon/main.c	2006/12/13 19:05:46	1.51.2.5
+++ cluster/group/daemon/main.c	2007/01/11 17:59:25	1.51.2.6
@@ -502,10 +502,10 @@
 	int rv, count = 0, max = atoi(argv[1]);
 
 	data = malloc(sizeof(group_data_t));
-	memset(data, 0, sizeof(group_data_t));
 	count = 0;
 
 	list_for_each_entry(g, &gd_groups, list) {
+		memset(data, 0, sizeof(group_data_t));
 		copy_group_data(g, data);
 		rv = do_write(client[ci].fd, data, sizeof(group_data_t));
 		if (rv < 0) {



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2007-01-11 17:59 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2007-01-11 17:59 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2007-01-11 17:59:00

Modified files:
	group/daemon   : main.c 

Log message:
	Move memset(0) into the for loop so we're clearing the data buffer
	each time through.  We were seeing some bogus data from group_tool -v.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.56&r2=1.57

--- cluster/group/daemon/main.c	2006/12/13 19:04:53	1.56
+++ cluster/group/daemon/main.c	2007/01/11 17:59:00	1.57
@@ -502,10 +502,10 @@
 	int rv, count = 0, max = atoi(argv[1]);
 
 	data = malloc(sizeof(group_data_t));
-	memset(data, 0, sizeof(group_data_t));
 	count = 0;
 
 	list_for_each_entry(g, &gd_groups, list) {
+		memset(data, 0, sizeof(group_data_t));
 		copy_group_data(g, data);
 		rv = do_write(client[ci].fd, data, sizeof(group_data_t));
 		if (rv < 0) {



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-12-13 19:05 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-12-13 19:05 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL50
Changes by:	teigland at sourceware.org	2006-12-13 19:05:52

Modified files:
	group/daemon   : main.c 

Log message:
	groupd's function that returns info for group status queries was
	mistakenly setting the "member" status to 0 when a node was leaving.
	This led fence_tool to believe that the local node was no longer
	a member (i.e. had finished leaving) when in fact the leave wasn't
	complete yet.
	bz 219385

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&only_with_tag=RHEL50&r1=1.51.4.4&r2=1.51.4.5

--- cluster/group/daemon/main.c	2006/12/01 15:25:30	1.51.4.4
+++ cluster/group/daemon/main.c	2006/12/13 19:05:52	1.51.4.5
@@ -489,7 +489,8 @@
 	/* we're in the member list but are still joining */
 	if (data->member) {
 		ev = g->app->current_event;
-		if (ev && is_our_join(ev))
+		if (ev && is_our_join(ev) &&
+		    (ev->state <= EST_JOIN_ALL_STARTED))
 			data->member = 0;
 	}
 }



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-12-13 19:05 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-12-13 19:05 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	teigland at sourceware.org	2006-12-13 19:05:46

Modified files:
	group/daemon   : main.c 

Log message:
	groupd's function that returns info for group status queries was
	mistakenly setting the "member" status to 0 when a node was leaving.
	This led fence_tool to believe that the local node was no longer
	a member (i.e. had finished leaving) when in fact the leave wasn't
	complete yet.
	bz 219385

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.51.2.4&r2=1.51.2.5

--- cluster/group/daemon/main.c	2006/12/01 15:25:18	1.51.2.4
+++ cluster/group/daemon/main.c	2006/12/13 19:05:46	1.51.2.5
@@ -489,7 +489,8 @@
 	/* we're in the member list but are still joining */
 	if (data->member) {
 		ev = g->app->current_event;
-		if (ev && is_our_join(ev))
+		if (ev && is_our_join(ev) &&
+		    (ev->state <= EST_JOIN_ALL_STARTED))
 			data->member = 0;
 	}
 }



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-12-13 19:04 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-12-13 19:04 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-12-13 19:04:53

Modified files:
	group/daemon   : main.c 

Log message:
	groupd's function that returns info for group status queries was
	mistakenly setting the "member" status to 0 when a node was leaving.
	This led fence_tool to believe that the local node was no longer
	a member (i.e. had finished leaving) when in fact the leave wasn't
	complete yet.
	bz 219385

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.55&r2=1.56

--- cluster/group/daemon/main.c	2006/12/01 15:24:48	1.55
+++ cluster/group/daemon/main.c	2006/12/13 19:04:53	1.56
@@ -489,7 +489,8 @@
 	/* we're in the member list but are still joining */
 	if (data->member) {
 		ev = g->app->current_event;
-		if (ev && is_our_join(ev))
+		if (ev && is_our_join(ev) &&
+		    (ev->state <= EST_JOIN_ALL_STARTED))
 			data->member = 0;
 	}
 }



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-12-01 15:25 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-12-01 15:25 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL50
Changes by:	teigland at sourceware.org	2006-12-01 15:25:30

Modified files:
	group/daemon   : main.c 

Log message:
	group_tool dump doesn't handle partial reads/writes,
	now we always dump entire fixed size debug buffer
	bz 214540

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&only_with_tag=RHEL50&r1=1.51.4.3&r2=1.51.4.4

--- cluster/group/daemon/main.c	2006/11/20 22:44:31	1.51.4.3
+++ cluster/group/daemon/main.c	2006/12/01 15:25:30	1.51.4.4
@@ -551,25 +551,24 @@
 
 static int do_dump(int fd)
 {
-	int rv, len;
+	int rv, len = DUMP_SIZE;
 
 	if (dump_wrap) {
 		len = DUMP_SIZE - dump_point;
-		rv = write(fd, dump_buf + dump_point, len);
-		if (rv != len)
-			log_print("write error %d errno %d", rv, errno);
-	}
-	len = dump_point;
-
-	rv = write(fd, dump_buf, len);
-	if (rv != len)
-		log_print("write error %d errno %d", rv, errno);
+		rv = do_write(fd, dump_buf + dump_point, len);
+		if (rv < 0)
+			log_print("dump write error %d errno %d", rv, errno);
+		len = dump_point;
+	}
+
+	rv = do_write(fd, dump_buf, len);
+	if (rv < 0)
+		log_print("dump write error %d errno %d", rv, errno);
 	return 0;
 }
 
 static int do_log(int fd, const char *comment)
 {
-
 	log_print("%s", comment);
 	return 0;
 }
@@ -673,7 +672,7 @@
 		break;
 
 	default:
-		log_print("unknown action %d client %d bytes %d", act, ci, rv);
+		log_print("unknown action %d client %d", act, ci);
 		log_print("invalid message: \"%s\"", buf);
 	}
 }



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-12-01 15:25 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-12-01 15:25 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	teigland at sourceware.org	2006-12-01 15:25:19

Modified files:
	group/daemon   : main.c 

Log message:
	group_tool dump doesn't handle partial reads/writes,
	now we always dump entire fixed size debug buffer
	bz 214540

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.51.2.3&r2=1.51.2.4

--- cluster/group/daemon/main.c	2006/11/17 16:28:20	1.51.2.3
+++ cluster/group/daemon/main.c	2006/12/01 15:25:18	1.51.2.4
@@ -551,25 +551,24 @@
 
 static int do_dump(int fd)
 {
-	int rv, len;
+	int rv, len = DUMP_SIZE;
 
 	if (dump_wrap) {
 		len = DUMP_SIZE - dump_point;
-		rv = write(fd, dump_buf + dump_point, len);
-		if (rv != len)
-			log_print("write error %d errno %d", rv, errno);
-	}
-	len = dump_point;
-
-	rv = write(fd, dump_buf, len);
-	if (rv != len)
-		log_print("write error %d errno %d", rv, errno);
+		rv = do_write(fd, dump_buf + dump_point, len);
+		if (rv < 0)
+			log_print("dump write error %d errno %d", rv, errno);
+		len = dump_point;
+	}
+
+	rv = do_write(fd, dump_buf, len);
+	if (rv < 0)
+		log_print("dump write error %d errno %d", rv, errno);
 	return 0;
 }
 
 static int do_log(int fd, const char *comment)
 {
-
 	log_print("%s", comment);
 	return 0;
 }
@@ -673,7 +672,7 @@
 		break;
 
 	default:
-		log_print("unknown action %d client %d bytes %d", act, ci, rv);
+		log_print("unknown action %d client %d", act, ci);
 		log_print("invalid message: \"%s\"", buf);
 	}
 }



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-12-01 15:24 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-12-01 15:24 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-12-01 15:24:49

Modified files:
	group/daemon   : main.c 

Log message:
	group_tool dump doesn't handle partial reads/writes,
	now we always dump entire fixed size debug buffer
	bz 214540

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.54&r2=1.55

--- cluster/group/daemon/main.c	2006/11/17 16:26:34	1.54
+++ cluster/group/daemon/main.c	2006/12/01 15:24:48	1.55
@@ -551,25 +551,24 @@
 
 static int do_dump(int fd)
 {
-	int rv, len;
+	int rv, len = DUMP_SIZE;
 
 	if (dump_wrap) {
 		len = DUMP_SIZE - dump_point;
-		rv = write(fd, dump_buf + dump_point, len);
-		if (rv != len)
-			log_print("write error %d errno %d", rv, errno);
-	}
-	len = dump_point;
-
-	rv = write(fd, dump_buf, len);
-	if (rv != len)
-		log_print("write error %d errno %d", rv, errno);
+		rv = do_write(fd, dump_buf + dump_point, len);
+		if (rv < 0)
+			log_print("dump write error %d errno %d", rv, errno);
+		len = dump_point;
+	}
+
+	rv = do_write(fd, dump_buf, len);
+	if (rv < 0)
+		log_print("dump write error %d errno %d", rv, errno);
 	return 0;
 }
 
 static int do_log(int fd, const char *comment)
 {
-
 	log_print("%s", comment);
 	return 0;
 }
@@ -673,7 +672,7 @@
 		break;
 
 	default:
-		log_print("unknown action %d client %d bytes %d", act, ci, rv);
+		log_print("unknown action %d client %d", act, ci);
 		log_print("invalid message: \"%s\"", buf);
 	}
 }



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-11-20 22:44 rpeterso
  0 siblings, 0 replies; 19+ messages in thread
From: rpeterso @ 2006-11-20 22:44 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL50
Changes by:	rpeterso at sourceware.org	2006-11-20 22:44:32

Modified files:
	group/daemon   : main.c 

Log message:
	if read() returns a non-EINTR error then consider the client dead

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&only_with_tag=RHEL50&r1=1.51.4.2&r2=1.51.4.3

--- cluster/group/daemon/main.c	2006/11/20 22:31:51	1.51.4.2
+++ cluster/group/daemon/main.c	2006/11/20 22:44:31	1.51.4.3
@@ -73,6 +73,8 @@
 			return -1;
 		if (rv == -1 && errno == EINTR)
 			continue;
+		if (rv == -1)
+			return -1;
 		off += rv;
 	}
 	return 0;



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-11-17 16:28 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-11-17 16:28 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	teigland at sourceware.org	2006-11-17 16:28:20

Modified files:
	group/daemon   : main.c 

Log message:
	if read() returns a non-EINTR error then consider the client dead

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.51.2.2&r2=1.51.2.3

--- cluster/group/daemon/main.c	2006/11/15 14:44:01	1.51.2.2
+++ cluster/group/daemon/main.c	2006/11/17 16:28:20	1.51.2.3
@@ -73,6 +73,8 @@
 			return -1;
 		if (rv == -1 && errno == EINTR)
 			continue;
+		if (rv == -1)
+			return -1;
 		off += rv;
 	}
 	return 0;



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-11-17 16:26 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-11-17 16:26 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-11-17 16:26:34

Modified files:
	group/daemon   : main.c 

Log message:
	if read() returns a non-EINTR error then shut down the client

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.53&r2=1.54

--- cluster/group/daemon/main.c	2006/11/15 14:35:05	1.53
+++ cluster/group/daemon/main.c	2006/11/17 16:26:34	1.54
@@ -73,6 +73,8 @@
 			return -1;
 		if (rv == -1 && errno == EINTR)
 			continue;
+		if (rv == -1)
+			return -1;
 		off += rv;
 	}
 	return 0;



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-11-15 14:35 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-11-15 14:35 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-11-15 14:35:05

Modified files:
	group/daemon   : main.c 

Log message:
	fix sched_priority from sdake

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.52&r2=1.53

--- cluster/group/daemon/main.c	2006/11/09 15:47:29	1.52
+++ cluster/group/daemon/main.c	2006/11/15 14:35:05	1.53
@@ -136,6 +136,8 @@
 	char *argv[4];
 	int status, rv = 0;
 
+	/* FIXME: ignore gfs/gfs2 nolock fs's */
+
 	rv += kernel_instance_count("/sys/kernel/dlm");
 	rv += kernel_instance_count("/sys/fs/gfs");
 	rv += kernel_instance_count("/sys/fs/gfs2");
@@ -907,7 +909,7 @@
 
 	rv = sched_get_priority_max(SCHED_RR);
 	if (rv != -1) {
-		sched_param.sched_priority = 2;
+		sched_param.sched_priority = rv;
 		rv = sched_setscheduler(0, SCHED_RR, &sched_param);
 		if (rv == -1)
 			log_print("could not set SCHED_RR priority %d err %d",



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-10-24 17:08 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-10-24 17:08 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-10-24 17:08:06

Modified files:
	group/daemon   : main.c 

Log message:
	recent commit fixing bz 210344 removed the memset so we're
	getting garbage back sometimes

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.50&r2=1.51

--- cluster/group/daemon/main.c	2006/10/21 17:15:12	1.50
+++ cluster/group/daemon/main.c	2006/10/24 17:08:06	1.51
@@ -493,7 +493,9 @@
 	int rv, count = 0, max = atoi(argv[1]);
 
 	data = malloc(sizeof(group_data_t));
+	memset(data, 0, sizeof(group_data_t));
 	count = 0;
+
 	list_for_each_entry(g, &gd_groups, list) {
 		copy_group_data(g, data);
 		rv = do_write(client[ci].fd, data, sizeof(group_data_t));



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-10-20 15:42 rpeterso
  0 siblings, 0 replies; 19+ messages in thread
From: rpeterso @ 2006-10-20 15:42 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	rpeterso at sourceware.org	2006-10-20 15:42:44

Modified files:
	group/daemon   : main.c 

Log message:
	Fix for Bugzilla Bug 211405: If groupd segfaults, dump the most
	recent log information.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.48&r2=1.49

--- cluster/group/daemon/main.c	2006/10/06 16:55:19	1.48
+++ cluster/group/daemon/main.c	2006/10/20 15:42:44	1.49
@@ -10,10 +10,14 @@
 *******************************************************************************
 ******************************************************************************/
 
+#include <signal.h>
+#include <time.h>
+
 #include "gd_internal.h"
 
 #define OPTION_STRING			"DhVv"
 #define LOCKFILE_NAME			"/var/run/groupd.pid"
+#define LOG_FILE				"/var/log/groupd.log"
 
 extern struct list_head recovery_sets;
 
@@ -541,19 +545,19 @@
 	return 0;
 }
 
-static int do_dump(int ci, int argc, char **argv)
+static int do_dump(int fd)
 {
 	int rv, len;
 
 	if (dump_wrap) {
 		len = DUMP_SIZE - dump_point;
-		rv = write(client[ci].fd, dump_buf + dump_point, len);
+		rv = write(fd, dump_buf + dump_point, len);
 		if (rv != len)
 			log_print("write error %d errno %d", rv, errno);
 	}
 	len = dump_point;
 
-	rv = write(client[ci].fd, dump_buf, len);
+	rv = write(fd, dump_buf, len);
 	if (rv != len)
 		log_print("write error %d errno %d", rv, errno);
 	return 0;
@@ -650,7 +654,7 @@
 		break;
 
 	case DO_DUMP:
-		do_dump(ci, argc, argv);
+		do_dump(client[ci].fd);
 		break;
 
 	default:
@@ -903,6 +907,30 @@
 	}
 }
 
+void bail_with_log(int sig)
+{
+	int fd;
+	time_t now;
+
+	unlink(LOG_FILE);
+	fd = creat(LOG_FILE, S_IRUSR | S_IWUSR);
+	if (fd > 0) {
+		char now_ascii[32];
+
+		do_dump(fd);
+		memset(now_ascii, 0, sizeof(now_ascii));
+		time(&now);
+		sprintf(now_ascii, "%ld", now);
+		write(fd, now_ascii, strlen(now_ascii));
+		write(fd, " groupd segfault log follows:\n", 30);
+		close(fd);
+	}
+	else
+		perror(LOG_FILE);
+	if (sig == SIGSEGV)
+		exit(0);
+}
+
 int main(int argc, char *argv[])
 {
 	prog_name = argv[0];
@@ -915,6 +943,8 @@
 
 	decode_arguments(argc, argv);
 
+	signal(SIGSEGV, bail_with_log);
+	signal(SIGUSR1, bail_with_log);
 	if (!groupd_debug_opt)
 		daemonize();
 



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-09-14 20:49 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-09-14 20:49 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-09-14 20:49:38

Modified files:
	group/daemon   : main.c 

Log message:
	handle short/interrupted writes/reads

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.42&r2=1.43

--- cluster/group/daemon/main.c	2006/09/12 21:57:05	1.42
+++ cluster/group/daemon/main.c	2006/09/14 20:49:38	1.43
@@ -38,6 +38,42 @@
 	void *deadfn;
 };
 
+static int do_write(int fd, void *buf, size_t count)
+{
+	int rv, off = 0;
+
+ retry:
+	rv = write(fd, buf + off, count);
+	if (rv == -1 && errno == EINTR)
+		goto retry;
+	if (rv < 0) {
+		log_print("write fd %d errno %d", fd, errno);
+		return rv;
+	}
+
+	if (rv != count) {
+		count -= rv;
+		off += rv;
+		goto retry;
+	}
+	return 0;
+}
+
+static int do_read(int fd, void *buf, size_t count)
+{
+	int rv, off = 0;
+
+	while (off < count) {
+		rv = read(fd, buf + off, count - off);
+		if (rv == 0)
+			return -1;
+		if (rv == -1 && errno == EINTR)
+			continue;
+		off += rv;
+	}
+	return 0;
+}
+
 /* Look for any instances of gfs or dlm in the kernel, if we find any, it
    means they're uncontrolled by us (via gfs_controld/dlm_controld/groupd).
    We need to be rebooted to clear out this uncontrolled kernel state.  Most
@@ -130,9 +166,9 @@
 
 	log_group(a->g, "action for app: %s", buf);
 
-	rv = write(client[a->client].fd, buf, GROUPD_MSGLEN);
-	if (rv != GROUPD_MSGLEN)
-		log_print("write error %d errno %d", rv, errno);
+	rv = do_write(client[a->client].fd, buf, GROUPD_MSGLEN);
+	if (rv < 0)
+		log_error(a->g, "app_action write error");
 }
 
 void app_deliver(app_t *a, struct save_msg *save)
@@ -154,9 +190,9 @@
 		  save->msg_long + sizeof(msg_t));
 	*/
 
-	rv = write(client[a->client].fd, buf, GROUPD_MSGLEN);
-	if (rv != GROUPD_MSGLEN)
-		log_print("write error %d errno %d", rv, errno);
+	rv = do_write(client[a->client].fd, buf, GROUPD_MSGLEN);
+	if (rv < 0)
+		log_error(a->g, "app_deliver write error");
 }
 
 void app_terminate(app_t *a)
@@ -325,7 +361,7 @@
 	if (!strncmp(act, "dump", 16))
 		return DO_DUMP;
 
-        return -1;
+	return -1;
 }
 
 static void client_alloc(void)
@@ -459,9 +495,9 @@
 		i++;
 	}
 
-	rv = write(client[ci].fd, data, len);
-	if (rv != len)
-		log_print("write error %d errno %d", rv, errno);
+	rv = do_write(client[ci].fd, data, len);
+	if (rv < 0)
+		log_print("do_get_groups write error");
 
 	free(data);
 	return 0;
@@ -487,9 +523,9 @@
 
 	copy_group_data(g, &data);
  out:
-	rv = write(client[ci].fd, &data, sizeof(data));
-	if (rv != sizeof(data))
-		log_print("write error %d errno %d", rv, errno);
+	rv = do_write(client[ci].fd, &data, sizeof(data));
+	if (rv < 0)
+		log_print("do_get_group write error");
 
 	return 0;
 }
@@ -548,14 +584,11 @@
 	memset(buf, 0, sizeof(buf));
 	memset(argv, 0, sizeof(char *) * MAXARGS);
 
-	rv = read(client[ci].fd, buf, GROUPD_MSGLEN);
-	if (!rv) {
-		client_dead(ci);
-		return;
-	}
-	if (rv != GROUPD_MSGLEN) {
+	rv = do_read(client[ci].fd, buf, GROUPD_MSGLEN);
+	if (rv < 0) {
 		log_print("client %d fd %d read error %d %d", ci,
 			  client[ci].fd, rv, errno);
+		client_dead(ci);
 		return;
 	}
 
@@ -577,7 +610,7 @@
 
 	case DO_LEAVE:
 		get_args(buf, &argc, argv, ' ', 2);
-	        do_leave(argv[1], client[ci].level);
+		do_leave(argv[1], client[ci].level);
 		break;
 
 	case DO_STOP_DONE:
@@ -789,9 +822,9 @@
 	printf("\n");
 	printf("Options:\n");
 	printf("\n");
-	printf("  -D               Enable debugging code and don't fork\n");
-	printf("  -h               Print this help, then exit\n");
-	printf("  -V               Print program version information, then exit\n");
+	printf("  -D	       Enable debugging code and don't fork\n");
+	printf("  -h	       Print this help, then exit\n");
+	printf("  -V	       Print program version information, then exit\n");
 }
 
 static void decode_arguments(int argc, char **argv)



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-07-13 18:21 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-07-13 18:21 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-07-13 18:21:36

Modified files:
	group/daemon   : main.c 

Log message:
	fix dump len so we don't complain

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.38&r2=1.39

--- cluster/group/daemon/main.c	2006/06/22 19:06:07	1.38
+++ cluster/group/daemon/main.c	2006/07/13 18:21:35	1.39
@@ -488,15 +488,15 @@
 
 static int do_dump(int ci, int argc, char **argv)
 {
-	int rv, len = DUMP_SIZE;
+	int rv, len;
 
 	if (dump_wrap) {
 		len = DUMP_SIZE - dump_point;
 		rv = write(client[ci].fd, dump_buf + dump_point, len);
 		if (rv != len)
 			log_print("write error %d errno %d", rv, errno);
-		len = dump_point;
 	}
+	len = dump_point;
 
 	rv = write(client[ci].fd, dump_buf, len);
 	if (rv != len)



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-06-22 19:06 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-06-22 19:06 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-06-22 19:06:07

Modified files:
	group/daemon   : main.c 

Log message:
	now that we copy out app member list for viewing, set the
	member count to that total instead of cpg member list total

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.37&r2=1.38

--- cluster/group/daemon/main.c	2006/06/21 20:43:54	1.37
+++ cluster/group/daemon/main.c	2006/06/22 19:06:07	1.38
@@ -401,7 +401,6 @@
 	strncpy(data->name, g->name, MAX_GROUP_NAME_LEN);
 	data->level = g->level;
 	data->id = g->global_id;
-	data->member_count = g->memb_count;
 
 	if (g->app && g->app->current_event) {
 		event_t *ev = g->app->current_event;
@@ -421,6 +420,7 @@
 		}
 	}
 
+	data->member_count = g->app->node_count;
 	list_for_each_entry(node, &g->app->nodes, list) {
 		data->members[i] = node->nodeid;
 		i++;



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-06-20 20:27 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-06-20 20:27 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-06-20 20:27:40

Modified files:
	group/daemon   : main.c 

Log message:
	openlog("groupd", LOG_PID, LOG_DAEMON) for syslog entries

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.35&r2=1.36

--- cluster/group/daemon/main.c	2006/06/20 20:26:08	1.35
+++ cluster/group/daemon/main.c	2006/06/20 20:27:40	1.36
@@ -765,6 +765,7 @@
 	close(0);
 	close(1);
 	close(2);
+	openlog("groupd", LOG_PID, LOG_DAEMON);
 
 	lockfile();
 }



^ permalink raw reply	[flat|nested] 19+ messages in thread
* [Cluster-devel] cluster/group/daemon main.c
@ 2006-06-14 21:38 teigland
  0 siblings, 0 replies; 19+ messages in thread
From: teigland @ 2006-06-14 21:38 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-06-14 21:38:14

Modified files:
	group/daemon   : main.c 

Log message:
	for group_tool query, fill in members list from app perspective,
	not cpg perspective

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/main.c.diff?cvsroot=cluster&r1=1.32&r2=1.33

--- cluster/group/daemon/main.c	2006/05/15 19:59:06	1.32
+++ cluster/group/daemon/main.c	2006/06/14 21:38:14	1.33
@@ -334,7 +334,7 @@
 		}
 	}
 
-	list_for_each_entry(node, &g->memb, list) {
+	list_for_each_entry(node, &g->app->nodes, list) {
 		data->members[i] = node->nodeid;
 		i++;
 	}



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

end of thread, other threads:[~2007-01-11 17:59 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-01-11 17:59 [Cluster-devel] cluster/group/daemon main.c teigland
  -- strict thread matches above, loose matches on Subject: below --
2007-01-11 17:59 teigland
2006-12-13 19:05 teigland
2006-12-13 19:05 teigland
2006-12-13 19:04 teigland
2006-12-01 15:25 teigland
2006-12-01 15:25 teigland
2006-12-01 15:24 teigland
2006-11-20 22:44 rpeterso
2006-11-17 16:28 teigland
2006-11-17 16:26 teigland
2006-11-15 14:35 teigland
2006-10-24 17:08 teigland
2006-10-20 15:42 rpeterso
2006-09-14 20:49 teigland
2006-07-13 18:21 teigland
2006-06-22 19:06 teigland
2006-06-20 20:27 teigland
2006-06-14 21:38 teigland

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).