Improve behavior of concurrent TRUNCATE - Mailing list pgsql-hackers

From Michael Paquier
Subject Improve behavior of concurrent TRUNCATE
Date
Msg-id 20180806165816.GA19883@paquier.xyz
Whole thread Raw
Responses Re: Improve behavior of concurrent TRUNCATE
Re: Improve behavior of concurrent TRUNCATE
List pgsql-hackers
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

Attachment

pgsql-hackers by date:

Previous
From: Stephen Frost
Date:
Subject: Re: Standby trying "restore_command" before local WAL
Next
From: Jaime Casanova
Date:
Subject: Re: Standby trying "restore_command" before local WAL