HI > And I suggest to create a macro to do this job. > #define getRmgrInfo(info) (info & XLR_RMGR_INFO_MASK) > > Then the code can become: > XLogRecGetInfo(record) & ~XLR_INFO_MASK; > --> > getRmgrInfo(XLogRecGetInfo(record)) +1 Agreed, this makes the code more readable.
Thanks On Mon, Jun 9, 2025 at 2:46 PM Steven Niu <niush...@gmail.com> wrote: > Hi, > > I like the idea of your change as it saves me out of converting-in-my-mind. > > And I suggest to create a macro to do this job. > #define getRmgrInfo(info) (info & XLR_RMGR_INFO_MASK) > > Then the code can become: > XLogRecGetInfo(record) & ~XLR_INFO_MASK; > --> > getRmgrInfo(XLogRecGetInfo(record)); > > Thanks, > Steven > > > 在 2025/6/9 14:23, Xiaoran Wang 写道: > > Hi, > > I refactored the code of extracting XLogRecord info. > > In XLogRecord, the high 4 bits in xl_info is used by rmgr. > > > > typedef struct XLogRecord > > { > > uint32 xl_tot_len; /* total len of entire record */ > > TransactionId xl_xid; /* xact id */ > > XLogRecPtr xl_prev; /* ptr to previous record in log */ > > uint8 xl_info; /* flag bits, see below */ > > RmgrId xl_rmid; /* resource manager for this record */ > > /* 2 bytes of padding here, initialize to zero */ > > pg_crc32c xl_crc; /* CRC for this record */ > > > > /* XLogRecordBlockHeaders and XLogRecordDataHeader follow, no > > padding */ > > > > } XLogRecord; > > > > I found lots of the code to get the info as below > > > > XLogRecGetInfo(record) & ~XLR_INFO_MASK > > > > Actually, we can directly use XLR_RMGR_INFO_MASK(0xF0) > > instead of XLR_INFO_MASK(0x0F), which is easier to understand. > > Remove XLR_INFO_MASK as it is not used any more. > > > > > > -- > > Best regards ! > > Xiaoran Wang > > > >