pgsql: Integrate FullTransactionIds deeper into two-phase code - Mailing list pgsql-committers

From Michael Paquier
Subject pgsql: Integrate FullTransactionIds deeper into two-phase code
Date
Msg-id E1uYd4X-0053MF-16@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Integrate FullTransactionIds deeper into two-phase code

This refactoring is a follow-up of the work done in 5a1dfde8334b, that
has switched 2PC file names to use FullTransactionIds when written on
disk.  This will help with the integration of a follow-up solution
related to the handling of two-phase files during recovery, to address
older defects while reading these from disk after a crash.

This change is useful in itself as it reduces the need to build the
file names from epoch numbers and TransactionIds, because we can use
directly FullTransactionIds from which the 2PC file names are guessed.
So this avoids a lot of back-and-forth between the FullTransactionIds
retrieved from the file names and how these are passed around in the
internal 2PC logic.

Note that the core of the change is the use of a FullTransactionId
instead of a TransactionId in GlobalTransactionData, that tracks 2PC
file information in shared memory.  The change in TwoPhaseCallback makes
this commit unfit for stable branches.

Noah has contributed a good chunk of this patch.  I have spent some time
on it as well while working on the issues with two-phase state files and
recovery.

Author: Noah Misch <noah@leadboat.com>
Co-Authored-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/Z5sd5O9JO7NYNK-C@paquier.xyz
Discussion: https://postgr.es/m/20250116205254.65.nmisch@google.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/62a17a92833d1eaa60d8ea372663290942a1e8eb

Modified Files
--------------
src/backend/access/transam/multixact.c       |  16 +-
src/backend/access/transam/twophase.c        | 245 ++++++++++++++++-----------
src/backend/access/transam/xact.c            |  13 +-
src/backend/storage/lmgr/lock.c              |  20 +--
src/backend/storage/lmgr/predicate.c         |  11 +-
src/backend/utils/activity/pgstat_relation.c |   4 +-
src/include/access/multixact.h               |   9 +-
src/include/access/twophase.h                |  11 +-
src/include/access/twophase_rmgr.h           |   4 +-
src/include/pgstat.h                         |   4 +-
src/include/storage/lock.h                   |  11 +-
src/include/storage/predicate.h              |   6 +-
12 files changed, 200 insertions(+), 154 deletions(-)


pgsql-committers by date:

Previous
From: Michael Paquier
Date:
Subject: pgsql: Fix incompatibility with libxml2 >= 2.14
Next
From: Álvaro Herrera
Date:
Subject: pgsql: Standardize LSN formatting by zero padding