Ignore this patch, it's far too reliant on the existence of a pidfile. If one doesn't exist then it can't shutdown the cluster.
On Mon, Dec 14, 2009 at 12:54 PM, Andrew Beekhof <[email protected]> wrote: > If two stop actions are ever performed simultaneously, then neither will > terminate. > Without specifying a pidfile, the status() function from > /etc/init.d/functions incorrectly thinks the other stop action is a real > corosync process. > > Eg. > > [r...@pcmk-1 ~]# ps axf | grep corosync > 16664 pts/0 S 0:00 | \_ /bin/bash /etc/init.d/corosync stop > 16669 pts/0 S+ 0:00 | \_ /bin/bash /etc/init.d/corosync stop > 16849 pts/1 S+ 0:00 \_ grep corosync > [r...@pcmk-1 ~]# /etc/init.d/corosync status > corosync (pid 16669 16664) is running... > [r...@pcmk-1 ~]# > > > Index: init/generic.in > =================================================================== > --- init/generic.in (revision 2638) > +++ init/generic.in (working copy) > @@ -23,6 +23,7 @@ > > desc="Corosync Cluster Engine" > prog="corosync" > +pidarg="-p @LOCALSTATEDIR@/run/$prog.pid" > > # set secure PATH > PATH="/sbin:/bin:/usr/sbin:/usr/bin:@SBINDIR@" > @@ -72,14 +73,14 @@ > # required subdirectories for proper operations > mkdir -p @LOCALSTATEDIR@/run > > - if status $prog > /dev/null 2>&1; then > + if status $pidarg $prog > /dev/null 2>&1; then > success > else > $prog > /dev/null 2>&1 > > # give it time to fail > sleep 2 > - if status $prog > /dev/null 2>&1; then > + if status $pidarg $prog > /dev/null 2>&1; then > touch $LOCK_FILE > pidof $prog > @LOCALSTATEDIR@/run/$prog.pid > success > @@ -93,7 +94,7 @@ > > stop() > { > - ! status $prog > /dev/null 2>&1 && return > + ! status $pidarg $prog > /dev/null 2>&1 && return > > echo -n "Signaling $desc ($prog) to terminate: " > kill -TERM $(pidof $prog) > /dev/null 2>&1 > @@ -101,7 +102,7 @@ > echo > > echo -n "Waiting for $prog services to unload:" > - while status $prog > /dev/null 2>&1; do > + while status $pidarg $prog > /dev/null 2>&1; do > sleep 1 > echo -n "." > done > @@ -128,12 +129,12 @@ > restart > ;; > condrestart|try-restart) > - if status $prog > /dev/null 2>&1; then > + if status $pidarg $prog > /dev/null 2>&1; then > restart > fi > ;; > status) > - status $prog > + status $pidarg $prog > rtrn=$? > ;; > stop) > :: svn : r2638 (Tue, 08 Dec 2009) > > -- Andrew > > > > _______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
