Integrate FullTransactionIds deeper into two-phase code
authorMichael Paquier <michael@paquier.xyz>
Mon, 7 Jul 2025 03:50:40 +0000 (12:50 +0900)
committerMichael Paquier <michael@paquier.xyz>
Mon, 7 Jul 2025 03:50:40 +0000 (12:50 +0900)
commit62a17a92833d1eaa60d8ea372663290942a1e8eb
treebca21f2407bd919c7a770400b10c8f72ac83e0a7
parent8aa54aa7eefbf738999ae855d9192bc57756201e
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: http://postgr.es/m/Z5sd5O9JO7NYNK-C@paquier.xyz
Discussion: http://postgr.es/m/20250116205254.65.nmisch@google.com
12 files changed:
src/backend/access/transam/multixact.c
src/backend/access/transam/twophase.c
src/backend/access/transam/xact.c
src/backend/storage/lmgr/lock.c
src/backend/storage/lmgr/predicate.c
src/backend/utils/activity/pgstat_relation.c
src/include/access/multixact.h
src/include/access/twophase.h
src/include/access/twophase_rmgr.h
src/include/pgstat.h
src/include/storage/lock.h
src/include/storage/predicate.h