Make some xlogreader messages more accurate
authorPeter Eisentraut <peter@eisentraut.org>
Thu, 2 Mar 2023 06:42:39 +0000 (07:42 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
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 <bharath.rupireddyforpostgres@gmail.com>
Reviewed-by: Jeevan Ladhe <jeevanladhe.os@gmail.com>
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;