[Dovecot] dovecot-uidlist housekeeping (was Re: Need a quick, safe method to empty /home/user/Maildir/{.Junk, .Trash})

Bill Cole dovecot-20061108 at billmail.scconsult.com
Fri Jun 13 18:37:12 EEST 2008


At 5:08 AM +0300 6/13/08, Timo Sirainen wrote:
>On Thu, 2008-06-12 at 19:28 -0400, Bill Cole wrote:
>>  At 1:17 AM +0300 6/13/08, Timo Sirainen wrote:
>>  >On Thu, 2008-06-12 at 11:10 -0400, Bill Cole wrote:
>>
>>  [...]
>>  >>  However, I DO clobber the dovecot-uidlist in .Trash as part of my
>>  >>  monthly housekeeping because it tends to get very large
>>  >
>>  >All the expunged messages get removed from it the next time a new
>>  >message is added to the mailbox. So there should be no need to delete
>>  >it. (v1.1 doesn't always recreate the file, but it gets rewritten if the
>>  >resulting file would be 70% of the current size or less.)
>>
>>  I confess to running 1.0.0, which apparently lacks this bit of housekeeping.
>>
>>  At the moment I have no messages in my Trash folder (so there are no
>>  files in ~/Maildir/.Trash/cur) and ~Maildir/.Trash/dovecot-uidlist
>>  has 10273 lines, and the first messages listed are nowhere to be
>>  found anywhere under Maildir.
>
>As I said, they're removed *the next time a new message is added to the
>mailbox*. So basically it works like:
>
>1. 1000 messages added to mailbox -> dovecot-uidlist has 1001 lines.
>2. 1000 messages expunged from mailbox -> dovecot-uidlist has 1001
>lines.
>3. 1 message added to the mailbox -> dovecot-uidlist has 2 lines.

As I said, this isn't happening with 1.0.0. I guess it might be 
another motivator to update to a more current version, if this is a 
more recent feature.
And I really am sure of this behavior. I add a steady stream of 
messages to the Trash mailbox, due to how my primary desktop client 
(MacOS Eudora 6.2.4) handles logical message deletion and movement of 
messages from the IMAP server to client-side archives. I also move 
messages from the inbox to other IMAP mailboxes based on client-side 
filters. It appears that those mailboxes which (like Trash,) only 
ever get new messages by way of Eudora using UID COPY commands are 
never getting any cleanup of their dovecot-uidlist file. I haven't 
tried to track that path in the code, but just off the top of my 
head, I would think that this could be explained if your cleanup is 
triggered by finding fresh deliveries by other software in new, but 
the UID COPY implementation avoids that. A little experimentation 
shows that moving messages on the client side results in new message 
files in the new directory, new lines in dovecot-uidlist, and changes 
to dovecot.index and dovecot.index.log. Since I'm doing initial 
delivery with procmail, obviously Dovecot is doing a different set of 
steps when it moves files from new to cur.

>Neither v1.0 nor v1.1 updates dovecot-uidlist when messages are
>expunged. I don't know if it should - it's just unnecessary extra disk
>I/O, but I guess if the space savings are large maybe it should..

My concern was not really disk space but rather the inefficiency of 
having the UID->file  map containing scores of thousands of entries 
for a mailbox that usually is empty and rarely holds more than a 
handful of messages.

-- 
Bill Cole
bill at scconsult.com



More information about the dovecot mailing list