If a promotion is triggered while recovery is paused, the paused state ends and promotion continues. But currently pg_get_wal_replay_pause_state() returns 'paused' in that case. Isn't this a bug?
Attached patch fixes this issue by resetting the recovery pause state to 'not paused' when standby promotion is triggered. Thought? Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 8d163f190f..441a9124cd 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -12825,6 +12825,14 @@ SetPromoteIsTriggered(void) XLogCtl->SharedPromoteIsTriggered = true; SpinLockRelease(&XLogCtl->info_lck); + /* + * Mark the recovery pause state as 'not paused' because the paused state + * ends and promotion continues if a promotion is triggered while recovery + * is paused. Otherwise pg_get_wal_replay_pause_state() can mistakenly + * return 'paused' while a promotion is ongoing. + */ + SetRecoveryPause(false); + LocalPromoteIsTriggered = true; }