Re: [PATCH] Refactor: Extract XLogRecord info - Mailing list pgsql-hackers

From Xiaoran Wang
Subject Re: [PATCH] Refactor: Extract XLogRecord info
Date
Msg-id CAGjhLkNtcQ3K=6FwoND85m_oXRmi-FWnF17HuoAr=mz2XXrdQQ@mail.gmail.com
Whole thread Raw
In response to Re: [PATCH] Refactor: Extract XLogRecord info  (Steven Niu <niushiji@gmail.com>)
Responses Re: [PATCH] Refactor: Extract XLogRecord info
Re: [PATCH] Refactor: Extract XLogRecord info
List pgsql-hackers


Steven Niu <niushiji@gmail.com> 于2025年6月10日周二 17:56写道:
I'm confused by the code of XLR_RMGR_INFO_MASK and XLR_INFO_MASK.

According to the definition of masks, the high 4 bits are for rmgr.

/*
 * The high 4 bits in xl_info may be used freely by rmgr. The
 * XLR_SPECIAL_REL_UPDATE and XLR_CHECK_CONSISTENCY bits can be passed by
 * XLogInsert caller. The rest are set internally by XLogInsert.
 */
#define XLR_INFO_MASK 0x0F
#define XLR_RMGR_INFO_MASK 0xF0


However, in function XLogInsert(), there is code:

/*
* The caller can set rmgr bits, XLR_SPECIAL_REL_UPDATE and
* XLR_CHECK_CONSISTENCY; the rest are reserved for use by me.
*/
if ((info & ~(XLR_RMGR_INFO_MASK |
 XLR_SPECIAL_REL_UPDATE |
 XLR_CHECK_CONSISTENCY)) != 0)
elog(PANIC, "invalid xlog info mask %02X", info);

XLogInsert only allows the  rmgr ,XLR_SPECIAL_REL_UPDATE and XLR_CHECK_CONSISTENCY
set in the info.
#define XLR_SPECIAL_REL_UPDATE 0x01
#define XLR_CHECK_CONSISTENCY 0x02

As the XLR_SPECIAL_REL_UPDATE and XLR_CHECK_CONSISTENCY are of the low 4 bits,
the above code is indicating the low 4 bits are for rmgr too?

No, only the high 4 bits are used for RMGR, see the code under directory 'src/backend/access/rmgrdesc'

 'XLR_SPECIAL_REL_UPDATE' and 'XLR_CHECK_CONSISTENCY' are not RMGR info, but they 
can be passed by XLogInsert caller.


Did I misunderstand something? 

Thanks,
Steven

--
Best regards !
Xiaoran Wang

pgsql-hackers by date:

Previous
From: shveta malik
Date:
Subject: Re: Replication slot is not able to sync up
Next
From: Junwang Zhao
Date:
Subject: Re: Add a bound check to TidRangeEval