Re: Orphan page in _bt_split

Поиск
Список
Период
Сортировка
От Michael Paquier
Тема Re: Orphan page in _bt_split
Дата
Msg-id aNTGe2KuCNaRjsqs@paquier.xyz
обсуждение исходный текст
Ответ на Re: Orphan page in _bt_split  (Константин Книжник <knizhnik@garret.ru>)
Ответы Re: Orphan page in _bt_split
Re: Orphan page in _bt_split
Список pgsql-hackers
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

Вложения

В списке pgsql-hackers по дате отправления: