• mats@romeo.(none)'s avatar
    BUG#25688 (RBR: circular replication may cause STMT_END_F flags to be · 11fc24ef
    mats@romeo.(none) authored
    skipped):
    
    By moving statement end actions from Rows_log_event::do_apply_event() to
    Rows_log_event::do_update_pos() they will always be executed, even if
    Rows_log_event::do_apply_event() is skipped because the event originated
    at the same server. This because Rows_log_event::do_update_pos() is always
    executed (unless Rows_log_event::do_apply_event() failed with an error,
    in which case the slave stops with an error anyway). 
    
    Adding test case.
    
    Fixing logic to detect if inside a group. If a rotate event occured
    when an initial prefix of events for a statement, but for which the
    table did contain a key, last_event_start_time is set to zero, causing
    rotate to end the group but without unlocking any tables. This left a
    lock hanging around, which subsequently triggered an assertion when a
    second attempt was made to lock the same sequence of tables.
    
    In order to solve the above problem, a new flag was added to the relay
    log info structure that is used to indicate that the replication thread
    is currently executing a statement. Using this flag, the replication
    thread is in a group if it is either in a statement or inside a trans-
    action.
    
    The patch also eliminates some gratuitous header file inclusions that
    were not needed (and caused compile errors) and replaced them with
    forward definitions.
    11fc24ef
log_event.h 81.6 KB