On Wed, Dec 26, 2007 at 07:31:32PM +0000, David Carter wrote: > On Sun, 23 Dec 2007, David Carter wrote: > >> Rather more fundamental: "reconstruct -k" copies expunge.index records >> verbatim, without making any effort to update offsets into cyrus.cache. >> These offsets are used by both "cyr_expire -X" and "unexpunge". >> >> [...] >> >> I know how I plan to fix this problem: reconstruct needs to rebuild >> cyrus.index and expunge in parallel, rather like sync_combine_commit(). >> However this will be a rewrite of reconstruct.c, not a one line fix. > > Here is a replacement reconstruct: > > http://www-uxsup.csx.cam.ac.uk/~dpc22/cyrus/patches/2.3cvs/reconstruct-rewrite-expunge.patch
I'm assuming this contains all the other fixes that have been floating around. I've applied it to a local copy of CVS, then just copied out the reconstruct.c file into a vanilla 2.3.11 and generated a diff to go in my quilt tree. It's here: http://cyrus.brong.fastmail.fm/patches/dcarter-reconstruct-rewrite-2.3.11.diff Now I need to rewrite my auditlog patch on top of it (plenty of hooks into reconstruct, because we want to log when reconstruct changes anything. Bron.