Commit 845ac7f8 authored by Bruce Momjian's avatar Bruce Momjian

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
parent d8725104
...@@ -10,6 +10,7 @@ GiST stands for Generalized Search Tree. It was introduced in the seminal paper ...@@ -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
......
...@@ -51,13 +51,20 @@ ...@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment