On 12/12/2024 17:00 EET Ewald Dieterich via dovecot <dovecot@dovecot.org> wrote:
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?
Hi!
Thank you for your bug report, we'll take a look. Does the folder recover if you run doveadm force-resync?
Aki