Re: LISTEN/NOTIFY bug: VACUUM sets frozenxid past a xid in async queue
Joel Jacobson <joel@compiler.org>
From: "Joel Jacobson" <joel@compiler.org>
To: "Arseniy Mukhin" <arseniy.mukhin.dev@gmail.com>, Álvaro Herrera <alvherre@kurilemu.de>
Cc: "Matheus Alcantara" <matheusssilv97@gmail.com>,
"Masahiko Sawada" <sawada.mshk@gmail.com>,
"Rishu Bagga" <rishu.postgres@gmail.com>,
"Yura Sokolov" <y.sokolov@postgrespro.ru>,
"Daniil Davydov" <3danissimo@gmail.com>,
"Alexandra Wang" <alexandra.wang.oss@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>, "Tom Lane" <tgl@sss.pgh.pa.us>
Date: 2025-10-18T05:43:15Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Clear 'xid' in dummy async notify entries written to fill up pages
- 84f1bf4afa5e 14.21 landed
- 21a9014cf00a 15.16 landed
- 0e8eaa2181d4 16.12 landed
- d80d5f099502 17.8 landed
- 82fa6b78dba1 18.2 landed
- 0bdc777e8007 19 (unreleased) landed
-
Fix remaining race condition with CLOG truncation and LISTEN/NOTIFY
- c2e58c0711fe 14.21 landed
- 0c862646cf2a 15.16 landed
- 44e8c60be66c 16.12 landed
- c2682810ab7d 17.8 landed
- 7b069a1876e4 18.2 landed
- 797e9ea6e54b 19 (unreleased) landed
-
Fix bug where we truncated CLOG that was still needed by LISTEN/NOTIFY
- eba917d360e7 14.21 landed
- 1a469d7b5b7d 15.16 landed
- 053e1868b7ee 16.12 landed
- d02c03ddc5e3 17.8 landed
- 321ec54625fd 18.2 landed
- 8eeb4a0f7c06 19 (unreleased) landed
-
Escalate ERRORs during async notify processing to FATAL
- 7cb05dd2d198 14.21 landed
- b1da37de21d4 15.16 landed
- c1a5bde003b8 16.12 landed
- b821c92920f0 17.8 landed
- aab4a84bb070 18.2 landed
- 1b4699090eaf 19 (unreleased) landed
-
Limit the size of TID lists during parallel GIN build
- c98dffcb7c70 19 (unreleased) cited
On Fri, Oct 17, 2025, at 22:50, Arseniy Mukhin wrote: > On Fri, Oct 17, 2025 at 7:31 PM Álvaro Herrera <alvherre@kurilemu.de> wrote: >> >> I have the impression that this thread has lost focus on the idea of >> producing a backpatchable bugfix. The last proposed patch has a lot of >> new mechanism that doesn't seem suitable for backpatch. I could be >> wrong of course. >> > > Oops, I guess the TAP test that I added in the last version and that > uses injection points is one of those things. PFA the new version > without it. I also noticed that CheckSharedObjectLockedByMe() which > was introduced in one of previous versions is unused, so I removed it > too. What a funny coincidence that the approach in this patch, has one similarity with the "Direct advancement" approach in the patch in the "Optimize LISTEN/NOTIFY" [1] thread, namely that we're both interested in QUEUE_HEAD before/after we push the notifications into the queue, in PreCommit_Notify(). It looks to me like our new data structures are Interchangeable, so I guess we probably want both patches to eventually settle on one and the same? The differences I note between our queue head before/after code are: - In this patch, you are palloc'ing a struct with two fields. In [1], we're using two separate static QueuePosition variables. - In this patch, you are taking/releasing a shared lock before/after the loop to read QUEUE_HEAD and set previousHead/head. In [1], we avoid the need of the shared lock, by doing the reads within the existing exclusive lock inside the loop, but instead therefore need a firstIteration bool, to know which is the first iteration, and need to overwrite the after-var in each iteration. I don't think the noted differences above matter, both seems fine. Another thing I noticed in your patch that made me wonder, is the naming of the new AsyncQueueEntry bool field, which is given the name "committed". I think this name is not entirely faithful, since when set to true, the entry has not been committed yet. How about negating the meaning of this boolean field? To instead indicate when the entry has been rollbacked. Then, it would clearly communicate just that. Maybe naming it something like "rollbacked" or "aborted"? /Joel [1] https://www.postgresql.org/message-id/flat/6899c044-4a82-49be-8117-e6f669765f7e%40app.fastmail.com