Re: Optimize LISTEN/NOTIFY
Joel Jacobson <joel@compiler.org>
From: "Joel Jacobson" <joel@compiler.org>
To: "Arseniy Mukhin" <arseniy.mukhin.dev@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2025-11-12T20:53:17Z
Lists: pgsql-hackers
On Wed, Nov 12, 2025, at 21:37, Joel Jacobson wrote: > Sequence of events: > > 1. In the notifier, PreCommit_Notify calls asyncQueueAddEntries, > which updates QUEUE_HEAD when the page is full, > (and sets queueHeadAfterWrite to this value). > > 2. At this time, a listener wakes up and asyncQueueAddEntries Correction: I meant "asyncQueueReadAllNotifications" here, not "asyncQueueAddEntries". > reads the current QUEUE_HEAD value and stores it > in its local `head` variable, and starts reading up to this pos. > > 3. In the notifier, PreCommit_Notify calls asyncQueueAddEntries > the second time, which updates QUEUE_HEAD, > and sets queueHeadAfterWrite to the final value > before returning. > > For this reason, I think the listener could actually stop > in between queueHeadBeforeWrite and queueHeadAfterWrite, > since it's local `head` variable could get the intermediary > QUEUE_HEAD value, when a page is full. /Joel