Michael Paquier a écrit :
@@ -5862,6 +5862,9 @@ do_start_bgworker(RegisteredBgWorker *rw) static bool bgworker_should_start_now(BgWorkerStartTime start_time) { + if (IsBinaryUpgrade) + return false; +Using -c max_worker_processes=0 would just have the same effect, no? So we could just patch pg_upgrade's server.c to get the same level of protection?
Yes, same effect indeed. This would log "too many background workers" messages in pg_upgrade logs, though.
See attached patch implementing this suggestion.
>From 04867b2184c335e6efaf5a96d348a53efcc9e3d2 Mon Sep 17 00:00:00 2001 From: Denis Laxalde <[email protected]> Date: Mon, 23 Aug 2021 15:19:41 +0200 Subject: [PATCH] Disable bgworkers at servers start in pg_upgrade Background workers may produce undesired activities (writes) on the old cluster during upgrade which may corrupt the new cluster. --- src/bin/pg_upgrade/server.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c index 7fed0ae108..a2b67a5e9a 100644 --- a/src/bin/pg_upgrade/server.c +++ b/src/bin/pg_upgrade/server.c @@ -236,6 +236,9 @@ start_postmaster(ClusterInfo *cluster, bool report_and_exit_on_error) * values are less than a gap of 2000000000 from the current xid counter, * so autovacuum will not touch them. * + * Disable background workers by setting max_worker_processes=0 to prevent + * undesired writes which may cause corruptions on the new cluster. + * * Turn off durability requirements to improve object creation speed, and * we only modify the new cluster, so only use it there. If there is a * crash, the new cluster has to be recreated anyway. fsync=off is a big @@ -245,7 +248,7 @@ start_postmaster(ClusterInfo *cluster, bool report_and_exit_on_error) * vacuumdb --freeze actually freezes the tuples. */ snprintf(cmd, sizeof(cmd), - "\"%s/pg_ctl\" -w -l \"%s\" -D \"%s\" -o \"-p %d%s%s %s%s\" start", + "\"%s/pg_ctl\" -w -l \"%s\" -D \"%s\" -o \"-p %d%s%s %s%s -c max_worker_processes=0\" start", cluster->bindir, SERVER_LOG_FILE, cluster->pgconfig, cluster->port, (cluster->controldata.cat_ver >= BINARY_UPGRADE_SERVER_FLAG_CAT_VER) ? " -b" : -- 2.30.2
