Re: [Patch] ALTER SYSTEM READ ONLY
Dilip Kumar <dilipbalaut@gmail.com>
On Mon, May 17, 2021 at 11:48 AM Amul Sul <sulamul@gmail.com> wrote: > > On Sat, May 15, 2021 at 3:12 PM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > > > On Thu, May 13, 2021 at 2:56 PM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > > > > > Great thanks. I will review the remaining patch soon. > > > > I have reviewed v28-0003, and I have some comments on this. > > > > === > > @@ -126,9 +127,14 @@ XLogBeginInsert(void) > > Assert(mainrdata_last == (XLogRecData *) &mainrdata_head); > > Assert(mainrdata_len == 0); > > > > + /* > > + * WAL permission must have checked before entering the critical section. > > + * Otherwise, WAL prohibited error will force system panic. > > + */ > > + Assert(walpermit_checked_state != WALPERMIT_UNCHECKED || > > !CritSectionCount); > > + > > /* cross-check on whether we should be here or not */ > > - if (!XLogInsertAllowed()) > > - elog(ERROR, "cannot make new WAL entries during recovery"); > > + CheckWALPermitted(); > > > > We must not call CheckWALPermitted inside the critical section, > > instead if we are here we must be sure that > > WAL is permitted, so better put an assert. Even if that is ensured by > > some other mean then also I don't > > see any reason for calling this error generating function. > > > > I understand that we should not have an error inside a critical section but > this check is not wrong. Patch has enough checking so that errors due to WAL > prohibited state must not hit in the critical section, see assert just before > CheckWALPermitted(). Before entering into the critical section, we do have an > explicit WAL prohibited check. And to make sure that check has been done for > all current critical section for the wal writes, we have aforesaid assert > checking, for more detail on this please have a look at the "WAL prohibited > system state" section of src/backend/access/transam/README added in 0004 patch. > This assertion also ensures that future development does not miss the WAL > prohibited state check before entering into a newly added critical section for > WAL writes. I think we need CheckWALPermitted(); check, in XLogBeginInsert() function because if XLogBeginInsert() maybe called outside critical section e.g. pg_truncate_visibility_map() then we should error out. So this check make sense to me. -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com
Commits
-
Initialize variable to placate compiler.
- a030a0c5ccb1 15.0 landed
-
StartupXLOG: Don't repeatedly disable/enable local xlog insertion.
- 18e0913a4203 15.0 landed
-
StartupXLOG: Call CleanupAfterArchiveRecovery after XLogReportParameters.
- a75dbf7f9ee6 15.0 landed
-
Postpone some end-of-recovery operations related to allowing WAL.
- 811051c2e7af 15.0 landed
-
Refactor some end-of-recovery code out of StartupXLOG().
- 6df1543abfed 15.0 landed
-
Re-enable contrib/bloom's TAP tests.
- 7d1aa6bf1c27 15.0 cited
-
Remove unnecessary call to ReadCheckpointRecord().
- 1d919de5eb3f 15.0 cited
-
Allow for error or refusal while absorbing a ProcSignalBarrier.
- a3ed4d1efe9f 14.0 landed
-
Add comment to explain an unused function parameter
- 101f903e51f5 14.0 cited
-
Extend the ProcSignal mechanism to support barriers.
- 16a4e4aecd47 13.0 cited
-
At promotion, don't leave behind a partial segment on the old timeline.
- 7cbee7c0a1db 9.5.0 cited