On Sat, 2008-11-01 at 15:18 +0200, Heikki Linnakangas wrote:
> Simon Riggs wrote:
> > On Fri, 2008-10-31 at 15:05 +0000, Heikki Linnakangas wrote:
> >> Log Message:
> >> -----------
> >> Unite ReadBufferWithFork, ReadBufferWithStrategy, and ZeroOrReadBuffer
> >> functions into one ReadBufferExtended function, that takes the strategy
> >> and mode as argument. There's three modes, RBM_NORMAL which is the default
> >> used by plain ReadBuffer(), RBM_ZERO, which replaces ZeroOrReadBuffer, and
> >> a new mode RBM_ZERO_ON_ERROR, which allows callers to read corrupt pages
> >> without throwing an error. The FSM needs the new mode to recover from
> >> corrupt pages, which could happend if we crash after extending an FSM file,
> >> and the new page is "torn".
> >
> > I thought you were adding the "read buffer only if in cache" option
> > also?
>
> No, but if it's needed, it should now fit well into the infrastructure,
> as a new ReadBuffer mode.
Not sure how this helps me; maybe it wasn't supposed to? I need to
implement XLogReadBufferExtended to take a cleanup lock. It seems wrong
to make that a ReadBufferMode, since the option refers to what happens
after we do ReadBuffer and especially because we need to do RBM_ZERO and
Cleanup mode at same time.
It would be much better to have ReadBufferExtended take a lockmode
argument also.
-- Simon Riggs www.2ndQuadrant.comPostgreSQL Training, Services and Support