Hi, Xiaoran, I see. The code is checking if the bits other than rmgr bits, XLR_SPECIAL_REL_UPDATE and XLR_CHECK_CONSISTENCY are used.
Thanks for explanation. Steven 在 2025/6/11 10:13, Xiaoran Wang 写道: > > > Steven Niu <niush...@gmail.com <mailto:niush...@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