-=| Peter Palfrader, 23.09.2009 11:42:15 +0200 |=- > We mirror packages.debian.org on rore. > > After a sync there are still a few apache processes that have the old > db files open, so after a couple of days rore runs out of disk space. > > Restarting apache every few days isn't really that great an option, > so it'd be nice if this could be fixed somehow.
Looking at the code, the DB files are open using the following logic
(lib/Packages/DB.pm, init()):
(assuming persistent mod_perl environment)
* at the start of each CGI process, open the DB files and store aside
their timestamp
* when a request comes to an old CGI process and the DB files are
modified (using the stored timestamp), close the DB files and
reopen them. store the timestamp aside
To me it seems that with the above schema as long as all apache
children get a request from time to time (and the db files are
changed), file handles should be closed sooner than "days".
Old file handles could be kept open only if the apache child that
holds them doesn't receive any requests.
One way to avoid this could be to use alarm() and untie the databases
in $SIG{ALRM}. Not really nice, admittedly, not to mention that ALRM
may already be used for something else or interfere with apache.
Another way could be to close DB handles after each request. I am not
sure how much is gained by caching them forever.
signature.asc
Description: Digital signature

