Remove retry loop in heap_page_prune().
commit1ccc1e05ae8feabf444259234d34e1e32231604d
authorRobert Haas <rhaas@postgresql.org>
Mon, 2 Oct 2023 15:40:07 +0000 (2 11:40 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 2 Oct 2023 15:40:07 +0000 (2 11:40 -0400)
tree057ec0d5c4755cc7f03c9a536fd49a6cbb74e296
parente64c733bb1996e52a13f6fc4a1240703f607fa53
Remove retry loop in heap_page_prune().

The retry loop is needed because heap_page_prune() calls
HeapTupleSatisfiesVacuum() and then lazy_scan_prune() does the same
thing again, and they might get different answers due to concurrent
clog updates.  But this patch makes heap_page_prune() return the
HeapTupleSatisfiesVacuum() results that it computed back to the
caller, which allows lazy_scan_prune() to avoid needing to recompute
those values in the first place. That's nice both because it eliminates
the need for a retry loop and also because it's cheaper.

Melanie Plageman, reviewed by David Geier, Andres Freund, and me.

Discussion: https://postgr.es/m/CAAKRu_br124qsGJieuYA0nGjywEukhK1dKBfRdby_4yY3E9SXA%40mail.gmail.com
src/backend/access/heap/pruneheap.c
src/backend/access/heap/vacuumlazy.c
src/include/access/heapam.h