[Cluster-devel] cluster/group/tool main.c
teigland at sourceware.org
teigland at sourceware.org
Fri Jul 14 18:57:25 UTC 2006
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: teigland at sourceware.org 2006-07-14 18:57:25
Modified files:
group/tool : main.c
Log message:
add option to dump debug messages from gfs_controld using
'group_tool dump gfs', 'group_tool dump' still dumps debug
messages from groupd.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/tool/main.c.diff?cvsroot=cluster&r1=1.16&r2=1.17
--- cluster/group/tool/main.c 2006/07/13 18:15:43 1.16
+++ cluster/group/tool/main.c 2006/07/14 18:57:25 1.17
@@ -28,8 +28,18 @@
#define MAX_GROUPS 64
#define OPTION_STRING "hVv"
+
+/* copied from cluster/group/gfs_controld/lock_dlm.h */
+#define LOCK_DLM_SOCK_PATH "gfs_controld_sock"
+
+/* needs to match the same in cluster/group/daemon/gd_internal.h and
+ cluster/group/gfs_controld/lock_dlm.h */
#define DUMP_SIZE (1024 * 1024)
+/* needs to match the same in cluster/group/gfs_controld/lock_dlm.h,
+ it's the message size that gfs_controld takes */
+#define MAXLINE 256
+
#define OP_LS 1
#define OP_DUMP 2
@@ -268,7 +278,7 @@
return 0;
}
-static int connect_groupd(void)
+static int connect_daemon(char *path)
{
struct sockaddr_un sun;
socklen_t addrlen;
@@ -280,7 +290,7 @@
memset(&sun, 0, sizeof(sun));
sun.sun_family = AF_UNIX;
- strcpy(&sun.sun_path[1], GROUPD_SOCK_PATH);
+ strcpy(&sun.sun_path[1], path);
addrlen = sizeof(sa_family_t) + strlen(sun.sun_path+1) + 1;
rv = connect(fd, (struct sockaddr *) &sun, addrlen);
@@ -292,11 +302,38 @@
return fd;
}
-int do_dump(int argc, char **argv)
+int do_dump(int argc, char **argv, int fd)
{
char inbuf[DUMP_SIZE];
char outbuf[GROUPD_MSGLEN];
- int rv, fd = connect_groupd();
+ int rv;
+
+ memset(inbuf, 0, sizeof(inbuf));
+ memset(outbuf, 0, sizeof(outbuf));
+
+ sprintf(outbuf, "dump");
+
+ rv = write(fd, outbuf, sizeof(outbuf));
+ if (rv != sizeof(outbuf)) {
+ printf("dump write error %d errno %d\n", rv, errno);;
+ return -1;
+ }
+
+ rv = read(fd, inbuf, sizeof(inbuf));
+ if (rv <= 0)
+ printf("dump read returned %d errno %d\n", rv, errno);
+ else
+ write(STDOUT_FILENO, inbuf, rv);
+
+ close(fd);
+ return 0;
+}
+
+int do_gfsdump(int argc, char **argv, int fd)
+{
+ char inbuf[DUMP_SIZE];
+ char outbuf[MAXLINE];
+ int rv;
memset(inbuf, 0, sizeof(inbuf));
memset(outbuf, 0, sizeof(outbuf));
@@ -321,14 +358,29 @@
int main(int argc, char **argv)
{
+ int fd;
+
prog_name = argv[0];
decode_arguments(argc, argv);
switch (operation) {
case OP_LS:
return do_ls(argc, argv);
+
case OP_DUMP:
- return do_dump(argc, argv);
+ if (opt_ind && opt_ind < argc) {
+ if (!strncmp(argv[opt_ind], "gfs", 3)) {
+ fd = connect_daemon(LOCK_DLM_SOCK_PATH);
+ if (fd < 0)
+ return -1;
+ return do_gfsdump(argc, argv, fd);
+ }
+ }
+
+ fd = connect_daemon(GROUPD_SOCK_PATH);
+ if (fd < 0)
+ break;
+ return do_dump(argc, argv, fd);
}
return 0;
More information about the Cluster-devel
mailing list