pgsql: Prevent excess SimpleLruTruncate() deletion.

From: Noah Misch <noah(at)leadboat(dot)com>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Prevent excess SimpleLruTruncate() deletion.
Date: 2021-01-16 20:22:20
Message-ID: E1l0s5U-0002My-0I@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Prevent excess SimpleLruTruncate() deletion.

Every core SLRU wraps around. With the exception of pg_notify, the wrap
point can fall in the middle of a page. Account for this in the
PagePrecedes callback specification and in SimpleLruTruncate()'s use of
said callback. Update each callback implementation to fit the new
specification. This changes SerialPagePrecedesLogically() from the
style of asyncQueuePagePrecedes() to the style of CLOGPagePrecedes().
(Whereas pg_clog and pg_serial share a key space, pg_serial is nothing
like pg_notify.) The bug fixed here has the same symptoms and user
followup steps as 592a589a04bd456410b853d86bd05faa9432cbbb. Back-patch
to 9.5 (all supported versions).

Reviewed by Andrey Borodin and (in earlier versions) by Tom Lane.

Discussion: https://postgr.es/m/20190202083822.GC32531@gust.leadboat.com

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1a31d8c52db4220f162ed3c4812569843daf950e

Modified Files
--------------
src/backend/access/transam/clog.c | 27 +++++--
src/backend/access/transam/commit_ts.c | 34 +++++---
src/backend/access/transam/multixact.c | 38 +++++----
src/backend/access/transam/slru.c | 143 +++++++++++++++++++++++++++++----
src/backend/access/transam/subtrans.c | 17 ++--
src/backend/commands/async.c | 7 +-
src/backend/storage/lmgr/predicate.c | 109 +++++++++++++++++++++----
src/include/access/slru.h | 16 +++-
8 files changed, 312 insertions(+), 79 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Jeff Davis 2021-01-16 22:49:33 pgsql: Documenation fixups for replication protocol.
Previous Message Noah Misch 2021-01-16 20:22:19 pgsql: Fix pg_dump for GRANT OPTION among initial privileges.