]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Report any XLogReadRecord() error in XlogReadTwoPhaseData().
authorNoah Misch <noah@leadboat.com>
Fri, 12 Nov 2021 01:10:18 +0000 (17:10 -0800)
committerNoah Misch <noah@leadboat.com>
Fri, 12 Nov 2021 01:11:17 +0000 (17:11 -0800)
Buildfarm members kittiwake and tadarida have witnessed errors at this
site.  The site discarded key facts.  Back-patch to v10 (all supported
versions).

Reviewed by Michael Paquier and Tom Lane.

Discussion: https://postgr.es/m/20211107013157.GB790288@rfd.leadboat.com

src/backend/access/transam/twophase.c

index 89130fa21df1189244424e2b71cc5cae5878bfb9..395ec05f0086662c2a48d75a6d5f8880a5e87afa 100644 (file)
@@ -1454,11 +1454,21 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len)
        ThisTimeLineID = save_currtli;
 
        if (record == NULL)
-               ereport(ERROR,
-                               (errcode_for_file_access(),
-                                errmsg("could not read two-phase state from WAL at %X/%X",
-                                               (uint32) (lsn >> 32),
-                                               (uint32) lsn)));
+       {
+               if (errormsg)
+                       ereport(ERROR,
+                                       (errcode_for_file_access(),
+                                        errmsg("could not read two-phase state from WAL at %X/%X: %s",
+                                                       (uint32) (lsn >> 32),
+                                                       (uint32) lsn,
+                                                       errormsg)));
+               else
+                       ereport(ERROR,
+                                       (errcode_for_file_access(),
+                                        errmsg("could not read two-phase state from WAL at %X/%X",
+                                                       (uint32) (lsn >> 32),
+                                                       (uint32) lsn)));
+       }
 
        if (XLogRecGetRmid(xlogreader) != RM_XACT_ID ||
                (XLogRecGetInfo(xlogreader) & XLOG_XACT_OPMASK) != XLOG_XACT_PREPARE)