• Nikita Malyavin's avatar
    MDEV-32126 Assertion fails upon online ALTER and binary log enabled · 830bdfcc
    Nikita Malyavin authored
    Assertion `!writer.checksum_len || writer.remains == 0' fails upon
    concurrent online ALTER and transactions with failing statements and binary
    log enabled.
    Also another assertion, `pos != (~(my_off_t) 0)', fails in my_seek, upon
    reinit_io_cache, on a simplified test. This means that IO_CACHE wasn't
    properly initialized, or had an error before.
    
    The overall problem is a deep interference with the effect of an installed
    binlog_hton: the assumption about that thd->binlog_get_cache_mngr() is,
    sufficiently, NULL, when we shouldn't run the binlog part of
    binlog_commit/binlog_rollback, is wrong: as turns out, sometimes the binlog
    handlerton can be not installed in current thd, but binlog_commit can be
    called on behalf of binlog, as in the bug reported.
    
    One separate condition found is XA recovery of the orphaned transaction,
    when binlog_commit is also called, but it has nothing to do with
    online alter.
    
    Solution:
    Extract online alter operations into a separate handlerton.
    830bdfcc
alter_table_online_debug.test 42.9 KB