• Robert Haas's avatar
    Fix corner case in autovacuum-forcing logic for multixact wraparound. · ed16f73c
    Robert Haas authored
    Since find_multixact_start() relies on SimpleLruDoesPhysicalPageExist(),
    and that function looks only at the on-disk state, it's possible for it
    to fail to find a page that exists in the in-memory SLRU that has not
    been written yet.  If that happens, SetOffsetVacuumLimit() will
    erroneously decide to force emergency autovacuuming immediately.
    
    We should probably fix find_multixact_start() to consider the data
    cached in memory as well as on the on-disk state, but that's no excuse
    for SetOffsetVacuumLimit() to be stupid about the case where it can
    no longer read the value after having previously succeeded in doing so.
    
    Report by Andres Freund.
    ed16f73c
multixact.c 107 KB