• Andres Freund's avatar
    Emit invalidations to standby for transactions without xid. · c6ff84b0
    Andres Freund authored
    So far, when a transaction with pending invalidations, but without an
    assigned xid, committed, we simply ignored those invalidation
    messages. That's problematic, because those are actually sent for a
    reason.
    
    Known symptoms of this include that existing sessions on a hot-standby
    replica sometimes fail to notice new concurrently built indexes and
    visibility map updates.
    
    The solution is to WAL log such invalidations in transactions without an
    xid. We considered to alternatively force-assign an xid, but that'd be
    problematic for vacuum, which might be run in systems with few xids.
    
    Important: This adds a new WAL record, but as the patch has to be
    back-patched, we can't bump the WAL page magic. This means that standbys
    have to be updated before primaries; otherwise
    "PANIC: standby_redo: unknown op code 32" errors can be encountered.
    
    XXX:
    
    Reported-By: Васильев Дмитрий, Masahiko Sawada
    Discussion:
        CAB-SwXY6oH=9twBkXJtgR4UC1NqT-vpYAtxCseME62ADwyK5OA@mail.gmail.com
        CAD21AoDpZ6Xjg=gFrGPnSn4oTRRcwK1EBrWCq9OqOHuAcMMC=w@mail.gmail.com
    c6ff84b0
reorderbuffer.c 89.2 KB