On Fri, Feb 19, 2021 at 5:43 PM Amul Sul <sula...@gmail.com> wrote: > > In the attached version I have made the changes accordingly what Robert has > summarised in his previous mail[1]. > > In addition to that, I also move the code that updates the control file to > XLogAcceptWrites() which will also get skipped when the system is read-only > (wal > prohibited). The system will be in the crash recovery, and that will > change once we do the end-of-recovery checkpoint and the WAL writes operation > which we were skipping from startup. The benefit of keeping the system in > recovery mode is that it fixes my concern[2] where other backends could > connect > and write wal records while we were changing the system to read-write. Now, no > other backends allow a wal write; UpdateFullPageWrites(), end-of-recovery > checkpoint, and XLogReportParameters() operations will be performed in the > same > sequence as it is in the startup while changing the system to read-write.
I was looking into the changes espcially recovery related problem, I have a few questions 1. +static bool +XLogAcceptWrites(bool needChkpt, bool bgwriterLaunched, + bool localPromoteIsTriggered, XLogReaderState *xlogreader, + bool archiveRecoveryRequested, TimeLineID endOfLogTLI, + XLogRecPtr endOfLog, TimeLineID thisTimeLineID) +{ + bool promoted = false; + + /* ..... + if (localPromoteIsTriggered) { - checkPointLoc = ControlFile->checkPoint; + XLogRecord *record; ... + record = ReadCheckpointRecord(xlogreader, + ControlFile->checkPoint, + 1, false); if (record != NULL) { promoted = true; ... CreateEndOfRecoveryRecord(); } Why do we need to move promote related code in XLogAcceptWrites? IMHO, this promote related handling should be in StartupXLOG only. That will look cleaner. > > 1] > http://postgr.es/m/CA+TgmoZ=cctbaxxmtyzogxegqzoz9smkbwrdpsacpjvfcgc...@mail.gmail.com > 2] > http://postgr.es/m/caaj_b97xx-nqrym_uxzecph9asgomrordnhrg1n51fdcdwo...@mail.gmail.com 2. I did not clearly understand your concern in point [2], because of which you have to postpone RECOVERY_STATE_DONE untill system is set back to read-write. Can you explain this? -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com