could-not-read-two-phase-state-v1.patch

text/plain

Filename: could-not-read-two-phase-state-v1.patch
Type: text/plain
Part: 0
Message: XLogReadRecord() error in XlogReadTwoPhaseData()

Patch

Format: unified
Series: patch v1
File+
src/backend/access/transam/twophase.c 12 4
Author:     Noah Misch <noah@leadboat.com>
Commit:     Noah Misch <noah@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)