• Marko Mäkelä's avatar
    MDEV-20117 Assertion 0 failed in row_sel_get_clust_rec_for_mysql · 1f4ee3fa
    Marko Mäkelä authored
    The crash scenario is as follows:
    
    (1) A non-empty table exists.
    (2) MDEV-15562 instant ADD/DROP/reorder has been invoked.
    (3) Some purgeable undo log exists for the table.
    (4) The table becomes empty, containing not even any delete-marked records,
    only containing the hidden metadata record that was added in (2).
    (5) An instant ADD/DROP/reorder column is executed, and the table
    is emptied and the (2) metadata removed.
    (6) Purge processes an undo log record from (3), which will refer to
    a non-existent clustered index field, because the metadata that
    was created in (2) was remoeved in (5).
    
    We fix this by adjusting step (5) so that we will never remove the
    MDEV-15562-style metadata record. Removing the MDEV-11369 metadata
    record (instant ADD COLUMN to the end of the table) is completely
    fine at any time when the table becomes empty, because
    dict_index_t::n_fields will remain unchanged.
    
    innobase_instant_try(): Never remove the MDEV-15562 metadata record.
    
    page_cur_delete_rec(): Do not reset FIL_PAGE_TYPE when the
    MDEV-15562 metadata record is being removed as part of
    btr_cur_pessimistic_update() invoked by innobase_instant_try().
    1f4ee3fa
instant_alter_bugs.test 13 KB