mirror of
https://github.com/postgres/postgres.git
synced 2025-08-24 09:27:52 +03:00
Remove promote_trigger_file.
Previously, an 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 promotion triggering mechanism was effectively 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 we agreed to remove the feature. This is part of a campaign to reduce wakeups on idle systems. Author: Simon Riggs <simon.riggs@enterprisedb.com> Reviewed-by: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com> Reviewed-by: Robert Haas <robertmhaas@gmail.com> Reviewed-by: Thomas Munro <thomas.munro@gmail.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Ian Lawrence Barwick <barwick@gmail.com> Discussion: https://postgr.es/m/CANbhV-FsjnzVOQGBpQ589%3DnWuL1Ex0Ykn74Nh1hEjp2usZSR5g%40mail.gmail.com
This commit is contained in:
@@ -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;
|
||||
|
||||
/*
|
||||
@@ -318,8 +317,8 @@ typedef struct XLogRecoveryCtlData
|
||||
|
||||
/*
|
||||
* recoveryWakeupLatch is used to wake up the startup process to continue
|
||||
* WAL replay, if it is waiting for WAL to arrive or failover trigger file
|
||||
* to appear.
|
||||
* WAL replay, if it is waiting for WAL to arrive or promotion to be
|
||||
* requested.
|
||||
*
|
||||
* Note that the startup process also uses another latch, its procLatch,
|
||||
* to wait for recovery conflict. If we get rid of recoveryWakeupLatch for
|
||||
@@ -2906,10 +2905,7 @@ recoveryApplyDelay(XLogReaderState *record)
|
||||
{
|
||||
ResetLatch(&XLogRecoveryCtl->recoveryWakeupLatch);
|
||||
|
||||
/*
|
||||
* This might change recovery_min_apply_delay or the trigger file's
|
||||
* location.
|
||||
*/
|
||||
/* This might change recovery_min_apply_delay. */
|
||||
HandleStartupProcInterrupts();
|
||||
|
||||
if (CheckForStandbyTrigger())
|
||||
@@ -3155,8 +3151,8 @@ ReadRecord(XLogPrefetcher *xlogprefetcher, int emode,
|
||||
* as for waiting for the requested WAL record to arrive in standby mode.
|
||||
*
|
||||
* 'emode' specifies the log level used for reporting "file not found" or
|
||||
* "end of WAL" situations in archive recovery, or in standby mode when a
|
||||
* trigger file is found. If set to WARNING or below, XLogPageRead() returns
|
||||
* "end of WAL" situations in archive recovery, or in standby mode when
|
||||
* promotion is triggered. If set to WARNING or below, XLogPageRead() returns
|
||||
* XLREAD_FAIL in those situations, on higher log levels the ereport() won't
|
||||
* return.
|
||||
*
|
||||
@@ -3424,7 +3420,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
|
||||
*
|
||||
* 1. Read from either archive or pg_wal (XLOG_FROM_ARCHIVE), or just
|
||||
* pg_wal (XLOG_FROM_PG_WAL)
|
||||
* 2. Check trigger file
|
||||
* 2. Check for promotion trigger request
|
||||
* 3. Read from primary server via walreceiver (XLOG_FROM_STREAM)
|
||||
* 4. Rescan timelines
|
||||
* 5. Sleep wal_retrieve_retry_interval milliseconds, and loop back to 1.
|
||||
@@ -3481,10 +3477,10 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
|
||||
case XLOG_FROM_PG_WAL:
|
||||
|
||||
/*
|
||||
* Check to see if the trigger file exists. Note that we
|
||||
* do this only after failure, so when you create the
|
||||
* trigger file, we still finish replaying as much as we
|
||||
* can from archive and pg_wal before failover.
|
||||
* Check to see if promotion is requested. Note that we do
|
||||
* this only after failure, so when you promote, we still
|
||||
* finish replaying as much as we can from archive and
|
||||
* pg_wal before failover.
|
||||
*/
|
||||
if (StandbyMode && CheckForStandbyTrigger())
|
||||
{
|
||||
@@ -3840,14 +3836,13 @@ 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.
|
||||
*/
|
||||
(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;
|
||||
}
|
||||
@@ -4294,14 +4289,11 @@ SetPromoteIsTriggered(void)
|
||||
}
|
||||
|
||||
/*
|
||||
* Check to see whether the user-specified trigger file exists and whether a
|
||||
* promote request has arrived. If either condition holds, return true.
|
||||
* Check whether a promote request has arrived.
|
||||
*/
|
||||
static bool
|
||||
CheckForStandbyTrigger(void)
|
||||
{
|
||||
struct stat stat_buf;
|
||||
|
||||
if (LocalPromoteIsTriggered)
|
||||
return true;
|
||||
|
||||
@@ -4314,23 +4306,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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user