• Noah Misch's avatar
    Prevent concurrent SimpleLruTruncate() for any given SLRU. · 566372b3
    Noah Misch authored
    The SimpleLruTruncate() header comment states the new coding rule.  To
    achieve this, add locktype "frozenid" and two LWLocks.  This closes a
    rare opportunity for data loss, which manifested as "apparent
    wraparound" or "could not access status of transaction" errors.  Data
    loss is more likely in pg_multixact, due to released branches' thin
    margin between multiStopLimit and multiWrapLimit.  If a user's physical
    replication primary logged ":  apparent wraparound" messages, the user
    should rebuild standbys of that primary regardless of symptoms.  At less
    risk is a cluster having emitted "not accepting commands" errors or
    "must be vacuumed" warnings at some point.  One can test a cluster for
    this data loss by running VACUUM FREEZE in every database.  Back-patch
    to 9.5 (all supported versions).
    
    Discussion: https://postgr.es/m/20190218073103.GA1434723@rfd.leadboat.com
    566372b3
catalogs.sgml 437 KB