Re: VM corruption on standby
Kirill Reshke <reshkekirill@gmail.com>
From: Kirill Reshke <reshkekirill@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Yura Sokolov <y.sokolov@postgrespro.ru>,
Thomas Munro <thomas.munro@gmail.com>, Andrey Borodin <x4mmm@yandex-team.ru>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Melanie Plageman <melanieplageman@gmail.com>
Date: 2025-08-19T18:23:01Z
Lists: pgsql-hackers
On Tue, 19 Aug 2025 at 23:08, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Kirill Reshke <reshkekirill@gmail.com> writes: > > On Tue, 19 Aug 2025 at 21:16, Yura Sokolov <y.sokolov@postgrespro.ru> wrote: > >> `if (CritSectionCount != 0) _exit(2) else proc_exit(1)` in > >> WaitEventSetWaitBlock () solves the issue of inconsistency IF POSTMASTER IS > >> SIGKILLED, and doesn't lead to any problem, if postmaster is not SIGKILL-ed > >> (since postmaster will SIGKILL its children). > > > This fix was proposed in this thread. It fixes inconsistency but it > > replaces one set of problems with another set, namely systems that > > fail to shut down. > > I think a bigger objection is that it'd result in two separate > shutdown behaviors in what's already an extremely under-tested > (and hard to test) scenario. I don't want to have to deal with > the ensuing state-space explosion. Agreed. > I still think that proc_exit(1) is fundamentally the wrong thing > to do if the postmaster is gone: that code path assumes that > the cluster is still functional, which is at best shaky. > I concur though that we'd have to do some more engineering work > before _exit(2) would be a practical solution. Agreed. > In the meantime, it seems like this discussion point arises > only because the presented test case is doing something that > seems pretty unsafe, namely invoking WaitEventSet inside a > critical section. Agreed. > We'd probably be best off to get back to the actual bug the > thread started with, namely whether we aren't doing the wrong > thing with VM-update order of operations. > > regards, tom lane My understanding is that there is no bug in the VM. At least not in [0] test, because it uses an injection point in the CRIT section, making the server exit too early. So, behaviour with inj point and without are very different. The corruption we are looking for has to reproducer (see [1]). [0] https://www.postgresql.org/message-id/B3C69B86-7F82-4111-B97F-0005497BB745%40yandex-team.ru [1] https://www.postgresql.org/message-id/CALdSSPhGQ1xx10c2NaZgce8qmi%2BSuKFp6T1uWG_aZvPpvoJRkQ%40mail.gmail.com -- Best regards, Kirill Reshke
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Revert "Get rid of WALBufMappingLock"
- 2ce6abdf5085 18.0 landed
- c13070a27b63 19 (unreleased) landed
-
Get rid of WALBufMappingLock
- bc22dc0e0ddc 18.0 cited
-
Split WaitEventSet functions to separate source file
- 393e0d231405 18.0 cited
-
Add WL_EXIT_ON_PM_DEATH pseudo-event.
- cfdf4dc4fc96 12.0 cited