Re: hash_xlog_split_allocate_page: failed to acquire cleanup lock
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Andres Freund <andres@anarazel.de>,
Mark Dilger <mark.dilger@enterprisedb.com>,
PostgreSQL-development <pgsql-hackers@postgresql.org>,
Amit Kapila <amit.kapila16@gmail.com>,
Thomas Munro <thomas.munro@gmail.com>
Date: 2022-08-16T21:02:27Z
Lists: pgsql-hackers
Robert Haas <robertmhaas@gmail.com> writes: > I had that thought too, but I don't *think* it's the case. This > function acquires a lock on the oldest bucket page, then on the new > bucket page. We could deadlock if someone who holds a pin on the new > bucket page tries to take a content lock on the old bucket page. But > who would do that? The new bucket page isn't yet linked from the > metapage at this point, so no scan should do that. There can be no > concurrent writers during replay. I think that if someone else has the > new page pinned they probably should not be taking content locks on > other buffers at the same time. Agreed, the core code shouldn't do that, but somebody doing random stuff with pageinspect functions could probably make a query do this. See [1]; unless we're going to reject that bug with "don't do that", I'm not too comfortable with this line of reasoning. regards, tom lane [1] https://www.postgresql.org/message-id/flat/17568-ef121b956ec1559c%40postgresql.org
Commits
-
Fix cleanup lock acquisition in SPLIT_ALLOCATE_PAGE replay.
- e848be60b5cf 16.0 landed
- e49e191815b6 15.2 landed
- 9693f190076e 14.7 landed
- 20c223336301 13.10 landed
- 4dccccb37e0b 12.14 landed
- 1703033f896a 11.19 landed