From: | Kirill Reshke <reshkekirill(at)gmail(dot)com> |
---|---|
To: | Andrey Borodin <x4mmm(at)yandex-team(dot)ru> |
Cc: | Dmitry <dsy(dot)075(at)yandex(dot)ru>, Álvaro Herrera <alvherre(at)kurilemu(dot)de>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: IPC/MultixactCreation on the Standby server |
Date: | 2025-08-20 08:19:47 |
Message-ID: | CALdSSPhmiNMzfxtUZDDZ=jbEq9ss_Up4TDMrwhhrvUoTj0dx-A@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Thu, 31 Jul 2025 at 11:29, Andrey Borodin <x4mmm(at)yandex-team(dot)ru> wrote:
>
>
>
> > On 29 Jul 2025, at 23:15, Andrey Borodin <x4mmm(at)yandex-team(dot)ru> wrote:
> >
> > I do not understand it yet.
>
> OK, I figured it out. SimpleLruDoesPhysicalPageExist() was reading a physical file and could race with real extension by ExtendMultiXactOffset().
> So I used ExtendMultiXactOffset(actual + 1). I hope this does not open a loop for wraparound...
>
> Here's an updated two patches, one for Postgres 17 and one for mater(with a test).
Hi!
+ /*
+ * We might have filled this offset previosuly.
+ * Cross-check for correctness.
+ */
+ Assert((*offptr == 0) || (*offptr == offset));
Should we exit here with errcode(ERRCODE_DATA_CORRUPTED) if *offptr !=
0 and *offptr != offset?
+ /* Read and adjust next page */
+ next_slotno = SimpleLruReadPage(MultiXactOffsetCtl, next_pageno, true, next);
+ next_offptr = (MultiXactOffset *)
MultiXactOffsetCtl->shared->page_buffer[next_slotno];
+ next_offptr[next_entryno] = offset + nmembers;
should we check the value of next_offptr[next_entryno] to be equal to
zero or offset + nmembers ? Assert or
errcode(ERRCODE_DATA_CORRUPTED) also.
--
Best regards,
Kirill Reshke
From | Date | Subject | |
---|---|---|---|
Next Message | Antonin Houska | 2025-08-20 08:33:49 | Re: Adding REPACK [concurrently] |
Previous Message | Chao Li | 2025-08-20 08:14:15 | Re: Remove traces of long in dynahash.c |