From 71db6459e6e4ef623e98f3b1e3e9fed1bfb0ae3b Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Tue, 2 Nov 2021 08:35:29 +0530 Subject: Replace XLOG_INCLUDE_XID flag with a more localized flag. Commit 0bead9af484c introduced XLOG_INCLUDE_XID flag to indicate that the WAL record contains subXID-to-topXID association. It uses that flag later to mark in CurrentTransactionState that top-xid is logged so that we should not try to log it again with the next WAL record in the current subtransaction. However, we can use a localized variable to pass that information. In passing, change the related function and variable names to make them consistent with what the code is actually doing. Author: Dilip Kumar Reviewed-by: Alvaro Herrera, Amit Kapila Discussion: https://postgr.es/m/E1mSoYz-0007Fh-D9@gemulon.postgresql.org --- src/backend/access/transam/xlog.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/backend/access/transam/xlog.c') diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index f547efd2944..6aca1fd75d9 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -999,6 +999,9 @@ static void WALInsertLockUpdateInsertingAt(XLogRecPtr insertingAt); * 'flags' gives more in-depth control on the record being inserted. See * XLogSetRecordFlags() for details. * + * 'topxid_included' tells whether the top-transaction id is logged along with + * current subtransaction. See XLogRecordAssemble(). + * * The first XLogRecData in the chain must be for the record header, and its * data must be MAXALIGNed. XLogInsertRecord fills in the xl_prev and * xl_crc fields in the header, the rest of the header must already be filled @@ -1014,7 +1017,8 @@ XLogRecPtr XLogInsertRecord(XLogRecData *rdata, XLogRecPtr fpw_lsn, uint8 flags, - int num_fpi) + int num_fpi, + bool topxid_included) { XLogCtlInsert *Insert = &XLogCtl->Insert; pg_crc32c rdata_crc; @@ -1169,6 +1173,13 @@ XLogInsertRecord(XLogRecData *rdata, END_CRIT_SECTION(); + /* + * Mark top transaction id is logged (if needed) so that we should not try + * to log it again with the next WAL record in the current subtransaction. + */ + if (topxid_included) + MarkSubxactTopXidLogged(); + /* * Update shared LogwrtRqst.Write, if we crossed page boundary. */ -- cgit v1.2.3