Re: Orphan page in _bt_split - Mailing list pgsql-hackers

From Konstantin Knizhnik
Subject Re: Orphan page in _bt_split
Date
Msg-id d3c77645-156d-4049-9013-082e34c6f21e@garret.ru
Whole thread Raw
In response to Re: Orphan page in _bt_split  (Michael Paquier <michael@paquier.xyz>)
Responses Re: Orphan page in _bt_split
List pgsql-hackers
On 25/09/2025 7:35 AM, Michael Paquier wrote:
> On Mon, Sep 22, 2025 at 07:44:18PM +0300, Константин Книжник wrote:
>> Attached please find rebased version of the patch with fixed mistypings.
> I have looked at v3.
>
> -   leftpage = PageGetTempPage(origpage);
> +   leftpage = leftpage_buf.data;
> +   memcpy(leftpage, origpage, BLCKSZ);
>      _bt_pageinit(leftpage, BufferGetPageSize(buf));
>
> What's the point of copying the contents of origpage to leftpage?
> _bt_pageinit() is going to initialize leftpage (plus a few more things
> set like the  page LSN, etc.), so the memcpy should not be necessary,
> no?
>
> +   rightpage = BufferGetPage(rbuf);
> +   memcpy(rightpage, rightpage_buf.data, BLCKSZ);
> +   ropaque = BTPageGetOpaque(rightpage);
>
> When we reach this state of the logic, aka at the beginning of the
> critical section, the right and left pages are in a correct state,
> and your code is OK because we copy the contents of the right page
> back into its legitimate place.  What is not OK to me is that the
> copy of the "temporary" right page back to "rbuf" is not explained.  I
> think that this deserves a comment, especially the part about ropaque
> which is set once by this proposal, then manipulated while in the
> critical section.
> --
> Michael


Sorry, I have attached wrong patch.



Attachment

pgsql-hackers by date:

Previous
From: Dilip Kumar
Date:
Subject: Re: Proposal: Conflict log history table for Logical Replication
Next
From: Michael Paquier
Date:
Subject: Re: Get rid of pgstat_count_backend_io_op*() functions