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

Reply via email to