Re: Why are we PageInit'ing buffers in RelationAddExtraBlocks()?

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Robert Haas <robertmhaas@gmail.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>, Amit Kapila <amit.kapila16@gmail.com>
Date: 2019-01-29T00:40:36Z
Lists: pgsql-hackers
Hi,

On 2019-01-28 15:49:33 -0800, Andres Freund wrote:
> On 2019-01-28 18:08:59 -0500, Tom Lane wrote:
> > Andres Freund <andres@anarazel.de> writes:
> > > I'm inclined to put back the
> > >            LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> > >            LockRelationForExtension(onerel, ExclusiveLock);
> > >            UnlockRelationForExtension(onerel, ExclusiveLock);
> > >            LockBufferForCleanup(buf);
> > >            if (PageIsNew(page))
> > > dance regardless, just to get the buildfarm to green?
> > 
> > The buildfarm's got half a dozen reports now of a failure of this ilk,
> > so you'd better do something.
> 
> Yea, I was working on a patch. Was trying to come up with an explanation
> of how this can be realistically hit on the BF, but failed.  I've pushed
> something now, let's see whether that fixes it.

It has not. Given that I don't understand what's happening here I'm
going to revert both commits unless I figure it out in the next ~30min.

Greetings,

Andres Freund


Commits

  1. Move page initialization from RelationAddExtraBlocks() to use, take 2.

  2. Fix race condition between relation extension and vacuum.

  3. Move page initialization from RelationAddExtraBlocks() to use.