From: Noah Misch <noah@leadboat.com>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Assert lack of hazardous buffer locks before possible catalog re
Date: Thu, 17 Apr 2025 12:04:34 +0000
Message-ID: <E1u5Nys-000Txe-1A@gemulon.postgresql.org> (raw)
Assert lack of hazardous buffer locks before possible catalog read.
Commit 0bada39c83a150079567a6e97b1a25a198f30ea3 fixed a bug of this kind,
which existed in all branches for six days before detection. While the
probability of reaching the trouble was low, the disruption was extreme. No
new backends could start, and service restoration needed an immediate
shutdown. Hence, add this to catch the next bug like it.
The new check in RelationIdGetRelation() suffices to make autovacuum detect
the bug in commit 243e9b40f1b2dd09d6e5bf91ebf6e822a2cd3704 that led to commit
0bada39. This also checks in a number of similar places. It replaces each
Assert(IsTransactionState()) that pertained to a conditional catalog read.
No back-patch for now, but a back-patch of commit 243e9b4 should back-patch
this, too. A back-patch could omit the src/test/regress changes, since back
branches won't gain new index columns.
Reported-by: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://postgr.es/m/20250410191830.0e.nmisch@google.com
Discussion: https://postgr.es/m/10ec0bc3-5933-1189-6bb8-5dec4114558e@gmail.com
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/f4ece891fc2f3f96f0571720a1ae30db8030681b
Modified Files
--------------
src/backend/catalog/catalog.c | 31 ++++++++++++++
src/backend/storage/buffer/bufmgr.c | 70 +++++++++++++++++++++++++++++++
src/backend/storage/lmgr/lwlock.c | 15 +++++++
src/backend/utils/adt/pg_locale.c | 2 +
src/backend/utils/cache/catcache.c | 51 +++++++++++++++-------
src/backend/utils/cache/inval.c | 14 ++++++-
src/backend/utils/cache/relcache.c | 26 +++++++++---
src/backend/utils/mb/mbutils.c | 2 +-
src/include/catalog/catalog.h | 1 +
src/include/storage/bufmgr.h | 3 ++
src/include/storage/lwlock.h | 2 +
src/include/utils/relcache.h | 8 ++++
src/test/regress/expected/type_sanity.out | 19 +++++++++
src/test/regress/regress.c | 8 ++++
src/test/regress/sql/type_sanity.sql | 20 +++++++++
15 files changed, 248 insertions(+), 24 deletions(-)
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: Assert lack of hazardous buffer locks before possible catalog re
In-Reply-To: <E1u5Nys-000Txe-1A@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