On Wed, 2006-06-28 at 10:52 +0200, Thomas Hummel wrote:
If a mail delivery agent uses only dotlocking, then it means that Dovecot's read locking doesn't work, so Dovecot could see half-written mails at the end of the mbox.
In such a case, does it get corrected on the next mbox read or is it too late (the UA as already seen/cached the half written message) ?
Hmm. Actually Dovecot locks the mbox for writing whenever it notices the mbox has changed, so it shouldn't ever see half-written messages. Perhaps I shouldn't do that if mbox_lazy_writes is set, since it's not needed then..
Anyway, if it did only read-lock it and saw a half-written message, at the next sync it would notice that it changed. But I don't think it reassigns a new UID for it, so any cached in formation (in dovecot.index.cache or in client side) wouldn't get updated.
- Obviously, fcntl in write_locks should be exclusive, but is the lock set by fcntl in mbox_read_lock exclusive or shared ?
It's shared.
Writers should do also the fcntl locking. As long as that's done, multiple shared fcntl locks can be acquired so it's then safe to read the mbox.
So you seem to confirm that a read should acutally block a write
Right.
(note : this seem to make sense but I was wondering if some priority to writes were not implemented) ?
There's nothing like that. If you want something like that use another mailbox format.