From 0c3dd8ac1df7fd1686374555eb766e4517c4c1a8 Mon Sep 17 00:00:00 2001
From: test <test>
Date: Fri, 1 May 2026 22:15:52 +0200
Subject: [PATCH 04/13] debug: checkpointer injection points

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

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 8dd003d25e2..7c4e412093c 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -4762,6 +4762,7 @@ SetDataChecksumsOnInProgress(void)
 	INJECTION_POINT("datachecksums-enable-inprogress-checksums-start", NULL);
 
 	/* load before critical section */
+	INJECTION_POINT_LOAD("datachecksums-enable-inprogress-checksums-before-xlog");
 	INJECTION_POINT_LOAD("datachecksums-enable-inprogress-checksums-after-xlog");
 	INJECTION_POINT_LOAD("datachecksums-enable-inprogress-checksums-after-xlogctl");
 	INJECTION_POINT_LOAD("datachecksums-enable-inprogress-checksums-after-controlfile");
@@ -4773,6 +4774,8 @@ SetDataChecksumsOnInProgress(void)
 	START_CRIT_SECTION();
 	MyProc->delayChkptFlags |= DELAY_CHKPT_START;
 
+	INJECTION_POINT_CACHED("datachecksums-enable-inprogress-checksums-before-xlog", NULL);
+
 	XLogChecksums(PG_DATA_CHECKSUM_INPROGRESS_ON);
 
 	INJECTION_POINT_CACHED("datachecksums-enable-inprogress-checksums-after-xlog", NULL);
@@ -4866,6 +4869,7 @@ SetDataChecksumsOn(void)
 	INJECTION_POINT("datachecksums-enable-checksums-start", NULL);
 
 	/* load before critical section */
+	INJECTION_POINT_LOAD("datachecksums-enable-checksums-before-xlog");
 	INJECTION_POINT_LOAD("datachecksums-enable-checksums-after-xlog");
 	INJECTION_POINT_LOAD("datachecksums-enable-checksums-after-xlogctl");
 	INJECTION_POINT_LOAD("datachecksums-enable-checksums-after-controlfile");
@@ -4873,6 +4877,8 @@ SetDataChecksumsOn(void)
 	START_CRIT_SECTION();
 	MyProc->delayChkptFlags |= DELAY_CHKPT_START;
 
+	INJECTION_POINT_CACHED("datachecksums-enable-checksums-before-xlog", NULL);
+
 	XLogChecksums(PG_DATA_CHECKSUM_VERSION);
 
 	INJECTION_POINT_CACHED("datachecksums-enable-checksums-after-xlog", NULL);
@@ -4968,6 +4974,7 @@ SetDataChecksumsOff(void)
 		INJECTION_POINT("datachecksums-disable-inprogress-checksums-start", NULL);
 
 		/* load before critical section */
+		INJECTION_POINT_LOAD("datachecksums-disable-inprogress-checksums-before-xlog");
 		INJECTION_POINT_LOAD("datachecksums-disable-inprogress-checksums-after-xlog");
 		INJECTION_POINT_LOAD("datachecksums-disable-inprogress-checksums-after-xlogctl");
 		INJECTION_POINT_LOAD("datachecksums-disable-inprogress-checksums-after-controlfile");
@@ -4975,6 +4982,8 @@ SetDataChecksumsOff(void)
 		START_CRIT_SECTION();
 		MyProc->delayChkptFlags |= DELAY_CHKPT_START;
 
+		INJECTION_POINT_CACHED("datachecksums-disable-inprogress-checksums-before-xlog", NULL);
+
 		XLogChecksums(PG_DATA_CHECKSUM_INPROGRESS_OFF);
 
 		INJECTION_POINT_CACHED("datachecksums-disable-inprogress-checksums-after-xlog", NULL);
@@ -5034,6 +5043,7 @@ SetDataChecksumsOff(void)
 	INJECTION_POINT("datachecksums-disable-checksums-start", NULL);
 
 	/* load before critical section */
+	INJECTION_POINT_LOAD("datachecksums-disable-checksums-before-xlog");
 	INJECTION_POINT_LOAD("datachecksums-disable-checksums-after-xlog");
 	INJECTION_POINT_LOAD("datachecksums-disable-checksums-after-xlogctl");
 	INJECTION_POINT_LOAD("datachecksums-disable-checksums-after-controlfile");
@@ -5042,6 +5052,8 @@ SetDataChecksumsOff(void)
 	/* Ensure that we don't incur a checkpoint during disabling checksums */
 	MyProc->delayChkptFlags |= DELAY_CHKPT_START;
 
+	INJECTION_POINT_CACHED("datachecksums-disable-checksums-before-xlog", NULL);
+
 	XLogChecksums(PG_DATA_CHECKSUM_OFF);
 
 	INJECTION_POINT_CACHED("datachecksums-disable-checksums-after-xlog", NULL);
@@ -7611,6 +7623,12 @@ CreateCheckPoint(int flags)
 	/* Run these points outside the critical section. */
 	INJECTION_POINT("create-checkpoint-initial", NULL);
 	INJECTION_POINT_LOAD("create-checkpoint-run");
+	INJECTION_POINT_LOAD("checkpoint-before-redo");
+	INJECTION_POINT_LOAD("checkpoint-before-xlogctl-checksums");
+	INJECTION_POINT_LOAD("checkpoint-after-xlogctl-checksums");
+	INJECTION_POINT_LOAD("checkpoint-before-redo-checksums");
+	INJECTION_POINT_LOAD("checkpoint-before-redo-wal");
+	INJECTION_POINT_LOAD("checkpoint-after-redo-wal");
 
 	/*
 	 * Use a critical section to force system panic if we have trouble.
@@ -7676,6 +7694,8 @@ CreateCheckPoint(int flags)
 	else
 		checkPoint.PrevTimeLineID = checkPoint.ThisTimeLineID;
 
+	INJECTION_POINT_CACHED("checkpoint-before-redo", NULL);
+
 	/*
 	 * We must block concurrent insertions while examining insert state.
 	 */
@@ -7684,6 +7704,8 @@ CreateCheckPoint(int flags)
 	checkPoint.fullPageWrites = Insert->fullPageWrites;
 	checkPoint.wal_level = wal_level;
 
+	INJECTION_POINT_CACHED("checkpoint-before-xlogctl-checksums", NULL);
+
 	/*
 	 * Get the current data_checksum_version value from xlogctl, valid at the
 	 * time of the checkpoint.
@@ -7692,6 +7714,8 @@ CreateCheckPoint(int flags)
 	checkPoint.dataChecksumState = XLogCtl->data_checksum_version;
 	SpinLockRelease(&XLogCtl->info_lck);
 
+	INJECTION_POINT_CACHED("checkpoint-after-xlogctl-checksums", NULL);
+
 	if (shutdown)
 	{
 		XLogRecPtr	curInsert = XLogBytePosToRecPtr(Insert->CurrBytePos);
@@ -7749,6 +7773,8 @@ CreateCheckPoint(int flags)
 	{
 		xl_checkpoint_redo redo_rec;
 
+		INJECTION_POINT_CACHED("checkpoint-before-redo-checksums", NULL);
+
 		WALInsertLockAcquire();
 		redo_rec.wal_level = wal_level;
 		SpinLockAcquire(&XLogCtl->info_lck);
@@ -7756,6 +7782,8 @@ CreateCheckPoint(int flags)
 		SpinLockRelease(&XLogCtl->info_lck);
 		WALInsertLockRelease();
 
+		INJECTION_POINT_CACHED("checkpoint-before-redo-wal", NULL);
+
 		/* Include WAL level in record for WAL summarizer's benefit. */
 		XLogBeginInsert();
 		XLogRegisterData(&redo_rec, sizeof(xl_checkpoint_redo));
@@ -7768,6 +7796,8 @@ CreateCheckPoint(int flags)
 		 * checkpoint is complete.
 		 */
 		checkPoint.redo = RedoRecPtr;
+
+		INJECTION_POINT_CACHED("checkpoint-after-redo-wal", NULL);
 	}
 
 	/* Update the info_lck-protected copy of RedoRecPtr as well */
-- 
2.54.0

