• Andrei Elkin's avatar
    MDEV-19376 Repl_semi_sync_master::commit_trx assertion failure: ... ||... · 13db50fc
    Andrei Elkin authored
    MDEV-19376 Repl_semi_sync_master::commit_trx assertion failure: ... || !m_active_tranxs->is_tranx_end_pos(trx_wait_binlog_name, trx_wait_binlog_pos)
    
    The assert indicates that the current transaction got caught uncleaned from
    the semisync master's cache when it is signaled to proceed upon its
    ack receive.
    
    The reason of missed cleanup turns out to be a flaw in the gtid
    connect mode.
    A submitted by connecting slave value of its last received event's
    binlog file *name* was adopted into
    {{Repl_semi_sync_master::m_reply_file_name}} as a part of semisync
    initialization.
    
    Notice that the initialization still refines the position part of the
    submitted last received event's binlog coordinates.
    The master side binlog filename:pos refinement is
    specific to the gtid connect mode for purpose of computing the latest
    binlog file to resume slave feeding from.
    Effectively in the gtid connect mode the computed resumption filename:pos
    may appear smaller in which case a new post-connect time committing
    transaction may be logged with its filename:pos also less than the
    submitted coordinates and that triggers the assert.
    
    Fixed with making the semisync initialization to use the refined filename:pos.
    It is guaranteed to be less than any new generated transaction's binlog:pos.
    13db50fc
sql_repl.cc 139 KB