-=| 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