On Wed, Sep 15, 2021 at 10:49:39PM +0000, Bossart, Nathan wrote: > Ah, I was missing this context. Perhaps this should be included in > the patch set for the other thread, especially if it will need to be > exported.
This part of the patch is mentioned at the top of the thread:
- LWLockAcquire(ControlFileLock, LW_EXCLUSIVE);
- ControlFile->state = DB_IN_PRODUCTION;
- ControlFile->time = (pg_time_t) time(NULL);
-
+ SetControlFileDBState(DB_IN_PRODUCTION);
SpinLockAcquire(&XLogCtl->info_lck);
XLogCtl->SharedRecoveryState = RECOVERY_STATE_DONE;
SpinLockRelease(&XLogCtl->info_lck);
There is an assumption in this code to update SharedRecoveryState
*while* holding ControlFileLock. For example, see the following
comment in xlog.c, ReadRecord():
/*
* We update SharedRecoveryState while holding the lock on
* ControlFileLock so both states are consistent in shared
* memory.
*/
--
Michael
signature.asc
Description: PGP signature
