C comments: improve description of GiST NSN and GistBuildLSN

GiST indexes are complex, so adding more details in the code might help
someone.

Discussion: https://postgr.es/m/20210302164021.GA364@momjian.us
This commit is contained in:
Bruce Momjian 2021-03-10 17:03:10 -05:00
parent d87251048a
commit 845ac7f847
2 changed files with 12 additions and 4 deletions

View File

@ -10,6 +10,7 @@ GiST stands for Generalized Search Tree. It was introduced in the seminal paper
Jeffrey F. Naughton, Avi Pfeffer: Jeffrey F. Naughton, Avi Pfeffer:
http://www.sai.msu.su/~megera/postgres/gist/papers/gist.ps http://www.sai.msu.su/~megera/postgres/gist/papers/gist.ps
https://dsf.berkeley.edu/papers/sigmod97-gist.pdf
and implemented by J. Hellerstein and P. Aoki in an early version of and implemented by J. Hellerstein and P. Aoki in an early version of
PostgreSQL (more details are available from The GiST Indexing Project PostgreSQL (more details are available from The GiST Indexing Project

View File

@ -51,13 +51,20 @@
#define F_HAS_GARBAGE (1 << 4) /* some tuples on the page are dead, #define F_HAS_GARBAGE (1 << 4) /* some tuples on the page are dead,
* but not deleted yet */ * but not deleted yet */
/* NSN - node sequence number, a special-purpose LSN */ /*
* NSN (node sequence number) is a special-purpose LSN which is stored on each
* index page in GISTPageOpaqueData and updated only during page splits. By
* recording the parent's LSN in GISTSearchItem.parentlsn, it is possible to
* detect concurrent child page splits by checking if parentlsn < child's NSN,
* and handle them properly. The child page's LSN is insufficient for this
* purpose since it is updated for every page change.
*/
typedef XLogRecPtr GistNSN; typedef XLogRecPtr GistNSN;
/* /*
* A bogus LSN / NSN value used during index build. Must be smaller than any * A fake LSN / NSN value used during index builds. Must be smaller than any
* real or fake unlogged LSN, so that after an index build finishes, all the * real or fake (unlogged) LSN generated after the index build completes so
* splits are considered completed. * that all splits are considered complete.
*/ */
#define GistBuildLSN ((XLogRecPtr) 1) #define GistBuildLSN ((XLogRecPtr) 1)