[Dovecot] Altering newly created mailboxes

Thomas Wouters thomas at xs4all.net
Tue Jul 12 16:26:21 EEST 2005


There seems to be a bug in updating uid/uidvalidity when copying mail to an
empty or newly created mailbox:

<new connection>
. OK Logged in.

. CREATE testfolder4
. OK Create completed.

. SUBSCRIBE testfolder4
. OK Subscribe completed.

. SELECT otherfolder
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags
permitted.
* 3 EXISTS
* 0 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1121171128] UIDs valid
* OK [UIDNEXT 4] Predicted next UID
. OK [READ-WRITE] Select completed.

. UID COPY 1 testfolder4
. NO Internal error occured. Refer to server log for more information. [2005-07-12 15:05:45]

. SELECT testfolder4
. NO Internal error occured. Refer to server log for more information. [2005-07-12 15:05:49]

<wait a while, doing nothing else>
. SELECT testfolder4
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags
permitted.
* 1 EXISTS
* 1 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1121173545] UIDs valid
* OK [UIDNEXT 2] Predicted next UID
. OK [READ-WRITE] Select completed.

The errorlog entries for those two errors are:
Jul 12 15:05:45 dovecot0 dovecot: IMAP(ynnoz): Corrupted index file /var/run/dovecot-index/ynnoz/.testfolder4/dovecot.index: uid_validity = 0, next_uid = 2
Jul 12 15:05:49 dovecot0 dovecot: IMAP(ynnoz): Corrupted index file /var/run/dovecot-index/ynnoz/.testfolder4/dovecot.index: uid_validity = 0, next_uid = 2

I also managed to trigger an assertion failure this way, by trying another
COPY after that first failure:

. UID COPY 1 testfolder6
. NO Internal error occured. Refer to server log for more information. [2005-07-12 15:16:54]
. UID COPY 1 testfolder6
Connection closed by foreign host.

The errors for that connection are:
Jul 12 15:16:54 dovecot0 dovecot: IMAP(ynnoz): Corrupted index file /var/run/dovecot-index/ynnoz/.testfolder6/dovecot.index: uid_validity = 0, next_uid = 2
Jul 12 15:17:01 dovecot0 dovecot: IMAP(ynnoz): Corrupted index file /var/run/dovecot-index/ynnoz/.testfolder6/dovecot.index: uid_validity = 0, next_uid = 2
Jul 12 15:17:01 dovecot0 dovecot: IMAP(ynnoz): file mail-index-transaction.c: line 128 (mail_index_buffer_convert_to_uids): assertion failed: (*seq != 0)
Jul 12 15:17:01 dovecot0 dovecot: child 6666 (imap) killed with signal 6

Another assertion error I triggered was by trying another SELECT right after
the failed SELECT (after the failed COPY):
Jul 12 15:14:04 dovecot0 dovecot: IMAP(ynnoz): Maildir /var/spool/mail/.4a/S/tmp/ynnoz/.testfolder5 sync: UIDVALIDITY changed (1121174026 -> 1121174044)
Jul 12 15:14:09 dovecot0 dovecot: IMAP(ynnoz): Corrupted transaction log file /var/run/dovecot-index/ynnoz/.testfolder5/dovecot.index.log: Append with UID 1, but next_uid = 2
Jul 12 15:14:12 dovecot0 dovecot: IMAP(ynnoz): file mail-index-view.c: line 595 (mail_index_view_open): assertion failed: (index->map != NULL)
Jul 12 15:14:12 dovecot0 dovecot: child 6654 (imap) killed with signal 6

I was able to reproduce this on a near-virgin test76 -- it has one patch
that should not interfere; we use

default_mail_env = maildir:%Nu:INDEX=/var/run/dovecot-index/%u

where %N is a new var_expand character that looks up the argument in a NIS
map (we store actual maildir location there, for scalability.) The INDEX
setting we use might matter, though. But it feels like a missing update-uid
or invalidate-uid call somewhere, I just don't know where :)

-- 
Thomas Wouters <thomas at xs4all.net>

Hi! I'm a .signature virus! copy me into your .signature file to help me spread!


More information about the dovecot mailing list