Thanks Wayne, I think that's good advice.  

----- Original Message Follows -----
From: Wayne Tackabury <[email protected]>
To: Kenneth Graves <[email protected]>
Cc: [email protected],
[email protected], Boston Perl Mongers <[email protected]>
Subject: Re: [Boston.pm] Perl flock problem?
Date: Fri, 6 Apr 2012 17:26:43 -0400

> Hi Jim:
> 
> And even if it is (releasing the lock, all orderly and
> everything), I'd generally never use anything but a
> zero-length shadow file for this kind of locking action,
> to elaborate on Kenneth's suggestion.  If you're building
> up the archive, and if it's getting sizeable, it's
> possible that flock or one of its preambles is doing a
> stat on the file that is requiring a check of the block
> structure of the file, swinging from volume extent to
> volume extent, etc.  Under ordinary circumstances that
> might be fine, but in your 80 ms. window that might be
> experiencing disk seek latency, etc., that is interacting
> with whatever in god's name tar is doing with the file or
> whatever state or fragmentation it's being left in....end
> result is you'd at best provide some latency to the
> locking atomicity,and usually increase the chance of
> finding windows where it would get into race conditions.
> 
> In fact, if the file stays zero length, your file system
> driver should pretty much keep it as a descriptor in
> memory for most of your running including any prelock
> stat(), which I'd think at your level of multithreading
> I/O activity, couldn't help but be a win.
> 
> Regards,
> Wayne
> 
> 
> 
> From:    Kenneth Graves <[email protected]>
> To:    [email protected],
> Cc:    Boston Perl Mongers <[email protected]>
> Date:    04/06/2012 01:48 PM
> Subject:    Re: [Boston.pm] Perl flock problem?
> Sent by:   
> [email protected]
> 
> 
> 
> Is tar releasing the lock?  You might try using flock on a
> separate lock file instead of locking the archive itself.
> 
> --kag
> 
> On Apr 6, 2012, at 5:56 AM, [email protected] wrote:
> > we're running a pre-forking server with a number of
> > child processes which, among other things, archive
> > incoming files to a common archive file.   Contention
> > for the tar file is handled by perl's flock:
> >
> > ....
> >        my $fh = IO::File->new(">>
> >            $archdir/$arch_filename") || die "Can't open
> > archive file: $archdir/$arch_filename : $!\n";
> >        flock($fh, LOCK_EX);
> >        system('tar', $opts, "$archdir/$arch_filename",
> > "$basefilename") == 0
> >            ||  die "Can't add $basefilename to
> > $archdir/$arch_filename - $!";
> >        flock($fh, LOCK_UN);
> >        $fh->close();
> > ....
> >
> > We are finding from the log that when competing child
> > processes execute this code within the same 80 msec. or
> > less window that a directory checksum within the tar
> > gets corrupted unrecoverably since tar spits out this
> > error before exiting:
> >
> > directory checksum error
> >
> > Once this happens the archive is unusable. Outside of
> > that contention time band there's *never* a directory
> > checksum error.
> >
> > I can't see any problem with the perl or the use of
> > flock and yet the circumstances seem to suggest some
> > sort of problem with the file locking.  Am I missing
> > something? This runs on HPUX 11.11 and invokes HPUX's
> > tar. Is there any known problem with perl's flock on
> > this system or the interaction of flock and tar?
> >
> > TIA,
> >
> > Jim Eshelman
> >
> >
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > Boston-pm mailing list
> > [email protected]
> > http://mail.pm.org/mailman/listinfo/boston-pm
> 
> 
> _______________________________________________
> Boston-pm mailing list
> [email protected]
> http://mail.pm.org/mailman/listinfo/boston-pm
> 
> 
> 
> 
> _______________________________________________
> Boston-pm mailing list
> [email protected]
> http://mail.pm.org/mailman/listinfo/boston-pm 

_______________________________________________
Boston-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/boston-pm

Reply via email to