• Marko Mäkelä's avatar
    MDEV-17794 Do not assign persistent ID for temporary tables · 4be0855c
    Marko Mäkelä authored
    InnoDB in MySQL 5.7 introduced two new parameters to the function
    dict_hdr_get_new_id(), to allow redo logging to be disabled when
    assigning identifiers to temporary tables or during the
    backup-unfriendly TRUNCATE TABLE that was replaced in MariaDB
    by MDEV-13564.
    
    Now that MariaDB 10.4.0 removed the crash recovery code for the
    backup-unfriendly TRUNCATE, we can revert dict_hdr_get_new_id()
    to be used only for persistent data structures.
    
    dict_table_assign_new_id(): Remove. This was a simple 2-line function
    that was called from few places.
    
    dict_table_open_on_id_low(): Declare in the only file where it
    is called.
    
    dict_sys_t::temp_id_hash: A separate lookup table for temporary tables.
    Table names will be in the common dict_sys_t::table_hash.
    
    dict_sys_t::get_temporary_table_id(): Assign a temporary table ID.
    
    dict_sys_t::get_table(): Look up a persistent table.
    
    dict_sys_t::get_temporary_table(): Look up a temporary table.
    
    dict_sys_t::temp_table_id: The sequence of temporary table identifiers.
    Starts from DICT_HDR_FIRST_ID, so that we can continue to simply compare
    dict_table_t::id to a few constants for the persistent hard-coded
    data dictionary tables.
    
    undo_node_t::state: Distinguish temporary and persistent tables.
    
    lock_check_dict_lock(), lock_get_table_id(): Assert that there cannot
    be locks on temporary tables.
    
    row_rec_to_index_entry_impl(): Assert that there cannot be metadata
    records on temporary tables.
    
    row_undo_ins_parse_undo_rec(): Distinguish temporary and persistent tables.
    Move some assertions from the only caller. Return whether the table was
    found.
    
    row_undo_ins(): Add some assertions.
    
    row_undo_mod_clust(), row_undo_mod(): Do not assign node->state.
    Let row_undo() do that.
    
    row_undo_mod_parse_undo_rec(): Distinguish temporary and persistent tables.
    Move some assertions from the only caller. Return whether the table was
    found.
    
    row_undo_try_truncate(): Renamed and simplified from trx_roll_try_truncate().
    
    row_undo_rec_get(): Replaces trx_roll_pop_top_rec_of_trx() and
    trx_roll_pop_top_rec(). Fetch an undo log record, and assign undo->state
    accordingly.
    
    trx_undo_truncate_end(): Acquire the rseg->mutex only for the minimum
    required duration, and release it between mini-transactions.
    4be0855c
fil0fil.cc 144 KB