Cache truncation bug on aborted appends

Simon Matter simon.matter at invoca.ch
Fri Dec 5 02:25:38 EST 2008


> Hi all,
>
> Cyrus stores the end of the cache file before starting an
> append operation so that it can truncate back to that point
> if the append is aborted.
>
> Unfortunately, it actually stores cache_len rather than
> cache_size.  That sort of sucks, because cache_len is
> rounded up by quite a bit to allow "slop".  As the cache
> file gets bigger, the slop gets bigger too, and you wind
> up with a whole pile of zero blocks in your cache file,
> making it (even if sparse) somewhat massive.
>
> Oh, and the bogus record(s) that you wrote are going to
> still be (possibly only partially) in the file, because
> the truncate will either be past them, or in the middle
> of them.
>
> This is exacerbated by the fact that duplicate suppression
> seems to need to write to the cache file _before_ it decides
> not to accept the message!
>
> The attached patch fixes the issue, adds a comment, and

Hi Bron,

is there something missing in the patch, because I can't see the "adds a
comment" part?

Thanks,
Simon




More information about the Info-cyrus mailing list