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;
 }
 

Reply via email to