[Cluster-devel] cluster/fence/fenced fd.h main.c member_cman.c

teigland at sourceware.org teigland at sourceware.org
Tue Jul 25 20:05:53 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	teigland at sourceware.org	2006-07-25 20:05:52

Modified files:
	fence/fenced   : fd.h main.c member_cman.c 

Log message:
	keep 1MB circular buffer of debug messages that can be sent to a
	connected client

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/fd.h.diff?cvsroot=cluster&r1=1.22&r2=1.23
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/main.c.diff?cvsroot=cluster&r1=1.35&r2=1.36
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/member_cman.c.diff?cvsroot=cluster&r1=1.12&r2=1.13

--- cluster/fence/fenced/fd.h	2006/07/10 17:02:43	1.22
+++ cluster/fence/fenced/fd.h	2006/07/25 20:05:52	1.23
@@ -42,22 +42,27 @@
 #include "list.h"
 #include "libgroup.h"
 
-extern char			*prog_name;
-extern int			fenced_debug_opt;
-extern char			fenced_debug_buf[256];
-
 #define MAX_NODENAME_LEN	255   /* should match libcman.h */
 #define MAX_GROUPNAME_LEN	32    /* should match libgroup.h */
 #define MAX_NODES		256
 #define MAXARGS                 100  /* FIXME */
 #define MAXLINE                 256
 #define MAX_CLIENTS		5
+#define DUMP_SIZE               (1024 * 1024)
 
 #define DEFAULT_POST_JOIN_DELAY	6
 #define DEFAULT_POST_FAIL_DELAY	0
 #define DEFAULT_CLEAN_START	0
 #define FENCED_SOCK_PATH	"fenced_socket"
 
+extern char			*prog_name;
+extern int			daemon_debug_opt;
+extern char			daemon_debug_buf[256];
+extern char dump_buf[DUMP_SIZE];
+extern int dump_point;
+extern int dump_wrap;
+
+extern void daemon_dump_save(void);
 
 /* use this one before we fork into the background */
 #define die1(fmt, args...) \
@@ -100,16 +105,11 @@
   sleep(1); \
 }
 
-#define log_print(fmt, args...) \
-do { \
-	snprintf(fenced_debug_buf, 255, "%ld " fmt "\n", time(NULL), ##args); \
-	if (fenced_debug_opt) fprintf(stderr, "%s", fenced_debug_buf); \
-} while (0)
-
-/* FIXME: send down debug client connection */
 #define log_debug(fmt, args...) \
 do { \
-	log_print(fmt, ##args); \
+	snprintf(daemon_debug_buf, 255, "%ld " fmt "\n", time(NULL), ##args); \
+	if (daemon_debug_opt) fprintf(stderr, "%s", daemon_debug_buf); \
+	daemon_dump_save(); \
 } while (0)
 
 #define log_error(fmt, args...) \
--- cluster/fence/fenced/main.c	2006/03/23 17:05:25	1.35
+++ cluster/fence/fenced/main.c	2006/07/25 20:05:52	1.36
@@ -283,6 +283,24 @@
 		client[i].fd = -1;
 }
 
+static int do_dump(int ci)
+{
+	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_debug("write error %d errno %d", rv, errno);
+	}
+	len = dump_point;
+
+	rv = write(client[ci].fd, dump_buf, len);
+	if (rv != len)
+		log_debug("write error %d errno %d", rv, errno);
+	return 0;
+}
+
 static int client_process(int ci)
 {
 	char buf[MAXLINE], *argv[MAXARGS], *cmd, *name, out[MAXLINE];
@@ -312,15 +330,16 @@
 		rv = do_join(name);
 	else if (!strcmp(cmd, "leave"))
 		rv = do_leave(name);
-	else
+	else if (!strcmp(cmd, "dump")) {
+		do_dump(ci);
+		return 0;
+	} else
 		rv = -EINVAL;
 
 	sprintf(out, "%d", rv);
 	rv = write(client[ci].fd, out, MAXLINE);
 
-	/* monitor: set var to cause log_debug messages to be
-	   sent down client socket
-           exit: cause fenced loop to exit */
+	/* exit: cause fenced loop to exit */
 
 	return rv;
 }
@@ -511,7 +530,7 @@
 			break;
 
 		case 'D':
-			fenced_debug_opt = TRUE;
+			daemon_debug_opt = TRUE;
 			break;
 
 		case 'h':
@@ -558,7 +577,7 @@
 	INIT_LIST_HEAD(&domains);
 	client_init();
 
-	if (!fenced_debug_opt) {
+	if (!daemon_debug_opt) {
 		pid_t pid = fork();
 		if (pid < 0) {
 			perror("main: cannot fork");
@@ -584,7 +603,26 @@
 	return error;
 }
 
+void daemon_dump_save(void)
+{
+	int len, i;
+
+	len = strlen(daemon_debug_buf);
+
+	for (i = 0; i < len; i++) {
+		dump_buf[dump_point++] = daemon_debug_buf[i];
+
+		if (dump_point == DUMP_SIZE) {
+			dump_point = 0;
+			dump_wrap = 1;
+		}
+	}
+}
+
 char *prog_name;
-int fenced_debug_opt;
-char fenced_debug_buf[256];
+int daemon_debug_opt;
+char daemon_debug_buf[256];
+char dump_buf[DUMP_SIZE];
+int dump_point;
+int dump_wrap;
 
--- cluster/fence/fenced/member_cman.c	2006/06/30 15:38:39	1.12
+++ cluster/fence/fenced/member_cman.c	2006/07/25 20:05:52	1.13
@@ -87,7 +87,7 @@
 
 	rv = cman_get_nodes(ch, MAX_NODES, &cman_node_count, cman_nodes);
 	if (rv < 0)
-		log_print("cman_get_nodes error %d %d", rv, errno);
+		log_error("cman_get_nodes error %d %d", rv, errno);
 }
 
 static void process_cman_callback(void)




More information about the Cluster-devel mailing list