• Amit Kapila's avatar
    WAL Log invalidations at command end with wal_level=logical. · c55040cc
    Amit Kapila authored
    When wal_level=logical, write invalidations at command end into WAL so
    that decoding can use this information.
    
    This patch is required to allow the streaming of in-progress transactions
    in logical decoding.  The actual work to allow streaming will be committed
    as a separate patch.
    
    We still add the invalidations to the cache and write them to WAL at
    commit time in RecordTransactionCommit(). This uses the existing
    XLOG_INVALIDATIONS xlog record type, from the RM_STANDBY_ID resource
    manager (see LogStandbyInvalidations for details).
    
    So existing code relying on those invalidations (e.g. redo) does not need
    to be changed.
    
    The invalidations written at command end uses a new xlog record type
    XLOG_XACT_INVALIDATIONS, from RM_XACT_ID resource manager. See
    LogLogicalInvalidations for details.
    
    These new xlog records are ignored by existing redo procedures, which
    still rely on the invalidations written to commit records.
    
    The invalidations are decoded and accumulated in top-transaction, and then
    executed during replay.  This obviates the need to decode the
    invalidations as part of a commit record.
    
    Bump XLOG_PAGE_MAGIC, since this introduces XLOG_XACT_INVALIDATIONS.
    
    Author: Dilip Kumar, Tomas Vondra, Amit Kapila
    Reviewed-by: Amit Kapila
    Tested-by: Neha Sharma and Mahendra Singh Thalor
    Discussion: https://postgr.es/m/688b0b7f-2f6c-d827-c27b-216a8e3ea700@2ndquadrant.com
    c55040cc
inval.h 1.78 KB