On Fri, Feb 7, 2014, at 04:00 AM, Thomas Jarosch wrote: > Hi, > > I just encountered one system where cyr_expire / reconstruct / imapd process > died during the index upgrade from cyrus 2.3.16 to 2.4.17. > > The error message was: > "fatal error: failed to mmap new message file" > > To make a long debug session short: One folder had a broken "cyrus.index" > file that seemed to contain an index record for uid 0 (-> invalid record). > (I saved the file in case it's of interest) > > > Consider this call stack: > upgrade_index_record(): > -> mailbox_message_fname(mailbox, record->uid) > -> message_parse(fname, record) > > > When mailbox_message_fname(mailbox, record->uid) is called for uid 0, > the function returns the folder name without any message filename. > > In my case that was ".../user/xxx/Sent items" instead of > ".../user/xxx/Sent items/123.". > > message_parse() then calls map_refresh() with the folder name (ugh!) > and dies with the above error message. > > The workaround was to kill the broken cyrus.index file and run reconstruct. > > > @Bron: Do you know by chance if this error case is detected in 2.5? > I took a quick look at the code in git HEAD and it seems to behave the same.
I was pretty sure that it detected that case - but I may be wrong. I'll take a look. That's pretty horrible. Yay for variable reuse. Kind of my fault. Thanks for the report. It needs to be fixed in 2.4 anyway, and I need to do a new release, so I'll make sure I put a Cassandane test for this together and fix it. Bron. -- Bron Gondwana br...@fastmail.fm