MESSAGE quota resource implemention

Bron Gondwana brong at
Mon Sep 5 13:34:36 EDT 2011

On Mon, Sep 05, 2011 at 07:19:00PM +0200, Julien Coloos wrote:
> Le 05/09/2011 12:06, Bron Gondwana a écrit :
> >On Mon, Sep 05, 2011 at 02:32:40PM +1000, Greg Banks wrote:
> >
> >>  - add a 32b mailbox index header entry to track the storage in bytes
> >>used by all annotations for the mailbox itself or for messages in the
> >>mailbox
> >Why not 64b?  Admittedly hanging gigabytes of annotations off a single
> >folders is probably evil, but this is the mailbox header - 4 bytes per
> >mailbox to not even have to think about it is super-cheap.  We keep a
> >handful of "blanks" around in the header already.
> >
> >...
> >
> >>  - in mailbox_commit_quota(), if the field is not "unknown", then
> >>calculate the delta in usage and apply to the quota db.
> >
> This new field seems useful for the quota utility and when setting a
> new quotaroot: it wouldn't need to check each annotation associated
> to the mailbox (or messages) and would rely on that field, as it
> currently does for total message size and now the number of messages
> (with my patch).
> I don't know what other people do with cyrus, but here those two
> situations do not happen that often:
>   - quotaroot is usually set once upon creating the user mailbox
>   - quota utility is rarely used, and usually on one mailbox at a time
> So maybe I am missing something, but my question would be: is it
> really worth it ?

I would challenge the "usually on one mailbox at a time" theory - it's
often on one quota root at a time (i.e. - a single user), but also can
be used on the entire server.  Or for someone with a domain quota, on
all the users in a single domain.

This can be quite the race condition if someone has a lot of mailboxes
and a lot of traffic on said mailboxes.  Short of killing their
connections and blocking LMTP traffic, you can't guarantee atomicity
on actions that cross multiple mailboxes.

But - the new field definitely has value.  I like the idea of just
trusting that field in the quota utility and for regular tasks.


More information about the Cyrus-devel mailing list