diff options
author | Michael Paquier <michael@paquier.xyz> | 2025-09-30 09:38:32 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2025-09-30 09:38:32 +0900 |
commit | bb68cde4136b02a7e51e8876891cd0a61c5726ca (patch) | |
tree | 889dfdf7d6db09c3a952ed1270a27983f77db1ff /src | |
parent | 3cc689f833b1c9c5b52f1fe07c0e0fd817e23c8b (diff) |
Reorder XLogNeedsFlush() checks to be more consistent
During recovery, XLogNeedsFlush() checks the minimum recovery LSN point
instead of the flush LSN point. The same condition checks are used when
updating the minimum recovery point in UpdateMinRecoveryPoint(), but are
written in reverse order.
This commit makes the order of the checks consistent between
XLogNeedsFlush() and UpdateMinRecoveryPoint(), improving the code
clarity. Note that the second check (as ordered by this commit) relies
on InRecovery, which is true only in the startup process. So this makes
XLogNeedsFlush() cheaper in the startup process with the first check
acting as a shortcut while doing crash recovery, where
LocalMinRecoveryPoint is an invalid LSN.
Author: Melanie Plageman <melanieplageman@gmail.com>
Reviewed-by: Dilip Kumar <dilipbalaut@gmail.com>
Discussion: https://postgr.es/m/aMIHNRTP6Wj6vw1s%40paquier.xyz
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/access/transam/xlog.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 109713315c0..eceab341255 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -3134,6 +3134,10 @@ XLogNeedsFlush(XLogRecPtr record) */ if (!XLogInsertAllowed()) { + /* Quick exit if already known to be updated or cannot be updated */ + if (!updateMinRecoveryPoint || record <= LocalMinRecoveryPoint) + return false; + /* * An invalid minRecoveryPoint means that we need to recover all the * WAL, i.e., we're doing crash recovery. We never modify the control @@ -3143,11 +3147,10 @@ XLogNeedsFlush(XLogRecPtr record) * it has not replayed all WAL available when doing crash recovery. */ if (XLogRecPtrIsInvalid(LocalMinRecoveryPoint) && InRecovery) + { updateMinRecoveryPoint = false; - - /* Quick exit if already known to be updated or cannot be updated */ - if (record <= LocalMinRecoveryPoint || !updateMinRecoveryPoint) return false; + } /* * Update local copy of minRecoveryPoint. But if the lock is busy, |