• Noah Misch's avatar
    Prevent excess SimpleLruTruncate() deletion. · 6db99283
    Noah Misch authored
    Every core SLRU wraps around.  With the exception of pg_notify, the wrap
    point can fall in the middle of a page.  Account for this in the
    PagePrecedes callback specification and in SimpleLruTruncate()'s use of
    said callback.  Update each callback implementation to fit the new
    specification.  This changes SerialPagePrecedesLogically() from the
    style of asyncQueuePagePrecedes() to the style of CLOGPagePrecedes().
    (Whereas pg_clog and pg_serial share a key space, pg_serial is nothing
    like pg_notify.)  The bug fixed here has the same symptoms and user
    followup steps as 592a589a04bd456410b853d86bd05faa9432cbbb.  Back-patch
    to 9.5 (all supported versions).
    
    Reviewed by Andrey Borodin and (in earlier versions) by Tom Lane.
    
    Discussion: https://postgr.es/m/20190202083822.GC32531@gust.leadboat.com
    6db99283
subtrans.c 10.8 KB