From 8a72efd62662efd8672d84d2872fbf54173c9337 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Fri, 7 Mar 2025 20:19:29 +0100 Subject: [PATCH v20250310d 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. - Fix expected output for stats regression test. --- 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 ++++++- src/test/regress/expected/stats.out | 18 ++++++++++++- 6 files changed, 50 insertions(+), 16 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 diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out index 30d763c4aee..da6645f0d7b 100644 --- a/src/test/regress/expected/stats.out +++ b/src/test/regress/expected/stats.out @@ -51,6 +51,22 @@ client backend|relation|vacuum client backend|temp relation|normal client backend|wal|init client backend|wal|normal +datachecksumsworker launcher|relation|bulkread +datachecksumsworker launcher|relation|bulkwrite +datachecksumsworker launcher|relation|init +datachecksumsworker launcher|relation|normal +datachecksumsworker launcher|relation|vacuum +datachecksumsworker launcher|temp relation|normal +datachecksumsworker launcher|wal|init +datachecksumsworker launcher|wal|normal +datachecksumsworker worker|relation|bulkread +datachecksumsworker worker|relation|bulkwrite +datachecksumsworker worker|relation|init +datachecksumsworker worker|relation|normal +datachecksumsworker worker|relation|vacuum +datachecksumsworker worker|temp relation|normal +datachecksumsworker worker|wal|init +datachecksumsworker worker|wal|normal slotsync worker|relation|bulkread slotsync worker|relation|bulkwrite slotsync worker|relation|init @@ -87,7 +103,7 @@ walsummarizer|wal|init walsummarizer|wal|normal walwriter|wal|init walwriter|wal|normal -(71 rows) +(87 rows) \a -- ensure that both seqscan and indexscan plans are allowed SET enable_seqscan TO on; -- 2.48.1