Re: [PATCH] Refactor: Extract XLogRecord info
Xiaoran Wang <fanfuxiaoran@gmail.com>
From: Xiaoran Wang <fanfuxiaoran@gmail.com>
To: Steven Niu <niushiji@gmail.com>
Cc: wenhui qiu <qiuwenhuifx@gmail.com>, Michael Paquier <michael@paquier.xyz>, Fabrízio de Royes Mello <fabriziomello@gmail.com>, pgsql-hackers@lists.postgresql.org
Date: 2025-06-11T02:13:41Z
Lists: 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