Re: [HACKERS] ginInsertCleanup called from vacuum could still miss tuples to be deleted
Robert Haas <robertmhaas@gmail.com>
From: Robert Haas <robertmhaas@gmail.com>
To: Peter Geoghegan <pg@bowt.ie>
Cc: Masahiko Sawada <sawada.mshk@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2017-11-16T20:44:28Z
Lists: pgsql-hackers
On Mon, Nov 13, 2017 at 8:48 PM, Peter Geoghegan <pg@bowt.ie> wrote: > One thing that really bothers me about commit e2c79e14 is that > LockPage() is called, not LockBuffer(). GIN had no LockPage() calls > before that commit, and is now the only code in the entire system that > calls LockPage()/ConditionalLockPage() (the hash am no longer uses > page heavyweight locks following recent work there). I would like to get rid of that LockPage() call, for sure, because it's problematic in terms of allowing writes in parallel mode. However, I think the reason here is the same as why the hash AM used to use them. If you use a buffer lock, you really can't -- or shoudn't, at least -- hold it across a whole series of operations, because anyone waiting for that lock is waiting *uninterruptibly*. The hash AM wanted to iterate through all of the pages in a bucket chain and do something to each one while preventing concurrent scans; the need here is similar. Aside from the uninterruptible-wait problem, such coding patterns are extremely prone to deadlock. If there's any chance that a process waiting for the buffer lock you hold might be holding a buffer lock you try to acquire, you have got a problem. I don't view the use of LockPage() here as wrong or scary. I find that it's impeding some of my own development goals, but that's not to say it wasn't a good choice for the problem that they were trying to solve. Had they solved it some other way, parallel writes might be easier, but you can't win 'em all. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Fix broken cleanup interlock for GIN pending list.
- 19648ce55336 9.6.7 landed
- c8df4831ef21 10.2 landed
- 3b2787e1f8f1 11.0 landed
-
Prevent multiple cleanup process for pending list in GIN.
- e2c79e14d998 9.6.0 cited
-
Add pages deleted from pending list to FSM
- e95680832854 9.6.0 cited
-
Fix race condition in GIN posting tree page deletion.
- ac4ab97ec05e 9.4.0 cited