XOVER ranges

Jeffrey M. Vinocur jeff at litech.org
Fri Apr 4 17:08:09 UTC 2008

On Fri, 4 Apr 2008, Jeffrey M. Vinocur wrote:

> On Thu, 3 Apr 2008, Russ Allbery wrote:
> > >   (2) Change CMDgetrange() to not adjust the watermarks
> > 
> > I think 2 is clearly the right solution if all of the overview backends
> > can handle ranges outside the current watermarks.  

Okay, buffindexed it looks like checks for this situation and updates the
current watermarks itself.  I don't think OVDB catches the stale 
watermarks, but it certainly shouldn't break if we ask for articles higher 
than the high watermark.

> > >       I'm still worried there might be a bug lurking in the
> > >       unmap_file/map_file that can take place in the middle of the search,
> > >       since SendIOv may still have references to data in the old location.
> > 
> > Oh, yes.  Given that tradindexed advertises OVSTATICSEARCH false, it
> > shouldn't be doing that.  Good catch.  It either needs to advertise
> > OVSTATICSEARCH true to force nnrpd to copy the data or it needs to never
> > remap in the middle of a search.  I think the latter is more correct.
> I just wish it was actually the cause of the strange behavior I'm seeing!

Okay, this is really interesting.  I just added some debugging, and 
despite the fact that CMDgetrange() ought to be masking the ability to 
request articles past the (stale) high watermark, there apparently is a 
code path that gets there because I'm seeing remapping of both the index 
file and data file happening in routine use.  So I bet this is the cause 
of our problem.

Interestingly, it only seems to happen with some clients (slrn) and I'm 
not sure why -- possibly other clients send GROUP again when they're 
trying to refresh for newer articles, rather than just making repeated 
XOVER requests.  I think that would do it.

> I thought about just updating the open code to remap both if it found a
> stale watermark, but I suppose that potentially we could get in trouble
> there if there's a write to the data file that hasn't flushed yet?

For kicks, I just tried remapping the data file every time the opensearch 
wants to remap the index file, and that eliminated the data remapping that 
had been happening mid-search.

The only reason I can see not to make that change is that it might prompt 
unnecessary I/O in case we weren't actually going to need, but in all of 
the cases that I'm seeing, both files are always ending up remapped 

Then we have the issue of what to do if the index file points to a part of 
the data file that is not mapped.  Right now we try remap_data, and if it 
fails warn of corruption.  Maybe we could just warn of corrupion and see 
if anybody ever encounters it?

Jeffrey M. Vinocur
jeff at litech.org

More information about the inn-workers mailing list