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

Reply via email to