On Fri, 2007-05-11 at 19:41 +0300, Timo Sirainen wrote:
- Index file code cleanups, simplifications and optimizations. Make it work with NFS with attribute cache enabled.
Better explanation of this for those who are interested:
Currently mmap_disable=yes is faster (but takes more memory) than mmap_disable=no, although it really should be the other way. I think this isn't really because of mmaping but because of other differences between how they work. So one of the main goals would be to get them to use most of the same code paths so mmap_disable=no would be faster again.
Another thing I intended to do was make it use less locks. Currently it's locking files much more often than is necessary. Transaction log could also use O_APPEND instead of locks. These are explained in http://dovecot.org/list/dovecot/2007-April/021640.html Less locking means that index handling becomes slightly faster and throughput higher with shared mailboxes.
Simplifying the code also makes it easier to add NFS attribute cache workarounds, make error handling more reliable and index files in general more resistant against "corrupted index file" rebuilds (important for cydir and dbox mail storages).
And one final thing that I want to do is that Dovecot needs to be able to compare two index views. This is needed when a mailbox view is being synchronized. So the comparing happens between the "current view in memory" and "latest view in dovecot.index file". Currently the synchronization works only if Dovecot can read the changes from dovecot.index.log file. If the client has been idling for a really long time and a lot of changes have happened in the mailbox, the log file might have been deleted already, which causes "Out of sync" error and Dovecot disconnects the client. Even if the log was found, it still could be a lot faster to compare two small views than read huge log files.