pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Noah Misch <noah@leadboat.com>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Fix test races between syscache-update-pruned.spec and autovacuu
Date: Wed, 09 Apr 2025 14:25:15 +0000
Message-ID: <E1u2WMd-003SAV-38@gemulon.postgresql.org> (raw)

Fix test races between syscache-update-pruned.spec and autovacuum.

This spec fails ~3% of my Valgrind runs, and the spec has failed on Valgrind
buildfarm member skink at a similar rate.  Two problems contributed to that:

- A competing buffer pin triggered VACUUM's lazy_scan_noprune() path, causing
  "tuples missed: 1 dead from 1 pages not removed due to cleanup lock
  contention".  FREEZE fixes that.

- The spec ran lazy VACUUM immediately after VACUUM FULL.  The spec implicitly
  assumed lazy VACUUM prunes the one tuple that VACUUM FULL made dead.  First
  wait for old snapshots, making that assumption reliable.

This also adds two forms of defense in depth:

- Wait for snapshots using shared catalog pruning rules (VISHORIZON_SHARED).
  This avoids the removable cutoff moving backward when an XID-bearing
  autoanalyze process runs in another database.  That may never happen in this
  test, but it's cheap insurance.

- Use lazy VACUUM option DISABLE_PAGE_SKIPPING.  Commit
  c2dc1a79767a0f947e1145f82eb65dfe4360d25f did this for a related requirement
  in other tests, but I suspect FREEZE is necessary and sufficient in all
  these tests.

Back-patch to v17, where the test first appeared.

Reported-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/sv3taq4e6ea4qckimien3nxp3sz4b6cw6sfcy4nhwl52zpur4g@h6i6tohxmizu
Backpatch-through: 17

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/5bbc596391aeaf9042536cc25ce71f1e4fce6db8

Modified Files
--------------
.../expected/syscache-update-pruned.out            |  6 ++---
.../expected/syscache-update-pruned_1.out          |  6 ++---
.../modules/injection_points/regress_injection.c   | 17 +++++++++----
.../specs/syscache-update-pruned.spec              | 28 ++++++++++++++++++----
4 files changed, 41 insertions(+), 16 deletions(-)



view thread (2+ messages)

Message-ID: <E1u2WMd-003SAV-38@gemulon.postgresql.org>
Permalink:  ../E1u2WMd-003SAV-38@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1u2WMd-003SAV-38@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: noah@leadboat.com, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Fix test races between syscache-update-pruned.spec and autovacuu
  In-Reply-To: <E1u2WMd-003SAV-38@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox