On 6.11.2012, at 14.17, Timo Sirainen wrote:

> It would be possible to keep a separate expunge log which could remember the 
> expunges longer. But that would be yet another different index file for 
> Dovecot, which annoyingly complicates everything. And currently since it 
> sounds like the only problem is activesync implementation using it, I'm not 
> very interested in spending a lot of time on it.

Here's an idea how it could maybe be done without too much complexity:

Before deleting/replacing dovecot.index.log.2 file, scan all of the expunges 
from it and append them to dovecot.index.log.expunges file using the normal 
transaction log file format. Change the reader code to use it only when a 
special flag is enabled (because it has no other changes, it shouldn't normally 
be used). Use that flag when looking for old expunges. Once in a while recreate 
the file and drop some of the oldest expunges.

The annoying thing with that is that the file format wastes disk space. An 
alternative would be to write to the file using yet another format optimized 
for it, and then have a separate "expunge scanner" API that scans the expunge 
file and the transaction logs.

Anyway, not something I have time to implement myself anytime soon.

Reply via email to