[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-ha-dev
Subject: Re: [Linux-ha-dev] suggestions and patch for meatclient
From: Yoshihiko SATO <satoyoshi () intellilink ! co ! jp>
Date: 2010-01-07 7:21:58
Message-ID: 4B458B96.8030909 () intellilink ! co ! jp
[Download RAW message or body]
Hi Dejan,
Thank you for your quick response.
Cheers,
Yoshihiko SATO
(2010/01/07 15:54), Dejan Muhamedagic wrote:
> 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
>
> >
> > ----------
> > [root@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<dejanmm@fastmail.fm> 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: Linux-HA-Dev@lists.linux-ha.org
> > > > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> > > > Home Page: http://linux-ha.org/
> > >
> > > _______________________________________________________
> > > Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
> > > 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: Linux-HA-Dev@lists.linux-ha.org
> > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> > Home Page: http://linux-ha.org/
>
> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
>
_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic