diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 7621fc05e2..3c29581b63 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -877,7 +877,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); @@ -5943,12 +5943,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) @@ -5958,9 +5962,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()) { @@ -7141,7 +7150,7 @@ StartupXLOG(void) * adding another spinlock cycle to prevent that. */ if (((volatile XLogCtlData *) XLogCtl)->recoveryPause) - recoveryPausesHere(); + recoveryPausesHere(false); /* * Have we reached our recovery target? @@ -7166,7 +7175,7 @@ StartupXLOG(void) * work. */ if (((volatile XLogCtlData *) XLogCtl)->recoveryPause) - recoveryPausesHere(); + recoveryPausesHere(false); } /* Setup error traceback support for ereport() */ @@ -7340,7 +7349,7 @@ StartupXLOG(void) case RECOVERY_TARGET_ACTION_PAUSE: SetRecoveryPause(true); - recoveryPausesHere(); + recoveryPausesHere(true); /* drop into promote */