mogstored file descriptor leak

Brad Fitzpatrick brad at danga.com
Mon Aug 15 06:27:35 PDT 2005


Thanks!  You did the hard work... I'll fix it from here.

First I'll write a test case for fd leakage, though, so this doesn't
happen again.


On Sun, 14 Aug 2005, Cory Bennett wrote:

> I found where the leak is originating.  The leaked files are only open read
> only.  So that excludes the code below.  So the only place left for me to
> look was in Perlbal.  I edited all the calls to aio_open to print out the
> fileno so I could track them via lsof.  All the leaked files were opened in
> Perlbal::ClientHTTPBase in  _serve_request (line 377).  This is the cvs
> version 1.51.
>
> The code is still a bit too dense for me to follow, so I have no idea
> where/how the file should be getting closed.  I am hoping you have some
> ideas :)
>
> Thanks
> -Cory
>
> On Sunday 14 August 2005 10:38 pm, Cory Bennett wrote:
> > On Sunday 14 August 2005 8:40 pm, Brad Fitzpatrick wrote:
> > > Great bug report.  I thought it'd be easy to find, but mogstored in cvs
> > > (1.14) is pretty clear:
> > >
> > >             # open a file on that disk location called 'usage'
> > >             my $rv = open(FILE, ">$disk/usage");
> > >             unless ($rv) {
> > >                 $err->("Unable to open '$disk/usage' for writing: $!");
> > >                 next;
> > >             }
> > >             foreach (sort keys %$output) {
> > >                 print FILE "$_: $output->{$_}\n";
> > >             }
> > >             close FILE;
> >
> > Yeah, It is the same version I am using.  I saw this code right away, and
> > seemed obvious.  So I added a bunch of debug statements, printing out the
> > $rv and also the fileno(FILE).  Using lsof I could see the file numbers,
> > but the one printed by fileno(FILE) never showed up in lsof for mogstored.
> > My conclusion was that the above code is working correctly and that the
> > leaked descriptor is coming from somewhere else.  I have been trying to
> > find a 'clever' way to intercept the open and sysopen calls so I can get a
> > stack trace, but I have not had much luck yet.
> >
> > -Cory
>
>


More information about the mogilefs mailing list