• unknown's avatar
    BUG#28618 (Skipping into the middle of a group with SQL_SLAVE_SKIP_COUNTER · 74ef292d
    unknown authored
    is possible):
    
    When skipping the beginning of a transaction starting with BEGIN, the OPTION_BEGIN
    flag was not set correctly, which caused the slave to not recognize that it was
    inside a group. This patch sets the OPTION_BEGIN flag for BEGIN, COMMIT, ROLLBACK,
    and XID events. It also adds checks if inside a group before decreasing the
    slave skip counter to zero.
    
    Begin_query_log_event was not marked that it could not end a group, which is now
    corrected.
    
    
    mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
      Correcting slave skip counter to get the correct behaviour.
    mysql-test/suite/rpl/r/rpl_slave_skip.result:
      Result change.
    mysql-test/suite/rpl/t/rpl_slave_skip.test:
      Adding tests to check that skipping works for transactions:
      - Skipping one group with BEGIN first
      - Skipping two groups with BEGIN first
      - Skipping one group without BEGIN first but with AUTOCOMMIT=0
      - LOAD DATA INFILE under statement-based replication
    mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result:
      Result change.
    sql/log_event.cc:
      Adding checks if we're in a group when the slave skip counter is 1.
      In that case, we should keep going.
      
      Adding helping member function Log_event::continue_group() denoting
      that this event cannot end a group, and if the skip counter indicates
      that the group ends after this event, it should not decrease the skip
      counter.
      
      Query_log_event will change the OPTION_BEGIN flag for BEGIN, COMMIT, and
      ROLLBACK, even when skipping because of a positive skip count, and
      Xid_log_event will also affect the OPTION_BEGIN flag, even when being
      skipped.
      
      Begin_load_query_log_event cannot end a group, so it is marked to
      continue the group.
    sql/log_event.h:
      Adding helper function Log_event::continue_group().
    sql/rpl_rli.h:
      Adding Relay_log_info::get_flag() to get the value of a
      replication flag.
    sql/slave.cc:
      Adding debug output and changing debug message.
    mysql-test/suite/rpl/data/rpl_bug28618.dat:
      New BitKeeper file ``mysql-test/suite/rpl/data/rpl_bug28618.dat''
    mysql-test/suite/rpl/t/rpl_slave_skip-slave.opt:
      New BitKeeper file ``mysql-test/suite/rpl/t/rpl_slave_skip-slave.opt''
    74ef292d
rpl_slave_skip.result 7.9 KB