Re: B-tree parent pointer and checkpoints

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
Cc: Bruce Momjian <bruce(at)momjian(dot)us>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Greg Stark <gsstark(at)mit(dot)edu>, Teodor Sigaev <teodor(at)sigaev(dot)ru>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>, Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>
Subject: Re: B-tree parent pointer and checkpoints
Date: 2011-09-06 13:49:39
Message-ID: CA+TgmoZdV6K2hdJT7ikBN=XLhe=t0Sfuugq7U=7=6OcD4XZp-w@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Sep 6, 2011 at 9:45 AM, Heikki Linnakangas
<heikki(dot)linnakangas(at)enterprisedb(dot)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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Alexander Korotkov 2011-09-06 13:51:50 Re: WIP: Fast GiST index build
Previous Message Devrim GÜNDÜZ 2011-09-06 13:49:23 Alpha 1 for 9.2