• Alfranio Correia's avatar
    BUG#55675 rpl.rpl_log_pos fails sporadically with error binlog truncated in the middle · 5a0af479
    Alfranio Correia authored
    There are two calls to read_log_event() on master in mysql_binlog_send().
    Each call reads 19 bytes in this test case and the error of the second
    read_log_event() is reported to the slave.
    
    The second read_log_event() starts from position 94 (75 + 19) to 113
    (75 + 19 + 19). Usually, there are two events in the binary log:
    
        . 0   - 3   - Header
        . 4   - 105 - Format Descriptor Event
        . 106 - 304 - Query Event
    
    and both reads fail because operations are reading from invalid positions
    as expected.
    
    However, mysql_binlog_send() does not use the same IO_CACHE that is used to
    write into binary log (i.e. mysql_bin_log.log_file) for the hot binary log.
    It opens the binary log file directly by calling open_binlog() and creates a
    separated IO_CACHE. So there is a possibly that after a master has flushed
    the binary log file, the content has been cached by the filesystem, and has
    not updated the disk file. If this happens, then a slave will only see part
    of the file, and thus the second read_log_event() will report event truncated
    error.
    
    To fix the problem, if the first read_log_event() has failed, we ensure that
    the second one will try to read from the same position.
    5a0af479
disabled.def 827 Bytes