• Marko Mäkelä's avatar
    MDEV-15562: Remove dict_table_t::rollback_instant(unsigned n) · f545e3cf
    Marko Mäkelä authored
    On the rollback of changes to SYS_COLUMNS, MDEV-15562 will
    break the assumption that the only instantaneous changes to columns
    are the addition to the end of the column list.
    
    The function dict_table_t::rollback_instant(unsigned n)
    is inherently incompatible with instantly dropping or reordering
    columns.
    
    When a change to SYS_COLUMNS is rolled back, we must simply evict
    the affected table definition, at the end of the rollback. We cannot
    free the table object immediately, because the current transaction
    that is being rolled back may be holding a lock on the table and
    its metadata record.
    
    dict_table_remove_from_cache_low(): Replaced
    by dict_table_remove_from_cache().
    
    dict_table_remove_from_cache(): Add a third parameter keep=false,
    so that the table can be freed by the caller.
    
    trx_lock_t::evicted_tables: List of tables on which trx_t::evict_table()
    was invoked.
    
    trx_t::evict_table(): Evict a table definition during rollback.
    
    trx_commit_in_memory(): Empty the trx->lock.evicted_tables list
    after the locks were released, by freeing the table objects.
    
    row_undo_ins_remove_clust_rec(), row_undo_mod_clust_low():
    Invoke trx_t::evict_table() on the affected table if a change to
    SYS_COLUMNS is being rolled back.
    f545e3cf
dict0mem.cc 38.9 KB