postgres.git / summary / log / commit / refs

commit    167bd4804995afd654bd97ca9486acbece24377e
Author:   Fujii Masao <fujii@postgresql.org>
Date:     Wed May 19 04:48:19 2021 +0000
First released in: 14.0

    Make standby promotion reset the recovery pause state to 'not paused'.
    
    If a promotion is triggered while recovery is paused, the paused state ends
    and promotion continues. But previously in that case
    pg_get_wal_replay_pause_state() returned 'paused' wrongly while a promotion
    was ongoing.
    
    This commit changes a standby promotion so that it marks the recovery
    pause state as 'not paused' when it's triggered, to fix the issue.
    
    Author: Fujii Masao
    Reviewed-by: Dilip Kumar, Kyotaro Horiguchi
    Discussion: https://postgr.es/m/f706876c-4894-0ba5-6f4d-79803eeea21b@oss.nttdata.com


src/backend/access/transam/xlog.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 8d163f190f3..441a9124cd5 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; } [parent: 0a442a408b40]