• Marko Mäkelä's avatar
    MDEV-25236 Online log apply fails for ROW_FORMAT=REDUNDANT tables · a635588b
    Marko Mäkelä authored
    In other ROW_FORMAT than REDUNDANT, the InnoDB record header
    size calculation depends on dict_index_t::n_core_null_bytes.
    
    In ROW_FORMAT=REDUNDANT, the record header always is 6 bytes
    plus n_fields or 2*n_fields bytes, depending on the maximum
    record size. But, during online ALTER TABLE, the log records
    in the temporary file always use a format similar to
    ROW_FORMAT=DYNAMIC, even omitting the 5-byte fixed-length part
    of the header.
    
    While creating a temporary file record for a ROW_FORMAT=REDUNDANT
    table, InnoDB must refer to dict_index_t::n_nullable.
    The field dict_index_t::n_core_null_bytes is only valid for
    other than ROW_FORMAT=REDUNDANT tables.
    
    The bug does not affect MariaDB 10.3, because only
    commit 7a27db77 (MDEV-15563)
    allowed an ALGORITHM=INSTANT change of a NOT NULL column to
    NULL in a ROW_FORMAT=REDUNDANT table.
    
    The fix was developed by Thirunarayanan Balathandayuthapani
    and tested by Matthias Leich. The test case was simplified by me.
    a635588b
instant_alter_debug.test 13.3 KB