Re: "ERROR: could not read block 6 ...: read only 0 of 8192 bytes" after autovacuum cancelled

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: "ERROR: could not read block 6 ...: read only 0 of 8192 bytes" after autovacuum cancelled
Date: 2009-11-06 15:04:46
Message-ID: 20091106150446.GD3840@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Tom Lane wrote:
> Alvaro Herrera <alvherre(at)commandprompt(dot)com> writes:

> > So far as I can see, what we need is to make sure the sinval message is
> > sent regardless of transaction commit/abort. How can that be done?
>
> I would argue that once we've truncated, it's too late to abort. The
> interrupt facility should be disabled from just before issuing the
> truncate till after commit. It would probably be relatively painless to
> do that with some manipulation of the interrupt holdoff stuff.

That cures my (admittedly simplistic) testcase. The patch is a bit ugly
because the interrupts are held off in lazy_vacuum_rel and need to be
released by its caller. I don't see any other way around the problem
though.

The attached patch is for 8.4; back branches all need a bit of editing.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

Attachment Content-Type Size
vactrunc-nointerrupt-84.patch text/x-diff 5.0 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2009-11-06 15:13:18 Re: "ERROR: could not read block 6 ...: read only 0 of 8192 bytes" after autovacuum cancelled
Previous Message Tom Lane 2009-11-06 14:43:17 WIP: convert plpgsql to using parser hooks