Hi,

On 2021-06-10 17:49:05 +0200, Matthias van de Meent wrote:
> Apart from this, I'm also quite certain that the goto-branch that
> created this infinite loop should have been dead code: In a correctly
> working system, the GlobalVis*Rels should always be at least as strict
> as the vacrel->OldestXmin, but at the same time only GlobalVis*Rels
> can be updated (i.e. move their horizon forward) during the vacuum. As
> such, heap_prune_satisfies_vacuum should never fail to vacuum a tuple
> that also satisifies the condition of HeapTupleSatisfiesVacuum. That
> is, unless we're also going to change code to update / move forward
> vacrel->OldestXmin in lazy_scan_prune between the HPSV call and the
> loop with HTSV.

Consider the case of a transaction that inserted a row aborting. That
tuple will be "fully dead" regardless of any xid horizons.

Greetings,

Andres Freund


Reply via email to