On Mon, Nov 21, 2022 at 3:35 AM Simon Riggs <simon.ri...@enterprisedb.com> wrote: > On Sat, 19 Nov 2022 at 10:59, Simon Riggs <simon.ri...@enterprisedb.com> > wrote: > > New version attached. > > Fix for doc xref
I removed a stray variable declaration from xlogrecovery.h, and wrote a draft commit message. I'll wait 24 hours before committing, to provide a last chance for anyone who wants to complain about dropping promote_trigger_file. (We could of course change it so that the timeout based wakeup only happens if you have actually set promote_trigger_file, but I think we've established that we just don't want the filesystem polling feature so I'm whispering this in parentheses.)
From 6a6db8862ceb6618fb5f98c6245dc7d834fe89db Mon Sep 17 00:00:00 2001 From: Thomas Munro <thomas.mu...@gmail.com> Date: Mon, 21 Nov 2022 09:37:47 +1300 Subject: [PATCH v11] Remove promote_trigger_file. Previously an otherwise idle startup (recovery) process would wake up every 5 seconds to have a chance to poll for promote_trigger_file, even if that GUC was not configured. That signaling mechanism was superseded by pg_ctl promote and pg_promote() a long time ago. There probably aren't many users left and it's very easy to change to the modern mechanisms, so let's remove that feature. This is part of a campaign to reduce wakeups on idle systems. Author: Simon Riggs <simon.ri...@enterprisedb.com> Reviewed-by: Bharath Rupireddy <bharath.rupireddyforpostg...@gmail.com> Reviewed-by: Robert Haas <robertmh...@gmail.com> Reviewed-by: Thomas Munro <thomas.mu...@gmail.com> Discussion: https://postgr.es/m/CANbhV-FsjnzVOQGBpQ589%3DnWuL1Ex0Ykn74Nh1hEjp2usZSR5g%40mail.gmail.com --- .../appendix-obsolete-recovery-config.sgml | 9 ++---- doc/src/sgml/config.sgml | 18 ----------- doc/src/sgml/high-availability.sgml | 24 ++++++-------- src/backend/access/transam/xlogrecovery.c | 32 ++++--------------- src/backend/utils/misc/guc_tables.c | 10 ------ src/backend/utils/misc/postgresql.conf.sample | 1 - src/include/access/xlogrecovery.h | 1 - 7 files changed, 18 insertions(+), 77 deletions(-) diff --git a/doc/src/sgml/appendix-obsolete-recovery-config.sgml b/doc/src/sgml/appendix-obsolete-recovery-config.sgml index 1cf4913114..8ca519b5f1 100644 --- a/doc/src/sgml/appendix-obsolete-recovery-config.sgml +++ b/doc/src/sgml/appendix-obsolete-recovery-config.sgml @@ -35,13 +35,8 @@ <para> The - <literal>trigger_file</literal> - <indexterm> - <primary>trigger_file</primary> - <see>promote_trigger_file</see> - </indexterm> - setting has been renamed to - <xref linkend="guc-promote-trigger-file"/>. + <literal>trigger_file</literal> and <literal>promote_trigger_file</literal> + have been removed. </para> <para> diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index bd50ea8e48..211dfc27ac 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -4610,24 +4610,6 @@ ANY <replaceable class="parameter">num_sync</replaceable> ( <replaceable class=" </listitem> </varlistentry> - <varlistentry id="guc-promote-trigger-file" xreflabel="promote_trigger_file"> - <term><varname>promote_trigger_file</varname> (<type>string</type>) - <indexterm> - <primary><varname>promote_trigger_file</varname> configuration parameter</primary> - </indexterm> - </term> - <listitem> - <para> - Specifies a trigger file whose presence ends recovery in the - standby. Even if this value is not set, you can still promote - the standby using <command>pg_ctl promote</command> or calling - <function>pg_promote()</function>. - This parameter can only be set in the <filename>postgresql.conf</filename> - file or on the server command line. - </para> - </listitem> - </varlistentry> - <varlistentry id="guc-hot-standby" xreflabel="hot_standby"> <term><varname>hot_standby</varname> (<type>boolean</type>) <indexterm> diff --git a/doc/src/sgml/high-availability.sgml b/doc/src/sgml/high-availability.sgml index b2b3129397..cac8c71a44 100644 --- a/doc/src/sgml/high-availability.sgml +++ b/doc/src/sgml/high-availability.sgml @@ -653,11 +653,11 @@ protocol to make nodes agree on a serializable transactional order. <para> Standby mode is exited and the server switches to normal operation - when <command>pg_ctl promote</command> is run, - <function>pg_promote()</function> is called, or a trigger file is found - (<varname>promote_trigger_file</varname>). Before failover, - any WAL immediately available in the archive or in <filename>pg_wal</filename> will be - restored, but no attempt is made to connect to the primary. + when <command>pg_ctl promote</command> is run, or + <function>pg_promote()</function> is called. The parameter + <varname>promote_trigger_file</varname> has been removed. Before failover, + any WAL immediately available in the archive or in <filename>pg_wal</filename> + will be restored, but no attempt is made to connect to the primary. </para> </sect2> @@ -1483,15 +1483,11 @@ synchronous_standby_names = 'ANY 2 (s1, s2, s3)' <para> To trigger failover of a log-shipping standby server, run - <command>pg_ctl promote</command>, call <function>pg_promote()</function>, - or create a trigger file with the file name and path specified by the - <varname>promote_trigger_file</varname>. If you're planning to use - <command>pg_ctl promote</command> or to call - <function>pg_promote()</function> to fail over, - <varname>promote_trigger_file</varname> is not required. If you're - setting up the reporting servers that are only used to offload read-only - queries from the primary, not for high availability purposes, you don't - need to promote it. + <command>pg_ctl promote</command> or call <function>pg_promote()</function>. + The parameter <varname>promote_trigger_file</varname> has been removed. + If you're setting up the reporting servers that are only used to offload + read-only queries from the primary, not for high availability purposes, + you don't need to promote it. </para> </sect1> diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index cb07694aea..b1008c3701 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -95,7 +95,6 @@ int recovery_min_apply_delay = 0; /* options formerly taken from recovery.conf for XLOG streaming */ char *PrimaryConnInfo = NULL; char *PrimarySlotName = NULL; -char *PromoteTriggerFile = NULL; bool wal_receiver_create_temp_slot = false; /* @@ -3840,14 +3839,14 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, XLogPrefetcherComputeStats(xlogprefetcher); /* - * Wait for more WAL to arrive. Time out after 5 seconds - * to react to a trigger file promptly and to check if the - * WAL receiver is still active. + * Wait for more WAL to arrive, when we will be woken + * immediately by the WAL receiver. Use of trigger file + * via promote_trigger_file is now fully removed. */ (void) WaitLatch(&XLogRecoveryCtl->recoveryWakeupLatch, - WL_LATCH_SET | WL_TIMEOUT | - WL_EXIT_ON_PM_DEATH, - 5000L, WAIT_EVENT_RECOVERY_WAL_STREAM); + WL_LATCH_SET | WL_EXIT_ON_PM_DEATH, + -1L, + WAIT_EVENT_RECOVERY_WAL_STREAM); ResetLatch(&XLogRecoveryCtl->recoveryWakeupLatch); break; } @@ -4300,8 +4299,6 @@ SetPromoteIsTriggered(void) static bool CheckForStandbyTrigger(void) { - struct stat stat_buf; - if (LocalPromoteIsTriggered) return true; @@ -4314,23 +4311,6 @@ CheckForStandbyTrigger(void) return true; } - if (PromoteTriggerFile == NULL || strcmp(PromoteTriggerFile, "") == 0) - return false; - - if (stat(PromoteTriggerFile, &stat_buf) == 0) - { - ereport(LOG, - (errmsg("promote trigger file found: %s", PromoteTriggerFile))); - unlink(PromoteTriggerFile); - SetPromoteIsTriggered(); - return true; - } - else if (errno != ENOENT) - ereport(ERROR, - (errcode_for_file_access(), - errmsg("could not stat promote trigger file \"%s\": %m", - PromoteTriggerFile))); - return false; } diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c index 836b49484a..2cefdee581 100644 --- a/src/backend/utils/misc/guc_tables.c +++ b/src/backend/utils/misc/guc_tables.c @@ -3799,16 +3799,6 @@ struct config_string ConfigureNamesString[] = check_recovery_target_lsn, assign_recovery_target_lsn, NULL }, - { - {"promote_trigger_file", PGC_SIGHUP, REPLICATION_STANDBY, - gettext_noop("Specifies a file name whose presence ends recovery in the standby."), - NULL - }, - &PromoteTriggerFile, - "", - NULL, NULL, NULL - }, - { {"primary_conninfo", PGC_SIGHUP, REPLICATION_STANDBY, gettext_noop("Sets the connection string to be used to connect to the sending server."), diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 868d21c351..043864597f 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -331,7 +331,6 @@ #primary_conninfo = '' # connection string to sending server #primary_slot_name = '' # replication slot on sending server -#promote_trigger_file = '' # file name whose presence ends recovery #hot_standby = on # "off" disallows queries during recovery # (change requires restart) #max_standby_archive_delay = 30s # max delay before canceling queries diff --git a/src/include/access/xlogrecovery.h b/src/include/access/xlogrecovery.h index 0e3e246bd2..f3398425d8 100644 --- a/src/include/access/xlogrecovery.h +++ b/src/include/access/xlogrecovery.h @@ -65,7 +65,6 @@ extern PGDLLIMPORT TimestampTz recoveryTargetTime; extern PGDLLIMPORT const char *recoveryTargetName; extern PGDLLIMPORT XLogRecPtr recoveryTargetLSN; extern PGDLLIMPORT RecoveryTargetType recoveryTarget; -extern PGDLLIMPORT char *PromoteTriggerFile; extern PGDLLIMPORT bool wal_receiver_create_temp_slot; extern PGDLLIMPORT RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal; extern PGDLLIMPORT TimeLineID recoveryTargetTLIRequested; -- 2.38.1