• unknown's avatar
    BUG#25688 (RBR: circular replication may cause STMT_END_F flags to be · 6ed9fc6b
    unknown 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.
    
    
    sql/item_func.cc:
      Including definition of MASTER_INFO.
    sql/log.cc:
      Including definition of RELAY_LOG_INFO since it is used in the file.
    sql/log_event.cc:
      Moving statement end actions from Rows_log_event::do_apply_event() to
      Rows_log_event::do_update_pos().
      Factoring out code to update group positions and event positions into
      relay log info structure.
      ---
      Adding debugging printouts.
      Fixing logic to detect if inside a group.
    sql/log_event.h:
      Adding Rows_log_event::do_update_pos().
    sql/mysqld.cc:
      Including definition of MASTER_INFO.
    sql/repl_failsafe.cc:
      Including definition of MASTER_INFO.
    sql/rpl_mi.h:
      Including definition of RELAY_LOG_INFO since it is used in the file.
    sql/rpl_rli.cc:
      Adding member function stmt_done() to do after-statement updates of the
      relay log info structure.
    sql/rpl_rli.h:
      Adding member function stmt_done() to do after-statement updates of the
      relay log info structure.
    sql/set_var.cc:
      Including definition of MASTER_INFO.
    sql/slave.cc:
      Adding debuging printouts.
    sql/slave.h:
      Removing inclusion definitions of MASTER_INFO and RELAY_LOG_INFO and
      replacing them with forward declarations since the classes are not
      used in the file. The gratuitous inclusion lead to compile errors in
      the two classes above in files that used neither.
    sql/sql_binlog.cc:
      Including definition of RELAY_LOG_INFO since it is used in the file.
    sql/sql_class.cc:
      Including definition of RELAY_LOG_INFO since it is used in the file.
    sql/sql_class.h:
      Removing inclusion definitions of RELAY_LOG_INFO and replacing it
      with forward declaration since the class is not used in the file.
      The gratuitous inclusion lead to compile errors in the class above
      in files didn't use the class.
    sql/sql_insert.cc:
      Including definition of MASTER_INFO.
    sql/sql_repl.cc:
      Including definition of MASTER_INFO.
    mysql-test/r/rpl_ndb_circular_simplex.result:
      New BitKeeper file ``mysql-test/r/rpl_ndb_circular_simplex.result''
    mysql-test/t/rpl_ndb_circular_simplex.test:
      New BitKeeper file ``mysql-test/t/rpl_ndb_circular_simplex.test''
    6ed9fc6b
sql_repl.cc 46.8 KB