v20250314-0006-Reviewfixups.patch
application/octet-stream
Filename: v20250314-0006-Reviewfixups.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v20250314-0006
Subject: Reviewfixups
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlog.c | 25 | 1 |
| src/backend/postmaster/datachecksumsworker.c | 1 | 1 |
| src/backend/utils/init/postinit.c | 2 | 2 |
| src/include/postmaster/datachecksumsworker.h | 1 | 1 |
| src/test/checksum/Makefile | 1 | 1 |
From 6ff59fbc04596f27cae2af30eda585f1bd8269f5 Mon Sep 17 00:00:00 2001
From: Daniel Gustafsson <dgustafsson@postgresql.org>
Date: Fri, 14 Mar 2025 15:00:51 +0100
Subject: [PATCH v20250314 6/6] Reviewfixups
---
src/backend/access/transam/xlog.c | 26 +++++++++++++++++++-
src/backend/postmaster/datachecksumsworker.c | 2 +-
src/backend/utils/init/postinit.c | 4 +--
src/include/postmaster/datachecksumsworker.h | 2 +-
src/test/checksum/Makefile | 2 +-
5 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 61da6d583cd..e4c72f985e4 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -660,6 +660,16 @@ static bool updateMinRecoveryPoint = true;
*/
static uint32 LocalDataChecksumVersion = 0;
+/*
+ * Flag to remember if the procsignalbarrier being absorbed for enabling
+ * checksums is the first one or not. The first procsignalbarrier can in rare
+ * circumstances cause a transition from 'on' to 'on' when a new process is
+ * spawned between the update of XLogCtl->data_checksum_version and the
+ * barrier being emitted. This can only happen on the very first barrier so
+ * mark that with this flag.
+ */
+static bool InitialDataChecksumTransition = true;
+
/*
* Variable backing the GUC, keep it in sync with LocalDataChecksumVersion.
* See SetLocalDataChecksumVersion().
@@ -4935,7 +4945,20 @@ AbsorbChecksumsOnInProgressBarrier(void)
bool
AbsorbChecksumsOnBarrier(void)
{
- Assert(LocalDataChecksumVersion == PG_DATA_CHECKSUM_INPROGRESS_ON_VERSION);
+ /*
+ * If the process was spawned between updating XLogCtl and emitting the
+ * barrier it will have seen the updated value, so for the first barrier
+ * we accept both "on" and "inprogress-on".
+ */
+ if (InitialDataChecksumTransition)
+ {
+ Assert((LocalDataChecksumVersion == PG_DATA_CHECKSUM_INPROGRESS_ON_VERSION) ||
+ (LocalDataChecksumVersion == PG_DATA_CHECKSUM_VERSION));
+ InitialDataChecksumTransition = false;
+ }
+ else
+ Assert(LocalDataChecksumVersion == PG_DATA_CHECKSUM_INPROGRESS_ON_VERSION);
+
SetLocalDataChecksumVersion(PG_DATA_CHECKSUM_VERSION);
return true;
}
@@ -5319,6 +5342,7 @@ LocalProcessControlFile(bool reset)
Assert(reset || ControlFile == NULL);
ControlFile = palloc(sizeof(ControlFileData));
ReadControlFile();
+ SetLocalDataChecksumVersion(ControlFile->data_checksum_version);
}
/*
diff --git a/src/backend/postmaster/datachecksumsworker.c b/src/backend/postmaster/datachecksumsworker.c
index 6a201dca8de..81be2808895 100644
--- a/src/backend/postmaster/datachecksumsworker.c
+++ b/src/backend/postmaster/datachecksumsworker.c
@@ -150,7 +150,7 @@
* online operation).
*
*
- * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index bae18b449aa..692570eb0f1 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -746,13 +746,13 @@ InitPostgres(const char *in_dbname, Oid dboid,
*/
SharedInvalBackendInit(false);
+ ProcSignalInit(MyCancelKeyValid, MyCancelKey);
+
/*
* Set up backend local cache of Controldata values.
*/
InitLocalControldata();
- ProcSignalInit(MyCancelKeyValid, MyCancelKey);
-
/*
* Also set up timeout handlers needed for backend operation. We need
* these in every case except bootstrap.
diff --git a/src/include/postmaster/datachecksumsworker.h b/src/include/postmaster/datachecksumsworker.h
index 59c9000d646..0649232723d 100644
--- a/src/include/postmaster/datachecksumsworker.h
+++ b/src/include/postmaster/datachecksumsworker.h
@@ -4,7 +4,7 @@
* header file for checksum helper background worker
*
*
- * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* src/include/postmaster/datachecksumsworker.h
diff --git a/src/test/checksum/Makefile b/src/test/checksum/Makefile
index fd03bf73df4..f287001301e 100644
--- a/src/test/checksum/Makefile
+++ b/src/test/checksum/Makefile
@@ -2,7 +2,7 @@
#
# Makefile for src/test/checksum
#
-# Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+# Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California
#
# src/test/checksum/Makefile
--
2.39.3 (Apple Git-146)