From 4358d1585121ad5685c08f19516b49d4e3045640 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Fri, 22 Jul 2022 10:05:33 +0900 Subject: [PATCH 2/2] Improve log messages when invalid checkpoint record was found. --- src/backend/access/transam/xlogrecovery.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index e383c2123a..07bb1f03b8 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -638,7 +638,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, else { ereport(FATAL, - (errmsg("could not locate required checkpoint record"), + (errmsg("could not locate a valid checkpoint record in backup_label file"), errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" "Be careful: removing \"%s/backup_label\" will result in a corrupt cluster if restoring from a backup.", @@ -761,7 +761,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, * simplify processing around checkpoints. */ ereport(PANIC, - (errmsg("could not locate a valid checkpoint record"))); + (errmsg("could not locate a valid checkpoint record in control file"))); } memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint)); wasShutdown = ((record->xl_info & ~XLR_INFO_MASK) == XLOG_CHECKPOINT_SHUTDOWN); @@ -3856,7 +3856,8 @@ ReadCheckpointRecord(XLogPrefetcher *xlogprefetcher, XLogRecPtr RecPtr, if (!XRecOffIsValid(RecPtr)) { ereport(LOG, - (errmsg("invalid checkpoint location"))); + (errmsg("invalid checkpoint location: %X/%X", + LSN_FORMAT_ARGS(RecPtr)))); return NULL; } @@ -3866,13 +3867,15 @@ ReadCheckpointRecord(XLogPrefetcher *xlogprefetcher, XLogRecPtr RecPtr, if (record == NULL) { ereport(LOG, - (errmsg("invalid checkpoint record"))); + (errmsg("invalid checkpoint record at %X/%X", + LSN_FORMAT_ARGS(RecPtr)))); return NULL; } if (record->xl_rmid != RM_XLOG_ID) { ereport(LOG, - (errmsg("invalid resource manager ID in checkpoint record"))); + (errmsg("invalid resource manager ID %u in checkpoint record at %X/%X", + record->xl_rmid, LSN_FORMAT_ARGS(RecPtr)))); return NULL; } info = record->xl_info & ~XLR_INFO_MASK; @@ -3880,13 +3883,16 @@ ReadCheckpointRecord(XLogPrefetcher *xlogprefetcher, XLogRecPtr RecPtr, info != XLOG_CHECKPOINT_ONLINE) { ereport(LOG, - (errmsg("invalid xl_info in checkpoint record"))); + (errmsg("invalid xl_info in checkpoint record at %X/%X", + LSN_FORMAT_ARGS(RecPtr)))); return NULL; } - if (record->xl_tot_len != SizeOfXLogRecord + SizeOfXLogRecordDataHeaderShort + sizeof(CheckPoint)) + if (record->xl_tot_len != SizeOfXLogRecord + + SizeOfXLogRecordDataHeaderShort + sizeof(CheckPoint)) { ereport(LOG, - (errmsg("invalid length of checkpoint record"))); + (errmsg("checkpoint record with invalid length at %X/%X", + LSN_FORMAT_ARGS(RecPtr)))); return NULL; } return record; -- 2.36.0