[Cluster-devel] cluster/fence/fence_tool Makefile fence_tool.c
rpeterso at sourceware.org
rpeterso at sourceware.org
Wed Oct 4 19:16:52 UTC 2006
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: rpeterso at sourceware.org 2006-10-04 19:16:52
Modified files:
fence/fence_tool: Makefile fence_tool.c
Log message:
Add the "-w" (wait) and "-t" (timeout) parameters back in
to fence_tool.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fence_tool/Makefile.diff?cvsroot=cluster&r1=1.10&r2=1.11
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fence_tool/fence_tool.c.diff?cvsroot=cluster&r1=1.21&r2=1.22
--- cluster/fence/fence_tool/Makefile 2006/08/11 15:18:09 1.10
+++ cluster/fence/fence_tool/Makefile 2006/10/04 19:16:51 1.11
@@ -23,10 +23,10 @@
CFLAGS+= -O2 -D_FILE_OFFSET_BITS=64 -DFENCE_RELEASE_NAME=\"${RELEASE}\"
endif
-INCLUDE = -I${top_srcdir}/include -I${ccsincdir} -I${cmanincdir} -I${incdir} -I${top_srcdir}/config
+INCLUDE = -I${top_srcdir}/include -I${ccsincdir} -I${cmanincdir} -I${incdir} -I${top_srcdir}/config -I${top_srcdir}/../group/lib
-LDFLAGS+= -L${ccslibdir} -L${libdir} -L${top_srcdir}/../cman/lib -lcman
-LOADLIBES+= -lccs -lcman
+LDFLAGS+= -L${ccslibdir} -L${libdir} -L${top_srcdir}/../cman/lib -L${top_srcdir}/../group/lib
+LOADLIBES+= -lccs -lcman -lgroup
FENCE_TOOL_SRC = \
agent.c \
--- cluster/fence/fence_tool/fence_tool.c 2006/07/10 17:04:08 1.21
+++ cluster/fence/fence_tool/fence_tool.c 2006/10/04 19:16:51 1.22
@@ -29,13 +29,14 @@
#include "ccs.h"
#include "copyright.cf"
+#include "libgroup.h"
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
-#define OPTION_STRING ("Vhcj:f:")
+#define OPTION_STRING ("Vhcj:f:t:w")
#define FENCED_SOCK_PATH "fenced_socket"
#define MAXLINE 256
@@ -55,8 +56,22 @@
char *prog_name;
int operation;
+int child_wait = FALSE;
+int fenced_start_timeout = 30;
-int dispatch_fence_agent(int cd, char *victim, char *self);
+static int get_int_arg(char argopt, char *arg)
+{
+ char *tmp;
+ int val;
+ val = strtol(arg, &tmp, 10);
+ if (tmp == arg || tmp != arg + strlen(arg))
+ die("argument to %c (%s) is not an integer", argopt, arg);
+
+ if (val < 0)
+ die("argument to %c cannot be negative", argopt);
+
+ return val;
+}
static int check_mounted(void)
{
@@ -79,6 +94,7 @@
}
fclose(file);
+ return 0;
}
int fenced_connect(void)
@@ -105,6 +121,35 @@
return fd;
}
+static int we_are_in_fence_domain(void)
+{
+ group_data_t gdata;
+ int rv;
+
+ memset(&gdata, 0, sizeof(gdata));
+ rv = group_get_group(0, "default", &gdata);
+
+ if (rv || strcmp(gdata.client_name, "fence"))
+ return 0;
+
+ return gdata.member;
+}
+
+static int do_wait(void)
+{
+ int i;
+
+ for (i=0; !fenced_start_timeout || i < fenced_start_timeout; i++) {
+ if (we_are_in_fence_domain())
+ return 0;
+ if (!(i % 5))
+ printf("Waiting for fenced to join the fence group.\n");
+ sleep(1);
+ }
+ printf("Error joining the fence group.\n");
+ return -1;
+}
+
static int do_join(int argc, char *argv[])
{
int i, fd, rv;
@@ -130,8 +175,11 @@
memset(buf, 0, sizeof(buf));
rv = read(fd, buf, sizeof(buf));
-
/* printf("join result %d %s\n", rv, buf); */
+
+ if (child_wait)
+ do_wait();
+ close(fd);
return EXIT_SUCCESS;
}
@@ -146,7 +194,6 @@
check_mounted();
-
memset(buf, 0, sizeof(buf));
sprintf(buf, "leave default");
@@ -158,6 +205,7 @@
rv = read(fd, buf, sizeof(buf));
/* printf("leave result %d %s\n", rv, buf); */
+ close(fd);
return EXIT_SUCCESS;
}
@@ -182,6 +230,7 @@
printf("%s", buf);
}
+ close(fd);
return EXIT_SUCCESS;
}
@@ -197,8 +246,10 @@
printf(" wait Wait for node to be member of default fence domain\n");
printf("\n");
printf("Options:\n");
+ printf(" -w Wait for join to complete\n");
printf(" -V Print program version information, then exit\n");
printf(" -h Print this help, then exit\n");
+ printf(" -t Maximum time in seconds to wait\n");
printf("\n");
printf("Fenced options:\n");
printf(" these are passed on to fenced when it's started\n");
@@ -230,6 +281,10 @@
exit(EXIT_SUCCESS);
break;
+ case 'w':
+ child_wait = TRUE;
+ break;
+
case ':':
case '?':
fprintf(stderr, "Please use '-h' for usage.\n");
@@ -240,6 +295,10 @@
cont = FALSE;
break;
+ case 't':
+ fenced_start_timeout = get_int_arg(optchar, optarg);
+ break;
+
case 'c':
case 'j':
case 'f':
More information about the Cluster-devel
mailing list