I'm running Dovecot 2.3.21 with the mdbox mailbox format. I lose mails
(with an asterisk, see below) when I'm doing the following in 2 IMAP
sessions:
Session 1: Create a folder, save a mail and select it:
. create folder
. append folder {1}
. select folder
* 1 EXISTS
* OK [UIDVALIDITY 1734013510] UIDs valid
Session 2: Delete the folder, create it again, save a mail in it, check
the number of messages and the uidvalidity:.
. delete folder
. create folder
. append folder {1}
. status folder (messages uidvalidity)
* STATUS folder (MESSAGES 1 UIDVALIDITY 1734013511)
Everything is as expected until here, the uidvalidity was increased by
1, which makes sense.
Session 1: Just do a noop
. noop
* BYE IMAP session state is inconsistent, please relogin.
Dovecot notices that something is wrong and closes the connection. This
error is logged:
Error: Mailbox folder: Corrupted transaction log file
/var/spool/dovecot/user/mailboxes/folder/dbox-Mails/dovecot.index.log
seq 2: indexid changed: 1734011270 -> 1734011403 (sync_offset=0)
Session 2: Check the folder again:
. status folder (messages uidvalidity)
* STATUS folder (MESSAGES 0 UIDVALIDITY 1734013512)
The mail is gone, uidvalidity was again increased by 1, so this is a new
folder.
I think the problem is that the folder's transaction log is deleted in
session 1 in mail_transaction_log_file_open() when Dovecot notices
discrepancies in what it expects:
if (ret == 0) {
/* corrupted */
if (index->readonly) {
/* don't delete */
} else {
i_unlink_if_exists(file->filepath);
}
*reason_r = "File is corrupted";
return 0;
}
This basically recreates the folder, so now it's empty.
Here's the asterisk: I know that technically the mail isn't lost because
it's still in the storage file and can be recovered. But it's still
ugly. And when I copy a mail from another folder instead of appending
it, I can't recover it for the folder because the information that the
mail was copied is definitely lost.
Can this be fixed in Dovecot?
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org