Re: corruption of WAL page header is never reported - Mailing list pgsql-hackers

From Kyotaro Horiguchi
Subject Re: corruption of WAL page header is never reported
Date
Msg-id 20210903.170815.2152681130338917272.horikyota.ntt@gmail.com
Whole thread Raw
In response to Re: corruption of WAL page header is never reported  (Kyotaro Horiguchi <horikyota.ntt@gmail.com>)
List pgsql-hackers
At Fri, 03 Sep 2021 16:55:36 +0900 (JST), Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote in 
> > Yes, I'm fine with your latest patch.
> 
> Thanks. Maybe some additional comment is needed.

Something like this.

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 24165ab03e..b621ad6b0f 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -12496,9 +12496,21 @@ retry:
      *
      * Validating the page header is cheap enough that doing it twice
      * shouldn't be a big deal from a performance point of view.
+     *
+     * Don't call XLogReaderValidatePageHeader here while not in standby mode
+     * so that this function won't return with a valid errmsg_buf.
      */
-    if (!XLogReaderValidatePageHeader(xlogreader, targetPagePtr, readBuf))
+    if (StandbyMode &&
+        !XLogReaderValidatePageHeader(xlogreader, targetPagePtr, readBuf))
     {
+        /*
+         * emit this error right now then retry this page immediately
+         * the message is already translated
+         */
+        if (xlogreader->errormsg_buf[0])
+            ereport(emode_for_corrupt_record(emode, EndRecPtr),
+                    (errmsg_internal("%s", xlogreader->errormsg_buf)));
+
         /* reset any error XLogReaderValidatePageHeader() might have set */
         xlogreader->errormsg_buf[0] = '\0';
         goto next_record_is_invalid;

pgsql-hackers by date:

Previous
From: Kyotaro Horiguchi
Date:
Subject: Re: corruption of WAL page header is never reported
Next
From: A Z
Date:
Subject: Question about an Extension Project