Re: Listen / Notify - what to do when the queue is full
Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
From: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
To: Joachim Wieland <joe@mcknight.de>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, "Florian G. Pflug" <fgp@phlo.org>, Josh Berkus <josh@agliodbs.com>, pgsql-hackers@postgresql.org
Date: 2009-11-20T11:34:08Z
Lists: pgsql-hackers
Joachim Wieland wrote: > On Thu, Nov 19, 2009 at 11:04 PM, Joachim Wieland <joe@mcknight.de> wrote: >> Given your example, what I am proposing now is to stop reading from >> the queue once we see a not-yet-committed notification but once the >> queue is full, read the uncommitted notifications, effectively copying >> them over into the backend's own memory... Once the transaction >> commits and sends a signal, we can process, send and discard the >> previously copied notifications. In the above example, at some point >> one, two or all three backends would see that the queue is full and >> everybody would read the uncommitted notifications of the other one, >> copy them into the own memory and space will be freed in the queue. > > Attached is the patch that implements the described modifications. That's still not enough if session 2 that issues the LISTEN wasn't previously subscribed to any channels. It will still miss the notification. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com