Re: Hot standby 9.2.6 -> 9.2.6 PANIC: WAL contains references to invalid pages

From: Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>
To: Andres Freund <andres(at)2ndquadrant(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Sergey Konoplev <gray(dot)ru(at)gmail(dot)com>, matioli(dot)matheus(at)gmail(dot)com, pgsql-bugs <pgsql-bugs(at)postgresql(dot)org>, Maxim Boguk <maxim(dot)boguk(at)gmail(dot)com>, Максим Панченко <Panchenko(at)gw(dot)tander(dot)ru>, Сизов Сергей Павлович <sizov_sp(at)gw(dot)tander(dot)ru>
Subject: Re: Hot standby 9.2.6 -> 9.2.6 PANIC: WAL contains references to invalid pages
Date: 2014-01-13 20:40:32
Message-ID: 52D44F40.1000803@vmware.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

On 01/13/2014 10:26 PM, Andres Freund wrote:
> On 2014-01-13 15:19:06 -0500, Tom Lane wrote:
>> I concur that the right fix requires a
>> new operating mode for XLogReadBufferExtended, perhaps RBM_NORMAL_ZERO_OK.
>> I think the spec for this should be that if the page doesn't exist or
>> contains zeroes, we return InvalidBuffer without logging the page number
>> as invalid. The doesn't-exist case is justified by the expectation that
>> there will be a later RBM_NORMAL call for a larger page number, which will
>> result in a suitable complaint if the page range isn't there.

I think it's more natural to return the empty page to the caller, rather
than InvalidBuffer.

> That's a sensible way to go, yes. But I wonder if we wouldn't end up
> with less complicated code if we added a variant of ReadBuffer that only
> returns a buffer from cache if already present in s_b.
> I started to prototype something like RBM_NORMAL_ZERO_OK shortly after
> Heikki's message and it seems to quickly turn a bit ugly because the
> surrounding code isn't really ready to deal with not returning a
> buffer. And for the purpose of that redo routine, that'd actually be
> better.

If it's trivial to add such a mode to buffer cache, then sure, let's do
that by all means. But I seriously doubt it's really simple enough to be
back-patchable.

With RBM_NORMAL_ZERO_OK, AFAICS we're talking about a tiny patch to
XLogReadBufferExtended. bufmgr.c doesn't need to do anything about the
new mode, as it's XLogReadBuffer that does the the check for zero pages.
Per attached patch (for demonstration purposes only, you also need to
add the new mode to the header file and adjust comments).

- Heikki

Attachment Content-Type Size
rbm_normal_zero_ok-1.patch text/x-diff 974 bytes

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2014-01-13 20:56:23 Re: Hot standby 9.2.6 -> 9.2.6 PANIC: WAL contains references to invalid pages
Previous Message Tom Lane 2014-01-13 20:34:33 Re: Hot standby 9.2.6 -> 9.2.6 PANIC: WAL contains references to invalid pages

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2014-01-13 20:46:48 Re: Performance Improvement by reducing WAL for Update Operation
Previous Message Tom Lane 2014-01-13 20:40:25 Re: Planning time in explain/explain analyze