diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 3813eadfb4..5ab09917c7 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -860,7 +860,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 isRecoveryTargetAction); static bool recoveryApplyDelay(XLogReaderState *record); static void SetLatestXTime(TimestampTz xtime); static void SetCurrentChunkStartTime(TimestampTz xtime); @@ -5912,20 +5912,28 @@ recoveryStopsAfter(XLogReaderState *record) * anyone cares about server power consumption in. */ static void -recoveryPausesHere(void) +recoveryPausesHere(bool isRecoveryTargetAction) { /* Don't pause unless users can connect! */ if (!LocalHotStandbyActive) return; - ereport(LOG, - (errmsg("recovery has paused"), - errhint("Execute pg_wal_replay_resume() to continue."))); + if (isRecoveryTargetAction) + ereport(LOG, + (errmsg("recovery has paused"), + 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()) { pg_usleep(1000000L); /* 1000 ms */ HandleStartupProcInterrupts(); + /* handle promote requests */ + if (isRecoveryTargetAction && CheckForStandbyTrigger()) + SetRecoveryPause(false); } } @@ -7096,7 +7104,7 @@ StartupXLOG(void) * adding another spinlock cycle to prevent that. */ if (((volatile XLogCtlData *) XLogCtl)->recoveryPause) - recoveryPausesHere(); + recoveryPausesHere(false); /* * Have we reached our recovery target? @@ -7121,7 +7129,7 @@ StartupXLOG(void) * work. */ if (((volatile XLogCtlData *) XLogCtl)->recoveryPause) - recoveryPausesHere(); + recoveryPausesHere(false); } /* Setup error traceback support for ereport() */ @@ -7295,7 +7303,7 @@ StartupXLOG(void) case RECOVERY_TARGET_ACTION_PAUSE: SetRecoveryPause(true); - recoveryPausesHere(); + recoveryPausesHere(true); /* drop into promote */