Improve behavior of concurrent TRUNCATE
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Postgres hackers <pgsql-hackers@postgresql.org>
Date: 2018-08-06T16:58:16Z
Lists: pgsql-hackers
Attachments
- 0001-Refactor-TRUNCATE-execution-to-avoid-too-early-lock-.patch (text/x-diff) patch 0001
Hi all, This is a second thread I am spawning for the previous thread "Canceling authentication due to timeout aka Denial of Service Attack": https://www.postgresql.org/message-id/152512087100.19803.12733865831237526317%40wrigleys.postgresql.org And this time the discussion is about TRUNCATE, as the former thread discussed about a family of failures hence it is harder to catch the proper attention. The problem is that when we look for the relation OID of the relation to truncate, we don't use a callback with RangeVarGetRelidExtended, causing a lock acquire attempt to happen before checking the privileges on the relation for the user running the command. Attached is a patch I have been working on which refactors the code of TRUNCATE in such a way that we check for privileges before trying to acquire a lock, without any user-facing impact (I have reworked a couple of comments compared to the last version). This includes a set of tests showing the new behavior. Like cbe24a6, perhaps we would not want to back-patch it? Based on the past history (and the consensus being reached for the REINDEX case would be to patch only HEAD), I would be actually incline to not back-patch this stuff and qualify that as an improvement. That's also less work for me at commit :) Thoughts? -- Michael
Commits
-
Improve TRUNCATE by avoiding early lock queue
- f841ceb26d70 12.0 landed