Re: Preventing hangups in bgworker start/stop during DB shutdown
Craig Ringer <craig.ringer@enterprisedb.com>
From: Craig Ringer <craig.ringer@enterprisedb.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2021-01-22T08:13:22Z
Lists: pgsql-hackers
On Fri, 25 Dec 2020 at 06:07, Tom Lane <tgl@sss.pgh.pa.us> wrote: > I wrote: > > Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com> writes: > >> 4) IIUC, in the patch we mark slot->terminate = true only for > >> BGW_NEVER_RESTART kind bg workers, what happens if a bg worker has > >> bgw_restart_time seconds and don't we hit the hanging issue(that we > >> are trying to solve here) for those bg workers? > > > The hang problem is not with the worker itself, it's with anything > > that might be waiting around for the worker to finish. It doesn't > > seem to me to make a whole lot of sense to wait for a restartable > > worker; what would that mean? > > Upon further looking around, I noted that autoprewarm's > autoprewarm_start_worker() function does that, so we can't really > dismiss it. > > However, what we can do instead is to change the condition to be > "cancel pending bgworker requests if there is a waiting process". > Almost all of the time, that means it's a dynamic bgworker with > BGW_NEVER_RESTART, so there's no difference. In the exceptional > cases like autoprewarm_start_worker, this would result in removing > a bgworker registration record for a restartable worker ... but > since we're shutting down, that record would have no effect before > the postmaster exits, anyway. I think we can live with that, at > least till such time as somebody redesigns this in a cleaner way. > > I pushed a fix along those lines. > > Thanks for the change. Cleanups like this in the BGW API definitely make life easier.
Commits
-
Fix race condition between shutdown and unstarted background workers.
- b99b6b9d6cac 11.11 landed
- 7519bd16d1a2 14.0 landed
- 3d8068edce13 12.6 landed
- 1a6b1c460b4f 10.16 landed
- 0217ad806637 13.2 landed