From 252b6c3ad06b555e1cc20ca33155ee408f3cff33 Mon Sep 17 00:00:00 2001
From: Tomas Vondra <tomas@vondra.me>
Date: Fri, 7 Mar 2025 20:19:29 +0100
Subject: [PATCH v20250310b 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
---
 src/backend/postmaster/datachecksumsworker.c |  7 ++-----
 src/backend/postmaster/postmaster.c          |  5 +++++
 src/backend/utils/activity/pgstat_backend.c  |  2 ++
 src/test/checksum/t/003_standby_restarts.pl  | 10 +++++++++-
 4 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/backend/postmaster/datachecksumsworker.c b/src/backend/postmaster/datachecksumsworker.c
index de7a077f9c2..b30d5481b06 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;
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 a9343b7b59e..f4b2f3b91d8 100644
--- a/src/backend/utils/activity/pgstat_backend.c
+++ b/src/backend/utils/activity/pgstat_backend.c
@@ -292,6 +292,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

