diff options
author | Fujii Masao <fujii@postgresql.org> | 2020-04-01 03:35:13 +0900 |
---|---|---|
committer | Fujii Masao <fujii@postgresql.org> | 2020-04-01 03:35:13 +0900 |
commit | b0236508d3589a45e574284cd3303b689111765d (patch) | |
tree | ad147759fdcd48723d0f679722f934030805f8f9 /src/backend/access/transam/xlog.c | |
parent | 051fd5e0f99b14d7bd76fb800bd077bf394fecd5 (diff) | |
download | postgresql-b0236508d3589a45e574284cd3303b689111765d.tar.gz postgresql-b0236508d3589a45e574284cd3303b689111765d.zip |
Improve the message logged when recovery is paused.
When recovery target is reached and recovery is paused because of
recovery_target_action=pause, executing pg_wal_replay_resume() causes
the standby to promote, i.e., the recovery to end. So, in this case,
the previous message "Execute pg_wal_replay_resume() to continue"
logged was confusing because pg_wal_replay_resume() doesn't cause
the recovery to continue.
This commit improves the message logged when recovery is paused,
and the proper message is output based on what (pg_wal_replay_pause
or recovery_target_action) causes recovery to be paused.
Author: Sergei Kornilov, revised by Fujii Masao
Reviewed-by: Robert Haas
Discussion: https://postgr.es/m/19168211580382043@myt5-b646bde4b8f3.qloud-c.yandex.net
Diffstat (limited to 'src/backend/access/transam/xlog.c')
-rw-r--r-- | src/backend/access/transam/xlog.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 54ef90a029c..977d448f502 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -885,7 +885,7 @@ static void validateRecoveryParameters(void); static void exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog); static bool recoveryStopsBefore(XLogReaderState *record); static bool recoveryStopsAfter(XLogReaderState *record); -static void recoveryPausesHere(void); +static void recoveryPausesHere(bool endOfRecovery); static bool recoveryApplyDelay(XLogReaderState *record); static void SetLatestXTime(TimestampTz xtime); static void SetCurrentChunkStartTime(TimestampTz xtime); @@ -5951,12 +5951,16 @@ recoveryStopsAfter(XLogReaderState *record) /* * Wait until shared recoveryPause flag is cleared. * + * endOfRecovery is true if the recovery target is reached and + * the paused state starts at the end of recovery because of + * recovery_target_action=pause, and false otherwise. + * * XXX Could also be done with shared latch, avoiding the pg_usleep loop. * Probably not worth the trouble though. This state shouldn't be one that * anyone cares about server power consumption in. */ static void -recoveryPausesHere(void) +recoveryPausesHere(bool endOfRecovery) { /* Don't pause unless users can connect! */ if (!LocalHotStandbyActive) @@ -5966,9 +5970,14 @@ recoveryPausesHere(void) if (LocalPromoteIsTriggered) return; - ereport(LOG, - (errmsg("recovery has paused"), - errhint("Execute pg_wal_replay_resume() to continue."))); + if (endOfRecovery) + ereport(LOG, + (errmsg("pausing at the end of recovery"), + errhint("Execute pg_wal_replay_resume() to promote."))); + else + ereport(LOG, + (errmsg("recovery has paused"), + errhint("Execute pg_wal_replay_resume() to continue."))); while (RecoveryIsPaused()) { @@ -7201,7 +7210,7 @@ StartupXLOG(void) * adding another spinlock cycle to prevent that. */ if (((volatile XLogCtlData *) XLogCtl)->recoveryPause) - recoveryPausesHere(); + recoveryPausesHere(false); /* * Have we reached our recovery target? @@ -7226,7 +7235,7 @@ StartupXLOG(void) * work. */ if (((volatile XLogCtlData *) XLogCtl)->recoveryPause) - recoveryPausesHere(); + recoveryPausesHere(false); } /* Setup error traceback support for ereport() */ @@ -7400,7 +7409,7 @@ StartupXLOG(void) case RECOVERY_TARGET_ACTION_PAUSE: SetRecoveryPause(true); - recoveryPausesHere(); + recoveryPausesHere(true); /* drop into promote */ |