vacuumlazy.c: document vistest and OldestXmin.
authorPeter Geoghegan <pg@bowt.ie>
Sat, 12 Mar 2022 20:52:38 +0000 (12:52 -0800)
committerPeter Geoghegan <pg@bowt.ie>
Sat, 12 Mar 2022 20:52:38 +0000 (12:52 -0800)
commit73f6ec3d3c8d5786c54373e71a096e5acf78e7ca
treebdcfe804efd564ec64a8a14bb8421c4299a54da4
parent5b68f75e12831cd5b7d8058320c0ca29bbe76067
vacuumlazy.c: document vistest and OldestXmin.

Explain the relationship between vacuumlazy.c's vistest and OldestXmin
cutoffs.  These closely related cutoffs are different in subtle but
important ways.  Also document a closely related rule: we must establish
rel_pages _after_ OldestXmin to ensure that no XID < OldestXmin can be
missed by lazy_scan_heap().

It's easier to explain these issues by initializing everything together,
so consolidate initialization of vacrel state.  Now almost every vacrel
field is initialized by heap_vacuum_rel().  The only remaining exception
is the dead_items array, which is still managed by lazy_scan_heap() due
to interactions with how we initialize parallel VACUUM.

Also move the process that updates pg_class entries for each index into
heap_vacuum_rel(), and adjust related assertions.  All pg_class updates
now take place after lazy_scan_heap() returns, which seems clearer.

Author: Peter Geoghegan <pg@bowt.ie>
Reviewed-By: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/20211211045710.ljtuu4gfloh754rs@alap3.anarazel.de
Discussion: https://postgr.es/m/CAH2-WznYsUxVT156rCQ+q=YD4S4=1M37hWvvHLz-H1pwSM8-Ew@mail.gmail.com
src/backend/access/heap/vacuumlazy.c