• Alvaro Herrera's avatar
    Fix failure to delete spill files of aborted transactions · df9f682c
    Alvaro Herrera authored
    Logical decoding's reorderbuffer.c may spill transaction files to disk
    when transactions are large.  These are supposed to be removed when they
    become "too old" by xid; but file removal requires the boundary LSNs of
    the transaction to be known.  The final_lsn is only set when we see the
    commit or abort record for the transaction, but nothing sets the value
    for transactions that crash, so the removal code misbehaves -- in
    assertion-enabled builds, it crashes by a failed assertion.
    
    To fix, modify the final_lsn of transactions that don't have a value
    set, to the LSN of the very latest change in the transaction.  This
    causes the spilled files to be removed appropriately.
    
    Author: Atsushi Torikoshi
    Reviewed-by: Kyotaro HORIGUCHI, Craig Ringer, Masahiko Sawada
    Discussion: https://postgr.es/m/54e4e488-186b-a056-6628-50628e4e4ebc@lab.ntt.co.jp
    df9f682c
reorderbuffer.c 87.8 KB