• Tom Lane's avatar
    Don't advance checkPoint.nextXid near the end of a checkpoint sequence. · 3114cb60
    Tom Lane authored
    This reverts commit c1113069 in favor of
    actually fixing the problem: namely, that we should never have been
    modifying the checkpoint record's nextXid at this point to begin with.
    The nextXid should match the state as of the checkpoint's logical WAL
    position (ie the redo point), not the state as of its physical position.
    It's especially bogus to advance it in some wal_levels and not others.
    In any case there is no need for the checkpoint record to carry the
    same nextXid shown in the XLOG_RUNNING_XACTS record just emitted by
    LogStandbySnapshot, as any replay operation will already have adopted
    that value as current.
    
    This fixes bug #7710 from Tarvi Pillessaar, and probably also explains bug
    #6291 from Daniel Farina, in that if a checkpoint were in progress at the
    instant of XID wraparound, the epoch bump would be lost as reported.
    (And, of course, these days there's at least a 50-50 chance of a checkpoint
    being in progress at any given instant.)
    
    Diagnosed by me and independently by Andres Freund.  Back-patch to all
    branches supporting hot standby.
    3114cb60
standby.h 4.08 KB