Steven Niu <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