I'm finally picking my dovecot project back up now, and after upgrading rc19 to rc27, I sent a test message to an existing account which resulted in log entries like these:
Mar 16 08:45:37 node7 deliver(user@example.com): Corrupted transaction log file /var/indexes/example/com/u/us/user/.INBOX/dovecot.index.log: Append with UID 3, but next_uid = 15368 Mar 16 08:45:37 node7 deliver(user@example.com): msgid=20070316124031.8F089D39A5@node7.neonova.net: save failed to INBOX Mar 16 08:45:37 node7 postfix/pipe[29267]: 8F089D39A5: to=user@example.com, relay=dovecot, delay=306, delays=306/0.01/0/0.02, dsn=4.3.0, status=deferred (temporary failure)
So, as you can see deliver has the problem and defers delivery. Is dovecot supposed to be able to recover from a corrupted log file on its own? It repeated this until I manually wiped out the index directory (didn't try just removing the log files first, sorry). The kicker is that deliver actually did save the message to the inbox every time, so multiple copies were delivered (every time I flushed the queue until it was actually fixed, a copy was delivered). I have my mail directories on an NFS mount, and indexes on localdisk, FYI.