On 19 Sep 2014, at 12:05, Dawid Stawiarski - nazwa.pl <dawid.stawiarski at
netart.pl> wrote:
> we use dovecot 2.2.13, and we've lately started using maildir quota
(previously fs quota was used, right now it's "quota = maildir:User
quota" changed from "quota = fs:User
quota:user:inode_per_mail").
>
> When the change was applied we didn't manually forced generating
maildirsize files. So, when the first deliver happens (or the file grows larger
then 5KB) it starts quota recalc. However for users with big maildirs, receiving
email every couple of seconds, there are tens of delivery processes each doing
its own recalc (as they open file for APPEND and there's no locking).
What's even worse, after all the stats and getdents (it takes a lot of IO
for 60GB account with 2M emails), deliver makes stat on 'new' dir and
detects changes after which it unlinks freshly created maildirsize. So possibly
this will never be finished as every process drops its own work.
>
> The same thing happened when we checked the native dovecot LMTP server
(every connection has its own forked process - each running independently of the
others).
>
> Is it a known unwanted "feature" of maildir quota (and we should
use dict quota instead) or a bug that will be fixed?
It's a feature that won't be changed. The stat()s are especially bad if
you see them - they wouldn't happen if your Maildir filenames contain the
,S=size part. Switch to dict file, which won't be recalculated unless you
manually do it.