Make some xlogreader messages more accurate
authorPeter Eisentraut
Thu, 2 Mar 2023 06:42:39 +0000 (07:42 +0100)
committerPeter Eisentraut
Thu, 2 Mar 2023 06:46:12 +0000 (07:46 +0100)
When you have some invalid WAL, you often get a message like "wanted
24, got 0".  This is a bit incorrect, since it really wanted *at
least* 24, not exactly 24.  This updates the messages to that effect,
and also adds that detail to one message where it was available but
not printed.

Reviewed-by: Bharath Rupireddy
Reviewed-by: Jeevan Ladhe
Discussion: https://www.postgresql.org/message-id/flat/726d782b-5e45-0c3e-d775-6686afe9aa83%40enterprisedb.com

src/backend/access/transam/xlogreader.c

index aa6c929477d3897d92a26ea9b857c5e85e24c3ac..cadea21b3760f0594aac269ee9ed86a526cfb1aa 100644 (file)
@@ -623,8 +623,9 @@ restart:
    }
    else if (targetRecOff < pageHeaderSize)
    {
-       report_invalid_record(state, "invalid record offset at %X/%X",
-                             LSN_FORMAT_ARGS(RecPtr));
+       report_invalid_record(state, "invalid record offset at %X/%X: expected at least %u, got %u",
+                             LSN_FORMAT_ARGS(RecPtr),
+                             pageHeaderSize, targetRecOff);
        goto err;
    }
 
@@ -672,7 +673,7 @@ restart:
        if (total_len < SizeOfXLogRecord)
        {
            report_invalid_record(state,
-                                 "invalid record length at %X/%X: wanted %u, got %u",
+                                 "invalid record length at %X/%X: expected at least %u, got %u",
                                  LSN_FORMAT_ARGS(RecPtr),
                                  (uint32) SizeOfXLogRecord, total_len);
            goto err;
@@ -1119,7 +1120,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
    if (record->xl_tot_len < SizeOfXLogRecord)
    {
        report_invalid_record(state,
-                             "invalid record length at %X/%X: wanted %u, got %u",
+                             "invalid record length at %X/%X: expected at least %u, got %u",
                              LSN_FORMAT_ARGS(RecPtr),
                              (uint32) SizeOfXLogRecord, record->xl_tot_len);
        return false;