• Thomas Munro's avatar
    Add basic infrastructure for 64 bit transaction IDs. · 2fc7af5e
    Thomas Munro authored
    Instead of inferring epoch progress from xids and checkpoints,
    introduce a 64 bit FullTransactionId type and use it to track xid
    generation.  This fixes an unlikely bug where the epoch is reported
    incorrectly if the range of active xids wraps around more than once
    between checkpoints.
    
    The only user-visible effect of this commit is to correct the epoch
    used by txid_current() and txid_status(), also visible with
    pg_controldata, in those rare circumstances.  It also creates some
    basic infrastructure so that later patches can use 64 bit
    transaction IDs in more places.
    
    The new type is a struct that we pass by value, as a form of strong
    typedef.  This prevents the sort of accidental confusion between
    TransactionId and FullTransactionId that would be possible if we
    were to use a plain old uint64.
    
    Author: Thomas Munro
    Reported-by: Amit Kapila
    Reviewed-by: Andres Freund, Tom Lane, Heikki Linnakangas
    Discussion: https://postgr.es/m/CAA4eK1%2BMv%2Bmb0HFfWM9Srtc6MVe160WFurXV68iAFMcagRZ0dQ%40mail.gmail.com
    2fc7af5e
pg_controldata.c 11.6 KB