• Andrei Elkin's avatar
    Added checking that row events ends with a proper end block · 3dc3ab1a
    Andrei Elkin authored
    Problems --------
    
    The slave io thread did not conduct integrity check
    for a group of row-based events. Specifically it tolerates missed
    terminal block event that must be flagged with STMT_END. Failure to
    react on its loss can confuse the applier thread in various ways.
    Another potential issue was that there were no check of impossible
    second in row Gtid-log-event while the slave io thread is receiving
    to be skipped events after reconnect.
    
    Fixes
    -----
    The slave io thread is made by this patch to track the rows event
    STMT_END status.
    Whenever at next event reading the IO thread finds out that a preceding
    Rows event did not actually had the flag, an
    explicit error is issued.
    
    Replication can be resumed after the source of failure is eliminated,
    see a provided test.
    
    Note that currently the row-based group integrity check excludes
    the compressed version 2 Rows events (which are not generated by MariaDB
    master).
    Its uncompressed counterpart is manually tested.
    
    The 2nd issue is covered to produce an error in case the io thread
    receives a successive Gtid_log_event while it is post-reconnect
    skipping.
    3dc3ab1a
slave.cc 265 KB