Having a problem where deleting a cyrus user takes approximately 45 seconds. Using strace I can see that the lag occurs when cyrus goes through each quota file in /var/imap/quota to try and figure out which quota file to delete.

Searching Google I found this thread:

http://asg.web.cmu.edu/archive/message.php?mailbox=archive.cyrus-devel&msg=837


One of the messages in the thread (http://asg.web.cmu.edu/archive/message.php?mailbox=archive.cyrus-devel&msg=840) mentions that only the quota tool is affected by the foreach() call but that is not correct. It also affects deleting a user.

From what I can see when performing a TRANSFER, DELETE, or RENAME imapd.c calls the function user_deletedata to "take care of deleting ACLs, subscriptions, seen state and quotas".

user_deletedata is a function in user.c which calls user_deletequotaroots to delete the quotas. The problematic foreach() is in this function also.


int user_deletequotaroots(const char *user)
{
    struct namespace namespace;
    char buf[MAX_MAILBOX_NAME+1], *inboxname = buf;
    struct txn *tid = NULL;
    int r;

    /* set namespace */
    r = mboxname_init_namespace(&namespace, 0);

    /* get user's toplevel quotaroot (INBOX) */
    if (!r)
        r = (*namespace.mboxname_tointernal)(&namespace, "INBOX",
                                                 user, inboxname);

    if (!r) {
        struct find_rock frock = { NULL, NULL };
        frock.inboxname = inboxname;
        frock.tid = &tid;
        r = config_quota_db->foreach(qdb, inboxname, strlen(inboxname),
                                     &find_p, &find_cb, &frock, &tid);
    }

    if (!r) quota_commit(&tid);

    return r;
}



I checked out the latest cyrus-imapd from CVS and the changes to the quota tool work as expected. Much faster and strace shows that /var/imap/quota is no longer being parsed file by file.


Would it be possible to port this new quota code into user.c as well so user deletions work just as well? Thanks.
----
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