User-deleted folders still on disk?
Ken Murchison
ken at oceana.com
Mon Apr 25 16:28:15 EDT 2005
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
More information about the Info-cyrus
mailing list