mirror of
https://github.com/postgres/postgres.git
synced 2025-08-08 06:02:22 +03:00
Improve code around the recently added rm_identify rmgr callback.
There are four weaknesses in728f152e07f998d2cb4fe5f24ec8da2c3bda98f2: * append_init() in heapdesc.c was ugly and required that rm_identify return values are only valid till the next call. Instead just add a couple more switch() cases for the INIT_PAGE cases. Now the returned value will always be valid. * a couple rm_identify() callbacks missed masking xl_info with ~XLR_INFO_MASK. * pg_xlogdump didn't map a NULL rm_identify to UNKNOWN or a similar string. * append_init() was called when id=NULL - which should never actually happen. But it's better to be careful.
This commit is contained in:
@@ -382,8 +382,13 @@ XLogDumpCountRecord(XLogDumpConfig *config, XLogDumpStats *stats, XLogRecPtr Rea
|
||||
static void
|
||||
XLogDumpDisplayRecord(XLogDumpConfig *config, XLogRecPtr ReadRecPtr, XLogRecord *record)
|
||||
{
|
||||
const char *id;
|
||||
const RmgrDescData *desc = &RmgrDescTable[record->xl_rmid];
|
||||
|
||||
id = desc->rm_identify(record->xl_info);
|
||||
if (id == NULL)
|
||||
id = psprintf("UNKNOWN (%x)", record->xl_info & ~XLR_INFO_MASK);
|
||||
|
||||
printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, bkp: %u%u%u%u, desc: %s ",
|
||||
desc->rm_name,
|
||||
record->xl_len, record->xl_tot_len,
|
||||
@@ -394,7 +399,7 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogRecPtr ReadRecPtr, XLogRecord
|
||||
!!(XLR_BKP_BLOCK(1) & record->xl_info),
|
||||
!!(XLR_BKP_BLOCK(2) & record->xl_info),
|
||||
!!(XLR_BKP_BLOCK(3) & record->xl_info),
|
||||
desc->rm_identify(record->xl_info));
|
||||
id);
|
||||
|
||||
/* the desc routine will printf the description directly to stdout */
|
||||
desc->rm_desc(NULL, record);
|
||||
|
Reference in New Issue
Block a user