On Thu, Nov 09, 2023 at 04:52:32PM +0900, Michael Paquier wrote: > Thanks!
Also, please see also a patch about switching the logirep launcher to rely on IsBinaryUpgrade to prevent its startup. Any thoughts about that? -- Michael
diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index 501910b445..7eb0a5edc9 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -925,7 +925,8 @@ ApplyLauncherRegister(void) { BackgroundWorker bgw; - if (max_logical_replication_workers == 0) + /* not started during upgrades */ + if (max_logical_replication_workers == 0 || IsBinaryUpgrade) return; memset(&bgw, 0, sizeof(bgw)); diff --git a/src/bin/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c index c24c5f69fc..04722ad306 100644 --- a/src/bin/pg_upgrade/server.c +++ b/src/bin/pg_upgrade/server.c @@ -248,19 +248,17 @@ start_postmaster(ClusterInfo *cluster, bool report_and_exit_on_error) * invalidation of slots during the upgrade. We set this option when * cluster is PG17 or later because logical replication slots can only be * migrated since then. Besides, max_slot_wal_keep_size is added in PG13. - * - * Use max_logical_replication_workers as 0 to prevent a startup of the - * logical replication launcher while upgrading because it may start apply - * workers that could start receiving changes from the publisher before - * the physical files are put in place, causing corruption on the new - * cluster upgrading to. Like the previous parameter, this is set only - * when a cluster is PG17 or later as logical slots can only be migrated - * since this version. */ if (GET_MAJOR_VERSION(cluster->major_version) >= 1700) - appendPQExpBufferStr(&pgoptions, " -c max_slot_wal_keep_size=-1 -c max_logical_replication_workers=0"); + appendPQExpBufferStr(&pgoptions, " -c max_slot_wal_keep_size=-1"); - /* Use -b to disable autovacuum. */ + /* + * Use -b to disable autovacuum and logical replication launcher + * (effective in PG17 or later for the latter). Preventing these + * processes from starting while upgrading avoids any activity on the new + * cluster before the physical files are put in place, which could cause + * corruption on the new cluster upgrading to. + */ snprintf(cmd, sizeof(cmd), "\"%s/pg_ctl\" -w -l \"%s/%s\" -D \"%s\" -o \"-p %d -b%s %s%s\" start", cluster->bindir,
signature.asc
Description: PGP signature