Re: issue: nbtpage.c,_bt_pagedel may get wrong result - Mailing list pgsql-bugs

From Pengfei Wang
Subject Re: issue: nbtpage.c,_bt_pagedel may get wrong result
Date
Msg-id CALsf3S0uAtkY8kAVkqxjA6-Z3e3vGJpTm7sBO1a__Gw-quc_gg@mail.gmail.com
Whole thread Raw
In response to Re: issue: nbtpage.c,_bt_pagedel may get wrong result  (Heikki Linnakangas <hlinnaka@iki.fi>)
List pgsql-bugs
Yes, you are right. I've checked _bt_leftsib_splitflag, it checks if the right sibling of 'leftisb' is till leafbuf.

Thank you for your explanation.

On Thu, May 23, 2024 at 7:13 PM Heikki Linnakangas <hlinnaka@iki.fi> wrote:
On 23/05/2024 13:06, Pengfei Wang wrote:
> # issue
> https://github.com/postgres/postgres/blob/da32f5c4bca7f3447b869de2afbbfa0b74443d45/src/backend/access/nbtree/nbtpage.c#L1943 <https://github.com/postgres/postgres/blob/da32f5c4bca7f3447b869de2afbbfa0b74443d45/src/backend/access/nbtree/nbtpage.c#L1943>
>
>     /*
>     * To avoid deadlocks, we'd better drop the leaf page lock
>     * before going further.
>     */
>     _bt_unlockbuf(rel, leafbuf);
>
>     /*
>     * Check that the left sibling of leafbuf (if any) is not
>     * marked with INCOMPLETE_SPLIT flag before proceeding
>     */
>     Assert(leafblkno == scanblkno);
>     if (_bt_leftsib_splitflag(rel, leftsib, leafblkno))
>     {
>          ReleaseBuffer(leafbuf);
>          return;
>     }
>
> After unlocking leaf, but before call _bt_leftsib_splitflag, leftsib may
> be already split, and leafbuf's current left sibling is in
> INCOMPLETE_SPLIT status.

In that case, there should be a downlink for 'leafbuf' in the parent,
and we're good to proceed, right? See the comments in
_bt_leftsib_splitflag().

--
Heikki Linnakangas
Neon (https://neon.tech)



--
Regards
Wang Pengfei

pgsql-bugs by date:

Previous
From: PG Bug reporting form
Date:
Subject: BUG #18481: BIGINT Out of Range Error When Selecting Data
Next
From: Guillaume Lelarge
Date:
Subject: Re: BUG #18481: BIGINT Out of Range Error When Selecting Data