Re: Incorrect logic in XLogNeedsFlush()
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Melanie Plageman <melanieplageman@gmail.com>
Cc: Dilip Kumar <dilipbalaut@gmail.com>, Jeff Davis <pgsql@j-davis.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Andres Freund <andres@anarazel.de>
Date: 2025-09-18T03:53:40Z
Lists: pgsql-hackers
On Wed, Sep 17, 2025 at 09:23:05PM -0400, Melanie Plageman wrote: > In terms of comments, I think it is best to update the comment above > XLogNeedsFlush(). Something like : > > /* > - * Test whether XLOG data has been flushed up to (at least) the given position. > + * Test whether XLOG data has been flushed up to (at least) the given position > + * or whether the minimum recovery point is updated past the given position. Okay. > - * Returns true if a flush is still needed. (It may be that someone else > - * is already in process of flushing that far, however.) > + * Returns true if a flush is still needed or if the minimum recovery point > + * must be updated. Okay with that as well. Why not if you find that confusing.. > + * It is possible that someone else is already in the process of flushing that > + * far or updating the minimum recovery point that far. I am not sure about the value this part brings, considering the addition with the two other paragraphs. >> /* >> @@ -3114,8 +3121,13 @@ XLogNeedsFlush(XLogRecPtr record) >> * During recovery, we don't flush WAL but update minRecoveryPoint >> * instead. So "needs flush" is taken to mean whether minRecoveryPoint >> * would need to be updated. >> + * >> + * XLogInsertAllowed() is used as an end-of-recovery checkpoint is >> + * launched while recovery is still in progress, RecoveryInProgress() >> + * returning true in this case. This check should be consistent with the >> + * one in XLogFlush(). >> */ > > I can't quite parse the wording of the above comment. Yep. I am missing an "if" here for "is used as, if an end-of-recovery", but I am coming with simpler, like: Using XLogInsertAllowed() rather than RecoveryInProgress() matters for the case of an end-of-recovery checkpoint, where WAL data is flushed. This check should be consistent with the one in XLogFlush(). -- Michael
Commits
-
Reorder XLogNeedsFlush() checks to be more consistent
- bb68cde4136b 19 (unreleased) landed
-
Make XLogFlush() and XLogNeedsFlush() decision-making more consistent
- deb208df4559 19 (unreleased) landed