On Wed, 2007-06-13 at 22:51 -0500, Steven F Siirila wrote:
- If index files are fully synced, Dovecot writes X-UID: header. It also updates nextuid field in X-IMAP: / X-IMAPbase: header of the first message, which causes Dovecot to read() the file. The nextuid update isn't really required, but I think some other bug shows up if it isn't done.
Do these operations apply to Deliver or just IMAP/POP?
All.
Not knowing enough about how the indexes work.... Question: Is it possible for Deliver to append a message w/o writing an X-UID header, leaving that operation to the IMAP/POP client code, and still maintain an updated index?
That's how messages are saved if index files aren't up-to-date. So the X-UID: adding is just an optimization.
If not, are there any options I can provide to Dovecot LDA to make it function without index file updating?
You could set:
protocol lda { mail_location = ...:INDEX=MEMORY }
What we have is a daemon called "mailattrd" on our mail servers which runs on a TCP port and simply does a stat() on a user's mailbox and returns the atime, mtime, ctime values of said mailbox.
You could do something like this:
do { st1 = stat(mbox) while (mbox.lock exists) wait; st2 = stat(mbox) } while (st1.mtime != st2.mtime || st1.atime != st2.atime);
With some small lock timeout value.
That "service" is used by a variety of our applications. We were thinking of another possibility: changing Dovecot IMAP/POP to update the last access time (open in READ) of a specific file other than the user's INBOX. However, we'd rather not maintain local modifications unless absolutely necessary.
Mount with noatime and have Dovecot update the atime itself? I'm not sure if the patch I sent is enough to update atime always.
Any thoughts on alternatives which might be mailbox-format-independent?
There aren't really mailbox-independent ways to do this. With maildir you'd probably stat() new/ and see if atime > ctime.