pgsql: Prevent deadlock in ginRedoDeletePage()
От | Alexander Korotkov |
---|---|
Тема | pgsql: Prevent deadlock in ginRedoDeletePage() |
Дата | |
Msg-id | E1gXI70-0005UH-Qx@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Prevent deadlock in ginRedoDeletePage() On standby ginRedoDeletePage() can work concurrently with read-only queries. Those queries can traverse posting tree in two ways. 1) Using rightlinks by ginStepRight(), which locks the next page before unlocking its left sibling. 2) Using downlinks by ginFindLeafPage(), which locks at most one page at time. Original lock order was: page, parent, left sibling. That lock order can deadlock with ginStepRight(). In order to prevent deadlock this commit changes lock order to: left sibling, page, parent. Note, that position of parent in locking order seems insignificant, because we only lock one page at time while traversing downlinks. Reported-by: Chen Huajun Diagnosed-by: Chen Huajun, Peter Geoghegan, Andrey Borodin Discussion: https://postgr.es/m/31a702a.14dd.166c1366ac1.Coremail.chjischj%40163.com Author: Alexander Korotkov Backpatch-through: 9.4 Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/c6ade7a8cd3135af0c5d29abf39a6a83b9f6a66a Modified Files -------------- src/backend/access/gin/ginxlog.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-)
В списке pgsql-committers по дате отправления: