pgsql: Replace RelationOpenSmgr() with RelationGetSmgr(). - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Replace RelationOpenSmgr() with RelationGetSmgr().
Date
Msg-id E1ovmqc-000eik-6j@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Replace RelationOpenSmgr() with RelationGetSmgr().

This is a back-patch of the v15-era commit f10f0ae42 into older
supported branches.  The idea is to design out bugs in which an
ill-timed relcache flush clears rel->rd_smgr partway through
some code sequence that wasn't expecting that.  We had another
report today of a corner case that reliably crashes v14 under
debug_discard_caches (nee CLOBBER_CACHE_ALWAYS), and therefore
would crash once in a blue moon in the field.  We're unlikely
to get rid of all such code paths unless we adopt the more
rigorous coding rules instituted by f10f0ae42.  Therefore,
even though this is a bit invasive, it's time to back-patch.
Some comfort can be taken in the fact that f10f0ae42 has been
in v15 for 16 months without problems.

I left the RelationOpenSmgr macro present in the back branches,
even though no core code should use it anymore, in order to not break
third-party extensions in minor releases.  Such extensions might opt
to start using RelationGetSmgr instead, to reduce their code
differential between v15 and earlier branches.  This carries a hazard
of failing to compile against headers from existing minor releases.
However, once compiled the extension should work fine even with such
releases, because RelationGetSmgr is a "static inline" function so
it creates no link-time dependency.  So depending on distribution
practices, that might be an OK tradeoff.

Per report from Spyridon Dimitrios Agathos.  Original patch
by Amul Sul.

Discussion: https://postgr.es/m/CAFM5RaqdgyusQvmWkyPYaWMwoK5gigdtW-7HcgHgOeAw7mqJ_Q@mail.gmail.com
Discussion: https://postgr.es/m/CANiYTQsU7yMFpQYnv=BrcRVqK_3U3mtAzAsJCaqtzsDHfsUbdQ@mail.gmail.com

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/32d5a4974c81aeaca7ffc025f0a5fda88b71cba6

Modified Files
--------------
contrib/amcheck/verify_nbtree.c           |  3 +-
contrib/bloom/blinsert.c                  |  6 ++--
contrib/pg_prewarm/autoprewarm.c          |  4 +--
contrib/pg_prewarm/pg_prewarm.c           |  5 ++-
contrib/pg_visibility/pg_visibility.c     |  6 ++--
src/backend/access/gist/gistbuild.c       | 19 ++++-------
src/backend/access/hash/hashpage.c        |  4 +--
src/backend/access/heap/heapam_handler.c  |  7 ++--
src/backend/access/heap/rewriteheap.c     | 15 +++------
src/backend/access/heap/visibilitymap.c   | 53 ++++++++++++++++---------------
src/backend/access/nbtree/nbtree.c        |  6 ++--
src/backend/access/nbtree/nbtsort.c       | 14 +++-----
src/backend/access/spgist/spginsert.c     | 14 ++++----
src/backend/access/table/tableam.c        |  7 ++--
src/backend/catalog/heap.c                |  2 --
src/backend/catalog/index.c               |  5 ++-
src/backend/catalog/storage.c             | 46 ++++++++++++++++++---------
src/backend/commands/tablecmds.c          |  7 ++--
src/backend/storage/buffer/bufmgr.c       | 24 ++++----------
src/backend/storage/freespace/freespace.c | 52 ++++++++++++++++++------------
src/include/utils/rel.h                   | 34 +++++++++++++++++---
21 files changed, 171 insertions(+), 162 deletions(-)


pgsql-committers by date:

Previous
From: Alvaro Herrera
Date:
Subject: pgsql: Fix MERGE tuple count with DO NOTHING
Next
From: Peter Geoghegan
Date:
Subject: pgsql: Standardize rmgrdesc recovery conflict XID output.