Fix heap_page_prune's problem with failing to send cache invalidation
Tom Lane <tgl@sss.pgh.pa.us>
Fix heap_page_prune's problem with failing to send cache invalidation messages if the calling transaction aborts later on. Collapsing out line pointer redirects is a done deal as soon as we complete the page update, so syscache *must* be notified even if the VACUUM FULL as a whole doesn't complete. To fix, add some functionality to inval.c to allow the pending inval messages to be sent immediately while heap_page_prune is still running. The implementation is a bit chintzy: it will only work in the context of VACUUM FULL. But that's all we need now, and it can always be extended later if needed. Per my trouble report of a week ago.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/access/heap/pruneheap.c | modified | +25 −12 |
| src/backend/utils/cache/inval.c | modified | +94 −1 |
| src/include/utils/inval.h | modified | +5 −1 |