Tinderd Bug - Tinderd killing wrong processes

Joe Marcus Clarke marcus at marcuscom.com
Sat Mar 14 19:55:03 EDT 2009


On Fri, 2009-03-13 at 11:08 -0500, Tom Judge wrote:
> Joe Marcus Clarke wrote:
> > On Thu, 2009-03-12 at 15:23 -0500, Tom Judge wrote:
> >   
> >> Joe Marcus Clarke wrote:
> >>     
> >>> On Thu, 2009-03-12 at 14:23 -0500, Tom Judge wrote:
> >>>   
> >>>   
> >>>       
> >>>> 2) Why would tinderd think that a jailed processes has a file open in 
> >>>> the mount point /data/tinderbox/portstrees/mintel-6-2-mysql-5-0-51 when 
> >>>> the jail can't even access that path?
> >>>>     
> >>>>         
> >>> Look at the code in lib/tinderlib.sh for killMountProcesses().  It uses
> >>> fstat on the mountpoint to determine what processes need to be killed.
> >>>
> >>>   
> >>>
> >>>       
> >> Would this not be a more suitable:
> >>
> >> -------------
> >> killMountProcesses () {
> >>     dir=$1
> >>
> >>     pids="XXX"
> >>     while [ ! -z "${pids}" ]; do
> >>         pids=$(lsof | fgrep "${dir}" | awk '{print $2}' | sort -u)
> >>
> >>         if [ ! -z "${pids}" ]; then
> >>             echo "Killing off pids in ${dir}"
> >>             ps -p ${pids}
> >>             kill -KILL ${pids} 2> /dev/null
> >>             sleep 2
> >>         fi
> >>     done
> >> }
> >> -------------
> >>
> >> Lsof correctly resolves the nullfs layer and prints out information 
> >> about the upper nullfs layer, fstat(1) does not seem to be able to do this.
> >>     
> >
> > Speak of the devil.  Okay, cool.  Try this patch, then:
> >
> > http://www.marcuscom.com/downloads/tinderlib.sh.diff
> >
> > Joe
> >
> >   
> Hi Joe,
> 
> I am currently running with this patch:
> 
> itchy# diff -u tinderlib.sh.orig tinderlib.sh
> --- tinderlib.sh.orig    2009-02-11 23:55:03.000000000 +0000
> +++ tinderlib.sh    2009-03-13 16:04:00.000000000 +0000
> @@ -131,7 +131,14 @@
>  
>      pids="XXX"
>      while [ ! -z "${pids}" ]; do
> -    pids=$(fstat -f "${dir}" | tail +2 | awk '{print $3}' | sort -u)
> +    # Lsof is more reliable when it comes to nullfs, so prefer it if
> +    # found.
> +    lsof=$(which lsof 2>/dev/null)
> +    if [ -n "${lsof}" ]; then
> +        pids=$(${lsof} | fgrep "${dir}" | awk '{print $2}' | sort -u)
> +    else
> +        pids=$(fstat -f "${dir}" | tail +2 | awk '{print $3}' | sort -u)
> +    fi
>  
>      if [ ! -z "${pids}" ]; then
>          echo "Killing off pids in ${dir}"
> itchy#

Cool.  This is fixed in Tinderbox HEAD.

Joe

> 
> Becuase you patch tried to give the FS as an aurgument to lsof which it 
> does not support.  I got this using your patch:
> 
> itchy# /usr/local/etc/rc.d/tinderbox start
> Starting tinderd.
> lsof: unknown file struct option: /
> lsof: unknown file struct option: d
> lsof: unknown file struct option: a
> lsof: unknown file struct option: t
> lsof: unknown file struct option: a
> lsof: unknown file struct option: /
> lsof: unknown file struct option: t
> lsof: unknown file struct option: i
> lsof: unknown file struct option: d
> lsof: unknown file struct option: e
> lsof: unknown file struct option: r
> lsof: unknown file struct option: b
> lsof: unknown file struct option: o
> lsof: unknown file struct option: x
> lsof: unknown file struct option: /
> lsof: unknown file struct option: p
> lsof: unknown file struct option: o
> lsof: unknown file struct option: r
> lsof: unknown file struct option: t
> lsof: unknown file struct option: s
> lsof: unknown file struct option: t
> lsof: unknown file struct option: r
> lsof: unknown file struct option: e
> lsof: unknown file struct option: e
> lsof: unknown file struct option: s
> lsof: unknown file struct option: /
> lsof: unknown file struct option: m
> lsof: unknown file struct option: i
> lsof: unknown file struct option: t
> lsof: unknown file struct option: e
> lsof: unknown file struct option: l
> lsof: unknown file struct option: -
> lsof: unknown file struct option: 7
> lsof: unknown file struct option: -
> lsof: unknown file struct option: 1
> lsof: unknown file struct option: -
> lsof: unknown file struct option: m
> lsof: unknown file struct option: y
> lsof: unknown file struct option: s
> lsof: unknown file struct option: q
> lsof: unknown file struct option: l
> lsof: unknown file struct option: -
> lsof: unknown file struct option: 5
> lsof: unknown file struct option: -
> lsof: unknown file struct option: 0
> lsof: unknown file struct option: -
> lsof: unknown file struct option: 5
> lsof: unknown file struct option: 1
> lsof: unknown file struct option: /
> lsof: unknown file struct option: p
> lsof: unknown file struct option: o
> lsof: unknown file struct option: r
> lsof: unknown file struct option: t
> lsof: unknown file struct option: s
> lsof 4.82
>  latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
>  latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
>  latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
>  usage: [-?abChlnNoOPRtUvV] [+|-c c] [+|-d s] [+|-D D] [+|-f[cfgGn]]
>  [-F [f]] [-g [s]] [-i [i]] [-k k] [+|-L [l]] [-m m] [+|-M] [-o [o]] [-p s]
> [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
> Use the ``-h'' option to get more help 
> information.                                                                                              
> 
> itchy# /usr/local/etc/rc.d/tinderbox stop
> 
> 
> Regards
> 
> Tom
> 
-- 
PGP Key : http://www.marcuscom.com/pgp.asc
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
URL: <http://marcuscom.com/pipermail/tinderbox-list/attachments/20090314/e1c9241d/attachment.bin>


More information about the tinderbox-list mailing list