On Sun, Oct 24, 2021 at 04:35:02PM -0700, Noah Misch wrote:
> https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=kittiwake&dt=2021-10-24%2012%3A01%3A10
> got an interesting v9.6 failure [...]:
> 
> 2021-10-24 14:25:29.263 CEST [34569:175] pgbench ERROR:  could not read 
> two-phase state from xlog at 0/158F4E0
> 2021-10-24 14:25:29.263 CEST [34569:176] pgbench STATEMENT:  COMMIT PREPARED 
> 'c1';

As a first step, let's report the actual XLogReadRecord() error message.
Attached.  All the other sites that expect no error already do this.
Author:     Noah Misch <n...@leadboat.com>
Commit:     Noah Misch <n...@leadboat.com>

    Report any XLogReadRecord() error in XlogReadTwoPhaseData().
    
    Buildfarm member kittiwake has witnessed errors at this site.  The site
    discarded key facts.  Back-patch to 9.6 (all supported versions).
    
    Reviewed by FIXME.
    
    Discussion: https://postgr.es/m/FIXME

diff --git a/src/backend/access/transam/twophase.c 
b/src/backend/access/transam/twophase.c
index ef4b5f6..28b153a 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -1397,10 +1397,18 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int 
*len)
        record = XLogReadRecord(xlogreader, &errormsg);
 
        if (record == NULL)
-               ereport(ERROR,
-                               (errcode_for_file_access(),
-                                errmsg("could not read two-phase state from 
WAL at %X/%X",
-                                               LSN_FORMAT_ARGS(lsn))));
+       {
+               if (errormsg)
+                       ereport(ERROR,
+                                       (errcode_for_file_access(),
+                                        errmsg("could not read two-phase state 
from WAL at %X/%X: %s",
+                                                       LSN_FORMAT_ARGS(lsn), 
errormsg)));
+               else
+                       ereport(ERROR,
+                                       (errcode_for_file_access(),
+                                        errmsg("could not read two-phase state 
from WAL at %X/%X",
+                                                       LSN_FORMAT_ARGS(lsn))));
+       }
 
        if (XLogRecGetRmid(xlogreader) != RM_XACT_ID ||
                (XLogRecGetInfo(xlogreader) & XLOG_XACT_OPMASK) != 
XLOG_XACT_PREPARE)

Reply via email to