• A
    Do not read a persistent tuple after it is freed · 5f765a8e
    Asim R P 提交于
    This bug was found in a production environment where vacuum on
    gp_persistent_relation was concurrently running with a backend
    performing end-of-xact filesystem operations.  And the GUC
    debug_persistent_print was enabled.
    
    The *_ReadTuple() function was called on a persistent TID after the
    corresponding tuple was deleted with frozen transaction ID.  The
    concurrent vacuum recycled the tuple and it led to a SIGSEGV when the
    backend tried to access values from the tuple.
    
    Fix it by avoiding the debug log message in case when the persistent
    tuple is freed (transitioning to FREE state).  All other state
    transitions are logged.
    
    In absence of concurrent vacuum, things worked just fine because the
    *_ReadTuple() interface reads tuples from persistent tables directly
    using TID.
    5f765a8e
cdbpersistentfilesysobj.c 199.6 KB