|
Jim Gallacher
jpg at jgassociates.ca
Fri Nov 9 16:21:59 EST 2007
David Janes wrote:
> I'm getting random hangs on a mod_python based system under moderately
> load. I haven't tracked down the problem yet, but based on some error
> logging I've been doing code inspection and have a few comments/questions.
>
> (1)
> In Session.py, function filesession_cleanup, lines 624-638 there's a
> try/except block that returns on an exception. However, to get to this
> block, 'lockfp' has to be open -- and there is no close in the exception
> block.
>
> Should not this code block be moved inside the next try/finally block
> which ensures the file object is closed?
I think it's ok as written. The purpose of the lockfile is to make sure
that another process is not already running the cleanup.
lockfp = os.open(lockfile, os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0660)
The lockfile is being opened with the os.O_EXCL flag, so if another
process has the file open *this* process will fail to open the file and
raise an exception.
I can see why there might be some confusion though as the try/except
block is doing double duty - making sure another cleanup is not already
running *and* removing a potentially stale lockfile. Short circuiting
the cleanup in the case of a stale lock file here (with the return) is
not really that big of a deal. It's not imperative that we run the
cleanup *right now*, just so long as the cleanup happens in the near
future where "near" is a pretty fuzzy number.
> (2)
> In my logs I am getting the error message
>
> python_cleanup: Error calling cleanup object <function
> filesession_cleanup at 0xb7b22924>
> exceptions.TypeError: not enough arguments for format string
>
> The likely culprit for this error is line 705 (-707):
>
> req.log_error("FileSession cleanup incomplete: next cleanup
> will start at index %d (%02x)"
> % (next_i,),
> apache.APLOG_NOTICE)
>
> Does this make sense?
As I previously noted that one is a bug and should read:
req.log_error("FileSession cleanup incomplete: next cleanup will start
at index %d (%02x)"
% (next_i, next_i),
apache.APLOG_NOTICE)
I'll fix it in svn.
Just out of curiosity how many session objects do you figure you have?
Jim
|