v20250310c-0002-simple-post-rebase-fixes.patch
text/x-patch
Filename: v20250310c-0002-simple-post-rebase-fixes.patch
Type: text/x-patch
Part: 1
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 0002
Subject: simple post-rebase fixes
| File | + | − |
|---|---|---|
| src/backend/postmaster/datachecksumsworker.c | 14 | 14 |
| src/backend/postmaster/launch_backend.c | 3 | 0 |
| src/backend/postmaster/postmaster.c | 5 | 0 |
| src/backend/utils/activity/pgstat_backend.c | 2 | 0 |
| src/test/checksum/t/003_standby_restarts.pl | 9 | 1 |
From f01c15887f1c612cd7769bf9f3f6dd22525c493d Mon Sep 17 00:00:00 2001
From: Tomas Vondra <tomas@vondra.me>
Date: Fri, 7 Mar 2025 20:19:29 +0100
Subject: [PATCH v20250310c 2/5] simple post-rebase fixes
- Update checks in PostmasterStateMachine to account for datachecksum
workers, etc.
- Remove pgstat_bestart() call - it would need to be _initial(), but I
don't think it's needed.
- Update vacuum_delay_point() call.
- Cast PID to long in elog call (same as we do in postmaster.c)
- Fix test 003_standby_restarts by adding a replication slot
- Fix DataChecksumsWorkerShmemInit to only zero the memory once.
- Update child_process_kinds to keep it in sync with BackendType.
---
src/backend/postmaster/datachecksumsworker.c | 28 ++++++++++----------
src/backend/postmaster/launch_backend.c | 3 +++
src/backend/postmaster/postmaster.c | 5 ++++
src/backend/utils/activity/pgstat_backend.c | 2 ++
src/test/checksum/t/003_standby_restarts.pl | 10 ++++++-
5 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/src/backend/postmaster/datachecksumsworker.c b/src/backend/postmaster/datachecksumsworker.c
index de7a077f9c2..6df92684a3b 100644
--- a/src/backend/postmaster/datachecksumsworker.c
+++ b/src/backend/postmaster/datachecksumsworker.c
@@ -450,7 +450,7 @@ ProcessSingleRelationFork(Relation reln, ForkNumber forkNum, BufferAccessStrateg
if (abort_requested)
return false;
- vacuum_delay_point();
+ vacuum_delay_point(false);
}
pfree(relns);
@@ -587,7 +587,7 @@ ProcessDatabase(DataChecksumsWorkerDatabase *db)
db->dbname)));
snprintf(activity, sizeof(activity) - 1,
- "Waiting for worker in database %s (pid %d)", db->dbname, pid);
+ "Waiting for worker in database %s (pid %ld)", db->dbname, (long) pid);
pgstat_report_activity(STATE_RUNNING, activity);
status = WaitForBackgroundWorkerShutdown(bgw_handle);
@@ -752,9 +752,6 @@ DataChecksumsWorkerLauncherMain(Datum arg)
*/
BackgroundWorkerInitializeConnectionByOid(InvalidOid, InvalidOid, 0);
- /* Initialize backend status information */
- pgstat_bestart();
-
enabling_checksums = DataChecksumsWorkerShmem->launch_enable_checksums;
DataChecksumsWorkerShmem->launcher_running = true;
DataChecksumsWorkerShmem->enabling_checksums = enabling_checksums;
@@ -1095,16 +1092,19 @@ DataChecksumsWorkerShmemInit(void)
DataChecksumsWorkerShmemSize(),
&found);
- MemSet(DataChecksumsWorkerShmem, 0, DataChecksumsWorkerShmemSize());
+ if (!found)
+ {
+ MemSet(DataChecksumsWorkerShmem, 0, DataChecksumsWorkerShmemSize());
- /*
- * Even if this is a redundant assignment, we want to be explicit about
- * our intent for readability, since we want to be able to query this
- * state in case of restartability.
- */
- DataChecksumsWorkerShmem->launch_enable_checksums = false;
- DataChecksumsWorkerShmem->launcher_running = false;
- DataChecksumsWorkerShmem->launch_fast = false;
+ /*
+ * Even if this is a redundant assignment, we want to be explicit about
+ * our intent for readability, since we want to be able to query this
+ * state in case of restartability.
+ */
+ DataChecksumsWorkerShmem->launch_enable_checksums = false;
+ DataChecksumsWorkerShmem->launcher_running = false;
+ DataChecksumsWorkerShmem->launch_fast = false;
+ }
}
/*
diff --git a/src/backend/postmaster/launch_backend.c b/src/backend/postmaster/launch_backend.c
index 47375e5bfaa..92d8017fd56 100644
--- a/src/backend/postmaster/launch_backend.c
+++ b/src/backend/postmaster/launch_backend.c
@@ -202,6 +202,9 @@ static child_process_kind child_process_kinds[] = {
[B_WAL_SUMMARIZER] = {"wal_summarizer", WalSummarizerMain, true},
[B_WAL_WRITER] = {"wal_writer", WalWriterMain, true},
+ [B_DATACHECKSUMSWORKER_LAUNCHER] = {"datachecksum launcher", NULL, false},
+ [B_DATACHECKSUMSWORKER_WORKER] = {"datachecksum worker", NULL, false},
+
[B_LOGGER] = {"syslogger", SysLoggerMain, false},
};
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index d2a7a7add6f..2fc438987b5 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -2947,6 +2947,11 @@ PostmasterStateMachine(void)
B_INVALID,
B_STANDALONE_BACKEND);
+ /* also add checksumming processes */
+ remainMask = btmask_add(remainMask,
+ B_DATACHECKSUMSWORKER_LAUNCHER,
+ B_DATACHECKSUMSWORKER_WORKER);
+
/* All types should be included in targetMask or remainMask */
Assert((remainMask.mask | targetMask.mask) == BTYPE_MASK_ALL.mask);
}
diff --git a/src/backend/utils/activity/pgstat_backend.c b/src/backend/utils/activity/pgstat_backend.c
index 6efbb650aa8..bd458f8c1af 100644
--- a/src/backend/utils/activity/pgstat_backend.c
+++ b/src/backend/utils/activity/pgstat_backend.c
@@ -295,6 +295,8 @@ pgstat_tracks_backend_bktype(BackendType bktype)
case B_BG_WRITER:
case B_CHECKPOINTER:
case B_STARTUP:
+ case B_DATACHECKSUMSWORKER_LAUNCHER:
+ case B_DATACHECKSUMSWORKER_WORKER:
return false;
case B_AUTOVAC_WORKER:
diff --git a/src/test/checksum/t/003_standby_restarts.pl b/src/test/checksum/t/003_standby_restarts.pl
index 6c0fe8f3bf8..6782664f4e6 100644
--- a/src/test/checksum/t/003_standby_restarts.pl
+++ b/src/test/checksum/t/003_standby_restarts.pl
@@ -20,15 +20,23 @@ my $enable_params = '0, 100, true';
my $node_primary = PostgreSQL::Test::Cluster->new('primary');
$node_primary->init(allows_streaming => 1, no_data_checksums => 1);
$node_primary->start;
-my $backup_name = 'my_backup';
+
+my $slotname = 'physical_slot';
+$node_primary->safe_psql('postgres',
+ "SELECT pg_create_physical_replication_slot('$slotname')");
# Take backup
+my $backup_name = 'my_backup';
$node_primary->backup($backup_name);
# Create streaming standby linking to primary
my $node_standby_1 = PostgreSQL::Test::Cluster->new('standby_1');
$node_standby_1->init_from_backup($node_primary, $backup_name,
has_streaming => 1);
+$node_standby_1->append_conf(
+ 'postgresql.conf', qq[
+primary_slot_name = '$slotname'
+]);
$node_standby_1->start;
# Create some content on the primary to have un-checksummed data in the cluster
--
2.48.1