0004-debug-checkpointer-injection-points.patch
text/x-patch
Filename: 0004-debug-checkpointer-injection-points.patch
Type: text/x-patch
Part: 3
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