• Marko Mäkelä's avatar
    MDEV-13536 DB_TRX_ID is not actually being reset when the history is removed · f4b379d6
    Marko Mäkelä authored
    This should have been part of MDEV-12288.
    
    trx_undo_t::del_marks: Remove.
    Purge needs to process all undo log records in order to
    reset the DB_TRX_ID. Before MDEV-12288, it sufficed to only delete
    the purgeable delete-marked records, and it ignore other undo log.
    
    trx_rseg_t::needs_purge: Renamed from trx_rseg_t::last_del_marks.
    Indicates whether a rollback segment needs to be processed by purge.
    
    TRX_UNDO_NEEDS_PURGE: Renamed from TRX_UNDO_DEL_MARKS.
    Indicates whether a rollback segment needs to be processed by purge.
    This will be 1 until trx_purge_free_segment() has been invoked.
    
    row_purge_record_func(): Set the is_insert flag for TRX_UNDO_INSERT_REC,
    so that the DB_ROLL_PTR will match in row_purge_reset_trx_id().
    
    trx_purge_fetch_next_rec(): Add a comment about row_purge_record_func()
    going to set the is_insert flag.
    
    trx_purge_read_undo_rec(): Always attempt to read the undo log record.
    
    trx_purge_get_next_rec(): Do not skip any undo log records.
    Even when no clustered index record is going to be removed,
    we may want to reset some DB_TRX_ID,DB_ROLL_PTR.
    
    trx_undo_rec_get_cmpl_info(), trx_undo_rec_get_extern_storage(): Remove.
    
    trx_purge_add_undo_to_history(): Set the TRX_UNDO_NEEDS_PURGE flag
    so that the resetting will work on undo logs that were originally
    created before MDEV-12288 (MariaDB 10.3.1).
    
    trx_undo_roll_ptr_is_insert(), trx_purge_free_segment(): Cleanup
    (should be no functional change).
    f4b379d6
trx0undo.h 21.3 KB