• Andrei Elkin's avatar
    MDEV-24526 binlog rotate via FLUSH LOGS may obsolate binlog file for recovery too eary · 2a7dd644
    Andrei Elkin authored
    There was race between a committing transaction and the following in binlog
    order FLUSH LOGS that could create a 2nd Binlog checkpoint (BCP) event
    in the new file *before* the first logged-in-old-binlog transaction gets committed in
    Innodb. That would cause the transaction loss at recovery, should
    the server stop right after the BCP.
    
    The race is tackled by enforcing the necessary set of mutexes to be acquired
    by FLUSH-LOGS handler in the correct order (of the group commit leader
    pattern).
    
    Note, there remain two cases where a similar race is still possible:
      - the above race as it is when the server is run with ("unlikely")
        non-default `--binlog-optimize-thread-scheduling=0` (MDEV-24530), and
      - at unlikely event of bin-logging of Incident event (MDEV-24531) that
        also triggers binlog rotation,
        in both cases though with lesser chances after the current fixes.
    2a7dd644
binlog_checkpoint_flush_logs.test 2.4 KB