Hi,
I setup glue + corosync + pacemaker. I have 3 nodes or more.
I configure STONITH plugin with ibmrsa-telnet and meatware.
When all plugins fail, action as follows, right?
1) ibmrsa-telnet -> fail
2) meatware -> fail
3) remote fencing (ibmrsa-tenlet and meatware) -> timeout
4) return 1)
in this case, the operator run "meatclient" after intervention(reset node).
"meatclient" succeeds only when plugin "meatware" is executing.
So, the operator have to always watch the logfile while STONITH is executing.
I think this operation is not simple for the operator.
Then, I want to add the option to "meatcleint" for waits next result of
"meatware".
By way of trial, I made patch in glue (changeset:3297e5e11428).
I would like to hear any opinion.
Regards,
Yoshihiko SATO
diff -r 3297e5e11428 lib/stonith/meatclient.c
--- a/lib/stonith/meatclient.c Thu Nov 12 13:50:04 2009 +0100
+++ b/lib/stonith/meatclient.c Fri Nov 13 17:24:31 2009 +0900
@@ -37,14 +37,14 @@
#include <stonith/stonith.h>
#include <glib.h>
-#define OPTIONS "c:"
+#define OPTIONS "c:w:"
void usage(const char * cmd);
void
usage(const char * cmd)
{
- fprintf(stderr, "usage: %s [-c node]\n", cmd);
+ fprintf(stderr, "usage: %s [-c node]|[-w node]\n", cmd);
exit(S_INVAL);
}
@@ -59,6 +59,7 @@
meatware.c as well */
char * opthost = NULL;
int clearhost = 0;
+ int waitmode = 0;
int c, argcount;
int errors = 0;
@@ -74,6 +75,9 @@
case 'c': opthost = optarg;
++clearhost;
break;
+ case 'w': opthost = optarg;
+ ++waitmode;
+ break;
default: ++errors;
break;
}
@@ -135,6 +139,36 @@
}
printf("Meatware_client: reset confirmed.\n");
+ } else
+ if (waitmode) {
+ int rc, fd;
+
+ char line[256];
+ char meatpipe[256];
+
+ snprintf(meatpipe, 256, "%s.%s", meatpipe_pr, opthost);
+
+ while (1) {
+ fd = open(meatpipe, O_WRONLY | O_NONBLOCK);
+ if (fd < 0) {
+ if (errno != ENOENT && errno != ENXIO) {
+ snprintf(line, sizeof(line)
+ , "Meatware_IPC failed: %s. [%d]", meatpipe, errno);
+ perror(line);
+ }
+ sleep(1);
+ } else {
+ sprintf(line, "meatware reply %s", opthost);
+ rc = write(fd, line, 256);
+ if (rc < 0) {
+ sprintf(line, "Meatware_IPC failed: %s", meatpipe);
+ perror(line);
+ exit(S_OOPS);
+ }
+ printf("Meatware_client: reset confirmed.\n");
+ break;
+ }
+ }
}
exit(S_OK);
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/