• Alexander Korotkov's avatar
    Prevent GIN deleted pages from being reclaimed too early · 52ac6cd2
    Alexander Korotkov authored
    When GIN vacuum deletes a posting tree page, it assumes that no concurrent
    searchers can access it, thanks to ginStepRight() locking two pages at once.
    However, since 9.4 searches can skip parts of posting trees descending from the
    root.  That leads to the risk that page is deleted and reclaimed before
    concurrent search can access it.
    
    This commit prevents the risk of above by waiting for every transaction, which
    might wait to reference this page, to finish.  Due to binary compatibility
    we can't change GinPageOpaqueData to store corresponding transaction id.
    Instead we reuse page header pd_prune_xid field, which is unused in index pages.
    
    Discussion: https://postgr.es/m/31a702a.14dd.166c1366ac1.Coremail.chjischj%40163.com
    Author: Andrey Borodin, Alexander Korotkov
    Reviewed-by: Alexander Korotkov
    Backpatch-through: 9.4
    52ac6cd2
README 19.4 KB