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

