[POLL] unexpunge behavior
Igor Brezac
igor at ypass.net
Tue May 3 11:36:11 EDT 2005
On Tue, 3 May 2005, Ken Murchison wrote:
> As most of you probably know (or at least *should* know), removing a message
> from an IMAP mailstore is a two-step process. First the message has its
> \Deleted flag set with the STORE command, then any messages with this flag
> are expunged using either the EXPUNGE or CLOSE command. IMAP itself has no
> concept of a Trash folder. The Trash folder concept is something that is
> layered (some say hacked) on top of the delete+expunge model.
>
> Since the most expensive part of the expunge process is actually unlink()ing
> the message files and rebuilding the cyrus.cache file, in the 2.3 branch of
> Cyrus we have implemented something we call "delayed expunge". With delayed
> expunge, the cyrus.index records of the expunged messages are moved to a
> cyrus.expunge file, but the message files and cyrus.cache records remain.
> This has the effect of removing the messages from the server (no message
> "exists" without a cyrus.index record), without all of the expensive overhead
> so the client gets more responsive behavior. The actual completion of the
> expunge is handled with the cyr_expire utility which is run periodically to
> unlink() the message files and rewrite the cyrus.cache file.
>
> In addition to providing better performance for client, the fact that the
> message file and corresponding cache record are left behind provides a window
> of opportunity for an admin to go back and unexpunge messages if need be. To
> this end, I have written an unexpunge utility which simply restores the
> cyrus.index record of the expunged message to its original content. Keeping
> in mind that removing a message is a two-step process, the unexpunge utility
> (by default) only undoes the second step and reverts the message back to its
> "deleted but not yet expunged" state. This means that the \Deleted flag is
> still set, and depending upon the IMAP client configuration, may appear with
> an "X" icon, strikethrough text, or be hidden entirely. To help such
> clients, I have also implemented a -d option for the unexpunge utility which
> unsets the \Deleted flag when restoring the message.
>
> So, my question is, what should the *default* behavior of unexpunge be:
>
> A. only unexpunge the message and leave the \Deleted flag set as-is (only
> undo the expunge step)?
>
> B. unexpunge the message and unset the \Deleted flag (undo both the expunge
> and delete steps)?
>
>
> I'm of the opinion that A is the correct default behavior and admins can use
> the -d option as they see fit, but I will make the default behavior whatever
> the consensus ends up being.
>
I agree with A option being default.
How does quota work? I assume that a 'deleted message' (before it is
cyr_expire'd) does not count against quota.
--
Igor
---
Cyrus Home Page: http://asg.web.cmu.edu/cyrus
Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html
More information about the Info-cyrus
mailing list