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
>
>>
>> ----------
>> [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/
>

_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to