Re: Problem while deleting mailbox on a private spool on NFS

From: Christophe Boyanique (no email)
Date: Thu Mar 24 2005 - 06:24:57 EST

  • Next message: Paul-Erik Törrönen: "Continued problems with virtual domains and cyradm"

    Derrick J Brashear a écrit :

    > I suspect if you watch nfs network traffic you see a failed attempt to
    > delete the directory, the problem is likely that the nfs server for some
    > reason believes a file in the directory is still existant or possibly
    > even open and so is unwilling to delete. Is anything in your log?

    You're right: the directory delete fails because directory is not empty.

    The nfs implementation renames the 3 cyrus.* files to .nfs.something
    when deleting them. When Cyrus tries to delete the parent directory; it
    fails because these 3 files are still there.

    So the question is: why these 3 files are still there ?

    With a workmate we watched into Cyrus code and found that it tries to
    delete the mailbox directory before closing these 3 files handles opened
    just before. That works on local filesystem and doesn't work over NFS.

    Here is a patch (appliable to Debian 2.1.17 or upstream 2.1.18 or
    2.2.12) in the mailbox_delete function in the imap/mailbox.c file which
    corrects this behaviour and solves the reported problem:

    +++ cut +++
    diff -Naur cyrus-imapd-2.1.17/imap/mailbox.c
    cyrus-imapd-2.1.17.patched/imap/mailbox.c
    --- cyrus-imapd-2.1.17/imap/mailbox.c 2003-11-04 22:43:00.000000000 +0100
    +++ cyrus-imapd-2.1.17.patched/imap/mailbox.c 2005-03-24
    11:57:14.000000000 +0100
    @@ -2275,13 +2275,14 @@
             closedir(dirp);
          }

    + /* Close mailbox directory before removing it */
    + mailbox_close(mailbox);
    +
          /* Remove empty directories, going up path */
          tail--;
          do {
             *tail = '\0';
          } while (rmdir(buf) == 0 && (tail = strrchr(buf, '/')));
    -
    - mailbox_close(mailbox);
          return 0;
      }

    +++ cut +++

     From what I saw, it doesn't seem to introduce side effect as the
    mailbox is to be deleted and the mailbox_delete function is only called
    from the mboxlist.c file; but as it is the first time I dig in the Cyrus
    code I'd like any feedback about this modification...

    Christophe.

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

  • Next message: Paul-Erik Törrönen: "Continued problems with virtual domains and cyradm"





    Hosted Email Solutions

    Invaluement Anti-Spam DNSBLs



    Powered By FreeBSD   Powered By FreeBSD