Re: Connections hang indefinitely while taking a gin index's LWLock buffer_content lock(PG10.7)
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Alexander Korotkov <a.korotkov@postgrespro.ru>
Cc: chenhj <chjischj@163.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2019-09-29T19:52:43Z
Lists: pgsql-hackers
On Sun, Sep 29, 2019 at 7:38 AM Alexander Korotkov <a.korotkov@postgrespro.ru> wrote: > Starting from root seems OK for me, because vacuum blocks all > concurrent inserts before doing this. But this needs to be properly > documented in readme. I never got an adequate answer to this closely related question almost two years ago: https://www.postgresql.org/message-id/CAH2-Wz=GTnAPzEEZqYELOv3h1Fxpo5xhMrBP6aMGEKLKv95csQ@mail.gmail.com In general, ginInsertCleanup() seems badly designed. Why is it okay that there is no nbtree-style distinction between page deletion and page recycling? > Locking from right to left is clearly wrong. It could deadlock with > concurrent ginStepRight(), which locks from left to right. I expect > this happened in your case. I'm going to reproduce this and fix. I am sick and tired of seeing extremely basic errors like this within GIN's locking protocols. Bugs happen, but these are not ordinary bugs. They're more or less all a result of giving no thought to the high level design. I'm not blaming you for this, or any one person. But this is not okay. Anything around index concurrency needs to be explained in excruciating detail, while taking a top-down approach that applies general rules (e.g. you can only do lock coupling left to right, or bottom to top in nbtree). Anything less than that should be assumed to be wrong on general principle. -- Peter Geoghegan
Commits
-
Fix traversing to the deleted GIN page via downlink
- ab64b474d9be 10.12 landed
- c0bf35421529 11.7 landed
- ee437ca7408b 12.2 landed
- d5ad7a09afd0 13.0 landed
- 1414821e1688 9.4.26 landed
- 4fc4856849de 9.5.21 landed
- 99f5888d358a 9.6.17 landed
-
Revise GIN README
- b6f57c2d7bfc 10.12 landed
- 287192bda245 11.7 landed
- ca05fa5375eb 12.2 landed
- 32ca32d0bed4 13.0 landed
- 91ce01a6e07b 9.4.26 landed
- 8165384babd9 9.5.21 landed
- 84dcf5235984 9.6.17 landed
-
Fix deadlock between ginDeletePage() and ginStepRight()
- 21ad61ab3178 10.12 landed
- 9f292798992e 11.7 landed
- 051c50c01c32 12.2 landed
- e14641197a56 13.0 landed