Derrick J Brashear wrote:
On Mon, 25 Apr 2005, Jeff Blaine wrote:
Using cyrus-2.2.12
We're experiencing a situation where user-deleted folders still remain on disk.
Running 'reconstruct -r user.USERNAME' does not address the problem.
Is this expected behavior? If so, I'm curious to hear the reasoning.
Well, a while ago there was a discussion about this related to NFS, and it's quite possibly the same problem, though it's much less an issue if you're not show your users du output.
http://64.233.187.104/search?q=cache:9aAtHxcLfIUJ:asg.web.cmu.edu/archive/message.php%3Fmailbox%3Darchive.info-cyrus%26msg%3D34476+cyrus+nfs+rmdir+site:asg.web.cmu.edu&hl=en
Of course solving it in 2.3 is a little harder but this will probably do it:
I'm not sure that it will. Normally the problem is that the IMAP client has the mailbox SELECTed when it DELETEs it. In Cyrus 2.2 and earlier, the server does a chdir() into the mailbox directory upon SELECT. Some OS/filesystems don't like doing a rmdir() when the process is "in" the directory.
Index: mailbox.c =================================================================== RCS file: /afs/andrew.cmu.edu/system/cvs/src/cyrus/imap/mailbox.c,v retrieving revision 1.147.2.28 diff -u -r1.147.2.28 mailbox.c --- mailbox.c 7 Apr 2005 00:27:09 -0000 1.147.2.28 +++ mailbox.c 25 Apr 2005 16:39:25 -0000 @@ -2606,7 +2606,7 @@ int r, rquota = 0; DIR *dirp; struct dirent *f; - char buf[MAX_MAILBOX_PATH+1], *path; + char buf[MAX_MAILBOX_PATH+1], *path, *lpath, *mpath = NULL; char *tail; struct txn *tid = NULL;
@@ -2640,7 +2640,11 @@ }
/* remove data (message file) directory */ - path = mailbox->path; + lpath = strdup(mailbox->path); + if (mailbox->mpath) + mpath = strdup(mailbox->mpath); + mailbox_close(mailbox); + path = lpath;
do { /* remove all files in directory */ @@ -2686,10 +2690,11 @@ } while (rmdir(buf) == 0 && (tail = strrchr(buf, '/')));
/* remove metadata directory (if exists) */ - } while (mailbox->mpath && (path != mailbox->mpath) && - (path = mailbox->mpath)); + } while (mpath && (path != mpath) && + (path = mpath)); + free(lpath); + if (mpath) free(mpath);
- mailbox_close(mailbox); return 0; }
--- Cyrus Home Page: http://asg.web.cmu.edu/cyrus Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html
-- Kenneth Murchison Oceana Matrix Ltd. Software Engineer 21 Princeton Place 716-662-8973 x26 Orchard Park, NY 14127 --PGP Public Key-- http://www.oceana.com/~ken/ksm.pgp --- Cyrus Home Page: http://asg.web.cmu.edu/cyrus Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html