• Andrei's avatar
    MDEV-28461 semisync-slave server recovery fails to rollback prepared transaction · 98ca71ab
    Andrei authored
    that is not in binlog.
    
    Post-crash recovery of --rpl-semi-sync-slave-enabled server
    failed to recognize a transaction in-doubt that needed rolled back.
    A prepared-but-not-in-binlog transaction gets committed instead
    to possibly create inconsistency with a master (e.g the way it was observed
    in the bug report).
    
    The semisync recovery is corrected now with initializing binlog coordinates
    of any transaction in-doubt to the maximum offset which is
    unreachable.
    In effect when a prepared transaction that is not found in binlog
    it will be decided to rollback because it's guaranteed to reside
    in a truncated tail area of binlog.
    
    Mtr tests are reinforced to cover the described scenario.
    98ca71ab
handler.h 195 KB