Re: B-tree parent pointer and checkpoints - Mailing list pgsql-hackers

From Robert Haas
Subject Re: B-tree parent pointer and checkpoints
Date
Msg-id CA+TgmoZdV6K2hdJT7ikBN=XLhe=t0Sfuugq7U=7=6OcD4XZp-w@mail.gmail.com
Whole thread Raw
In response to Re: B-tree parent pointer and checkpoints  (Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>)
Responses Re: B-tree parent pointer and checkpoints
Re: B-tree parent pointer and checkpoints
List pgsql-hackers
On Tue, Sep 6, 2011 at 9:45 AM, Heikki Linnakangas
<heikki.linnakangas@enterprisedb.com> wrote:
>> Do you really need to hold the page locks for all that time, or could
>> you cheat?  Like... release the locks on the split pages but then go
>> back and reacquire them to clear the flag...
>
> Hmm, there's two issues with that:
>
> 1. While you're not holding the locks on the child pages, someone can step
> onto the page and see that the MISSING_DOWNLINK flag is set, and try to
> finish the split for you.
>
> 2. If you don't hold the page locked while you clear the flag, someone can
> start and finish a checkpoint after you've inserted the downlink, and before
> you've cleared the flag. You end up in a scenario where the flag is set, but
> the page in fact *does* have a downlink in the parent.

It seems like both of these could be handled by making the code that
repairs the damage insert the downlink into the parent only if it's
not already present.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: spinlocks on HP-UX
Next
From: Devrim GÜNDÜZ
Date:
Subject: Alpha 1 for 9.2