Hi Yoshihiko-san, On Thu, Jan 07, 2010 at 10:18:14AM +0900, Yoshihiko SATO wrote: > Hi Dejan, > > >Many thanks for the patch. Just applied it, slightly modified. > Thank you. > I confirmed it. > "meatclient -c nodeB -w" is good. > but, "meatclient -c nodeB" (no -w option) failed.
Yes, pretty obvious now that I look at the code again. Many thanks for the patch. Applied. Dejan > > ---------- > [r...@nodea ~]# meatclient -c nodeB > > WARNING! > > If node "nodeB" has not been manually power-cycled or disconnected from all > shared resources and networks, data on shared disks may become corrupted and > migrated services might not work as expected. > Please verify that the name or address above corresponds to the node you just > rebooted. > > PROCEED? [yN] y > Meatware_IPC failed: /var/run/meatware.nodeB: Bad file descriptor > ---------- > > I attach patch. > > Regards, > Yoshihiko SATO > > (2009/12/28 23:53), Dejan Muhamedagic wrote: > >Hi Yoshihiko-san, > > > >On Thu, Dec 24, 2009 at 10:23:41AM +0900, Yoshihiko SATO wrote: > >>Hi, > >> > >>>The idea is nice, but what we actually want is a "crm node > >>>clean-down-confirmation XXX" command, that clears the CIB accordingly. > >> > >>Is this option added in the future? > >>I think that I should solve it in the another way until this option is > >>added to crm. > >>As the method, I want to add the wait option to meatclient. > >>I understand that meatware and meatclient become unnecessary after the > >>option is added to crm... > >> > >>I attach patch that include the advice of Dejan. > > > >Many thanks for the patch. Just applied it, slightly modified. > > > >Dejan > > > >> > >>Regards, > >>Yoshihiko SATO > >> > >>(2009/11/19 20:09), Lars Marowsky-Bree wrote: > >>>On 2009-11-16T18:58:12, Dejan Muhamedagic<[email protected]> wrote: > >>> > >>>>To have this handled by CRM, crmd would have to cancel the > >>>>currently running stonith action, i.e. send the appropriate > >>>>message to stonithd. > >>> > >>>Sure. This also happens if the node eventually reboots and rejoins > >>>cleanly, too, anyway. > >>> > >>>>If handled by stonithd, it would have to cancel the running stonith > >>>>action and send the OK status to crmd. It basically boils down to the > >>>>same, but the former needs extra support in crmd. Don't know how much > >>>>effort that would take and if it would make the code more complex. > >>> > >>>This might work too, yes - basically faking a stonithd "success". > >>>However, how do you send this if there's no currently pending STONITH, > >>>because stonith has just timed out and been handed back to the > >>>transitioner? > >>> > >>>Sending the fake ack to crmd might be the right way. > >>> > >>>>BTW, this would obviate the need for this patch, but not for the > >>>>meatware plugin, since the CRM would complain if there are no > >>>>stonith resources in the configuration with fencing enabled. > >>> > >>>What I really dislike about the meatware plugin is that it needs to be > >>>run on a specific node. It'd be much better if it could run on any > >>>node. > >>> > >>>And there should always be some stonith resource defined. If the manual > >>>override existed, they could simply define external/ssh even (no need > >>>for meatware), which would at least allow error recovery for, say, stop > >>>failures. > >>> > >>> > >>>Regards, > >>> Lars > >>> > >> > >> > > > >>diff -r 2668d74b4060 lib/stonith/meatclient.c > >>--- a/lib/stonith/meatclient.c Tue Dec 22 19:12:54 2009 +0100 > >>+++ b/lib/stonith/meatclient.c Thu Dec 24 09:38:08 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]\n", cmd); > >> exit(S_INVAL); > >> } > >> > >>@@ -60,7 +60,7 @@ > >> char * opthost = NULL; > >> int clearhost = 0; > >> > >>- int c, argcount; > >>+ int c, argcount, waitmode; > >> int errors = 0; > >> > >> if ((cmdname = strrchr(argv[0], '/')) == NULL) { > >>@@ -74,12 +74,14 @@ > >> case 'c': opthost = optarg; > >> ++clearhost; > >> break; > >>+ case 'w': ++waitmode; > >>+ break; > >> default: ++errors; > >> break; > >> } > >> } > >> argcount = argc - optind; > >>- if (!(argcount == 0)) { > >>+ if (!(argcount == 0) || !opthost) { > >> errors++; > >> } > >> > >>@@ -99,29 +101,51 @@ > >> > >> snprintf(meatpipe, 256, "%s.%s", meatpipe_pr, opthost); > >> > >>- fd = open(meatpipe, O_WRONLY | O_NONBLOCK); > >>+ if (waitmode) { > >>+ gboolean waited=FALSE; > >>+ while (1) { > >>+ fd = open(meatpipe, O_WRONLY | O_NONBLOCK); > >>+ if (fd< 0) { > >>+ if (errno != ENOENT&& errno != ENXIO) { > >>+ if (waited) printf("\n"); > >>+ snprintf(line, sizeof(line) > >>+ , "Meatware_IPC failed: > >>%s", meatpipe); > >>+ perror(line); > >>+ exit(S_BADHOST); > >>+ } > >>+ printf("."); fflush(stdout); > >>waited=TRUE; > >>+ sleep(1); > >>+ continue; > >>+ } > >>+ if (waited) printf("\n"); > >>+ break; > >>+ } > >> > >>- if (fd< 0) { > >>- snprintf(line, sizeof(line) > >>- , "Meatware_IPC failed: %s", meatpipe); > >>- perror(line); > >>- exit(S_BADHOST); > >>- } > >>+ } else { > >>+ fd = open(meatpipe, O_WRONLY | O_NONBLOCK); > >> > >>- printf("\nWARNING!\n\n" > >>- "If node \"%s\" has not been manually power-cycled or " > >>- "disconnected from all shared resources and networks, " > >>- "data on shared disks may become corrupted and " > >>- "migrated services might not work as expected.\n" > >>- "Please verify that the name or address above " > >>- "corresponds to the node you just rebooted.\n\n" > >>- "PROCEED? [yN] ", opthost); > >>+ if (fd< 0) { > >>+ snprintf(line, sizeof(line) > >>+ , "Meatware_IPC failed: %s", meatpipe); > >>+ perror(line); > >>+ exit(S_BADHOST); > >>+ } > >> > >>- rc = scanf("%s", resp); > >>+ printf("\nWARNING!\n\n" > >>+ "If node \"%s\" has not been manually > >>power-cycled or " > >>+ "disconnected from all shared resources and > >>networks, " > >>+ "data on shared disks may become corrupted and " > >>+ "migrated services might not work as > >>expected.\n" > >>+ "Please verify that the name or address above " > >>+ "corresponds to the node you just rebooted.\n\n" > >>+ "PROCEED? [yN] ", opthost); > >> > >>- if (rc == 0 || rc == EOF || tolower(resp[0] != 'y')) { > >>- printf("Meatware_client: operation canceled.\n"); > >>- exit(S_INVAL); > >>+ rc = scanf("%s", resp); > >>+ > >>+ if (rc == 0 || rc == EOF || tolower(resp[0] != 'y')) { > >>+ printf("Meatware_client: operation > >>canceled.\n"); > >>+ exit(S_INVAL); > >>+ } > >> } > >> > >> sprintf(line, "meatware reply %s", opthost); > >> > > > >>_______________________________________________________ > >>Linux-HA-Dev: [email protected] > >>http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev > >>Home Page: http://linux-ha.org/ > > > >_______________________________________________________ > >Linux-HA-Dev: [email protected] > >http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev > >Home Page: http://linux-ha.org/ > > > > diff -r ce57c3d4ecfc lib/stonith/meatclient.c > --- a/lib/stonith/meatclient.c Tue Dec 29 16:35:37 2009 +0100 > +++ b/lib/stonith/meatclient.c Thu Jan 07 09:36:34 2010 +0900 > @@ -99,26 +99,25 @@ > char line[256]; > char meatpipe[256]; > > + gboolean waited=FALSE; > + > snprintf(meatpipe, 256, "%s.%s", meatpipe_pr, opthost); > > - if (waitmode) { > - gboolean waited=FALSE; > - while(1) { > - fd = open(meatpipe, O_WRONLY | O_NONBLOCK); > - if (fd >= 0) > - break; > - if (!waitmode || (errno != ENOENT && errno != > ENXIO)) { > - if (waited) printf("\n"); > - snprintf(line, sizeof(line) > - , "Meatware_IPC failed: %s", > meatpipe); > - perror(line); > - exit(S_BADHOST); > - } > - printf("."); fflush(stdout); waited=TRUE; > - sleep(1); > + while(1) { > + fd = open(meatpipe, O_WRONLY | O_NONBLOCK); > + if (fd >= 0) > + break; > + if (!waitmode || (errno != ENOENT && errno != ENXIO)) { > + if (waited) printf("\n"); > + snprintf(line, sizeof(line) > + , "Meatware_IPC failed: %s", meatpipe); > + perror(line); > + exit(S_BADHOST); > } > - if (waited) printf("\n"); > + printf("."); fflush(stdout); waited=TRUE; > + sleep(1); > } > + if (waited) printf("\n"); > > printf("\nWARNING!\n\n" > "If node \"%s\" has not been manually power-cycled or " > _______________________________________________________ > Linux-HA-Dev: [email protected] > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev > Home Page: http://linux-ha.org/ _______________________________________________________ Linux-HA-Dev: [email protected] http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev Home Page: http://linux-ha.org/
