Fix GIST readme on LSN vs NSN
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2023-09-18T11:09:43Z
Lists: pgsql-hackers
Attachments
- fix-gist-readme-nsn-lsn.patch (text/x-patch) patch
The GiST README says:
> If the F_FOLLOW_RIGHT flag is not set, a scan compares the NSN on the
> child and the LSN it saw in the parent. If NSN < LSN, the scan looked
> at the parent page before the downlink was inserted, so it should
> follow the rightlink. Otherwise the scan saw the downlink in the
> parent page, and will/did follow that as usual.
While the code does this (in gistget.c):
> if (!XLogRecPtrIsInvalid(pageItem->data.parentlsn) &&
> (GistFollowRight(page) ||
> pageItem->data.parentlsn < GistPageGetNSN(page)) &&
> opaque->rightlink != InvalidBlockNumber /* sanity check */ )
> {
> /* There was a page split, follow right link to add pages */
Note the comparison on LSN and NSN. The code seems correct, but the
README got it backwards.
The narrow fix would be to change the "NSN < LSN" to "LSN < NSN" in the
README. But I propose the attached patch to reword the sentence a little
more.
--
Heikki Linnakangas
Neon (https://neon.tech)
Commits
-
Fix GiST README's explanation of the NSN cross-check.
- f1a99e13ca63 11.22 landed
- df4eddbe4359 12.17 landed
- 459439f72892 13.13 landed
- 78df27e2ff52 14.10 landed
- bd7a18e70714 15.5 landed
- 64276c7e45e6 16.1 landed
- bf094372d14b 17.0 landed