From 104b395e118ba4b8cc3900360aa7a2c6565a477e Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Thu, 2 Sep 2021 18:03:35 -0400
Subject: [PATCH v2 3/3] debugging changes

---
 src/backend/access/transam/xlog.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 36e67dcfad..5ce7304723 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -726,6 +726,8 @@ typedef struct XLogCtlData
 	XLogRecPtr	lastFpwDisableRecPtr;
 
 	slock_t		info_lck;		/* locks shared variables shown above */
+
+	bool		crossSeg;
 } XLogCtlData;
 
 static XLogCtlData *XLogCtl = NULL;
@@ -1161,6 +1163,13 @@ XLogInsertRecord(XLogRecData *rdata,
 	 */
 	if (StartPos / XLOG_BLCKSZ != EndPos / XLOG_BLCKSZ)
 	{
+		XLogSegNo	StartSeg, EndSeg;
+
+		XLByteToSeg(StartPos, StartSeg, wal_segment_size);
+		XLByteToSeg(EndPos, EndSeg, wal_segment_size);
+		if (StartSeg != EndSeg)
+			XLogCtl->crossSeg = true;
+
 		SpinLockAcquire(&XLogCtl->info_lck);
 		/* advance global request to include new block(s) */
 		if (XLogCtl->LogwrtRqst.Write < EndPos)
@@ -2265,6 +2274,8 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic)
 					 LSN_FORMAT_ARGS(NewPageBeginPtr));
 
 			NewPage->xlp_info |= XLP_FIRST_IS_ABORTED_PARTIAL;
+			elog(LOG, "#### set aborted partial flag at %X/%X",
+				 LSN_FORMAT_ARGS(NewPageBeginPtr));
 
 			XLogCtl->abortedContrecordPtr = InvalidXLogRecPtr;
 		}
@@ -2619,11 +2630,21 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible)
 			{
 				issue_xlog_fsync(openLogFile, openLogSegNo);
 
+				if (XLogCtl->crossSeg)
+				{
+					static int c = 0;
+					struct stat b;
+
+					if (stat("/tmp/hoge", &b) == 0)
+						Assert(c++ < 1);
+				}
+
 				/* signal that we need to wakeup walsenders later */
 				WalSndWakeupRequest();
 
 				LogwrtResult.Flush = LogwrtResult.Write;	/* end of page */
 
+				/* XXX can we give this responsibility to WAL writer? */
 				if (XLogArchivingActive())
 					XLogArchiveNotifySeg(openLogSegNo);
 
@@ -7721,6 +7742,8 @@ StartupXLOG(void)
 	 * broken record, which rescues downstream which have already received
 	 * that first part.
 	 */
+	elog(LOG, "#### Recovery finished: ContRecAbort: %X/%X (EndRecPtr: %X/%X)",
+		 LSN_FORMAT_ARGS(abortedContrecordPtr), LSN_FORMAT_ARGS(EndRecPtr));
 	if (XLogRecPtrIsInvalid(abortedContrecordPtr))
 	{
 		XLogBeginRead(xlogreader, LastRec);
@@ -7867,6 +7890,8 @@ StartupXLOG(void)
 	Insert->PrevBytePos = XLogRecPtrToBytePos(LastRec);
 	Insert->CurrBytePos = XLogRecPtrToBytePos(EndOfLog);
 
+	elog(LOG, "#### EndOfLog=%X/%X", LSN_FORMAT_ARGS(EndOfLog));
+
 	/*
 	 * Tricky point here: readBuf contains the *last* block that the LastRec
 	 * record spans, not the one it starts in.  The last block is indeed the
-- 
2.30.2

