Hi there,
I was doing some testing on sdbox yesterday. Basically I did the following procedure:
- Create new sdbox; deliver 2 messages into it (u.1, u.2)
- Create a copy of the index file (no cache file created yet)
- deliver another message to the mailbox (u.3)
- copy back index file from stage (2)
- deliver new mail
Then the message delivered in stage 3 ie u.3 gets replaced with the message delivered in (5) also called u.3. Is it possible to try an open/access call on the mail file before overwriting it with the new message in case we have an issue where an older version of the index file is present (eg due to nfs latencies) ? I notice when you are expunging files you very carefully open them and read the header contents to make sure the guid is the same as in the index - any reason that this is not done when delivering? This is with lmtp on dovecot 2.0.16.
I also noticed that index corruption in sdbox does not get automatically repaired. I know this is because the flags are stored in the index files so you'd get some loss of flags, but in many situations for us this auto-repair with flag loss would be better than having the mailbox locked out until we manually do a force-resync on it. (speaking of which, it would be great if force-resync also rebuilt the cache files if there are valid cache files around, rather than just doing away with them)
Thanks,
Mark