mariadb/mysql-test/extra/rpl_tests
Alfranio Correia 4009bf1a15 BUG#46364 MyISAM transbuffer problems (NTM problem)
It is well-known that due to concurrency issues, a slave can become
inconsistent when a transaction contains updates to both transaction and
non-transactional tables.
                    
In a nutshell, the current code-base tries to preserve causality among the
statements by writing non-transactional statements to the txn-cache which
is flushed upon commit. However, modifications done to non-transactional
tables on behalf of a transaction become immediately visible to other
connections but may not immediately get into the binary log and therefore
consistency may be broken.
            
In general, it is impossible to automatically detect causality/dependency
among statements by just analyzing the statements sent to the server. This
happen because dependency may be hidden in the application code and it is
necessary to know a priori all the statements processed in the context of
a transaction such as in a procedure. Moreover, even for the few cases that
we could automatically address in the server, the computation effort
required could make the approach infeasible.
            
So, in this patch we introduce the option
      - "--binlog-direct-non-transactional-updates" that can be used to bypass
      the current behavior in order to write directly to binary log statements
      that change non-transactional tables.

Besides, it is used to enable the WL#2687 which is disabled by default.

mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test:
  Changes the result set as the STMT mode behaves as both the ROW and MIXED modes and as such uses the non-trx-cache and takes longer to fill the trx-cache up and trigger an error.
mysql-test/extra/rpl_tests/rpl_implicit_commit_binlog.test:
  Changes the result set as the STMT mode behaves as both the ROW and MIXED modes and as such uses the non-trx-cache. It also fixes comments.
mysql-test/extra/rpl_tests/rpl_mixing_engines.test:
  The STMT mode is unsafe when mixed-statements are executed thus making slaves to go out of sync. For that reason, it checks consistency if not in STMT mode.
mysql-test/include/default_mysqld.cnf:
  Makes binlog-direct-non-transactional-updates "TRUE" by default in the test
  cases.
mysql-test/r/mysqld--help-notwin.result:
  Updates the result file with the new option.
mysql-test/r/mysqld--help-win.result:
  Updates the result file with the new option.
mysql-test/suite/binlog/r/binlog_multi_engine.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/binlog/r/binlog_switch_inside_trans.result:
  Verifies if the user cannot change the opion binlog_direct_non_transactional_updates
  within a transaction or a procedure/function/trigger.
mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam-master.opt:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing
  the test case and its result file.
mysql-test/suite/binlog/t/binlog_switch_inside_trans.test:
  Verifies if the user cannot change the opion binlog_direct_non_transactional_updates
  within a transaction or a procedure/function/trigger.
mysql-test/suite/ndb/r/ndb_binlog_format.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_begin_commit_rollback.result:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/r/rpl_concurrency_error.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction
mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result:
  Changes the result set as the STMT mode behaves as both the ROW and MIXED modes and as such uses the non-trx-cache and takes longer to fill the trx-cache up and trigger an error.
mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_stm_start_stop_slave.result:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/t/rpl_stm_stop_middle_group.test:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
sql/log.cc:
  Verifies if changes should be written to either the trx-cache or non-trx-cache through the use of the function use_trans_cache(). It also organizes the code.
sql/log.h:
  Changes the signature of some functions by adding the modifier "const" to the thd parameter. Specifically, the following functions are changed: 
          bool trans_has_updated_trans_table(const THD* thd);
          bool stmt_has_updated_trans_table(const THD *thd);
          bool use_trans_cache(const THD*, bool is_transactional);
sql/share/errmsg-utf8.txt:
  Creates error messages to report when an user tries to change the new option
  binlog_direct_non_transactional_updates within a transaction or a procedure/
  function/trigger.
sql/share/errmsg.txt:
  Creates error messages to report when an user tries to change the new option
  binlog_direct_non_transactional_updates within a transaction or a procedure/
  function/trigger.
sql/sql_class.h:
  Adds the new option binlog_direct_non_transactional_updates.
sql/sys_vars.cc:
  Adds the new option binlog_direct_non_transactional_updates.
support-files/my-small.cnf.sh:
  Adds binlog-direct-non-transactional-updates to the example file. By default
  the option is disabled.
2010-01-21 13:10:34 +00:00
..
check_type.inc WL#5151: Conversion between different types when replicating 2009-12-14 12:04:55 +01:00
create_recursive_construct.inc Post-push fixes after wrong merge from 5.1->rep+2->rep+3. 2009-12-14 15:33:03 +01:00
rpl_auto_increment.test BUG#45999 Row based replication fails when auto_increment field = 0 2009-09-10 18:05:53 +08:00
rpl_auto_increment_insert_view.test Bug #45677 Slave stops with Duplicate entry for key PRIMARY when using trigger 2009-10-01 07:19:36 +08:00
rpl_auto_increment_invoke_trigger.test Bug #45677 Slave stops with Duplicate entry for key PRIMARY when using trigger 2009-10-01 07:19:36 +08:00
rpl_autoinc_func_invokes_trigger.test Bug #45677 Slave stops with Duplicate entry for key PRIMARY when using trigger 2009-10-01 07:19:36 +08:00
rpl_binlog_max_cache_size.test BUG#46364 MyISAM transbuffer problems (NTM problem) 2010-01-21 13:10:34 +00:00
rpl_blackhole.test Bug #38360: BLACKHOLE replication with RBR is broken 2008-10-02 21:13:15 +02:00
rpl_charset.test WL#4738 streamline/simplify @@variable creation process 2009-12-22 10:35:56 +01:00
rpl_commit_after_flush.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_conflicts.test BUG#37718: rpl.rpl_stm_mystery22 fails sporadically on pushbuild 2009-01-09 15:12:31 +01:00
rpl_ddl.test Upmerge 5.0 -> 5.1 of fix for 2008-08-25 15:09:51 +02:00
rpl_deadlock.test Bug#37716. 2009-04-04 01:33:13 +04:00
rpl_delete_no_where.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_EE_err.test Merging 5.1 main into 5.1-rpl 2008-10-23 21:27:09 +02:00
rpl_extraMaster_Col.test Bug #39265: fix for the bug 33699 should be reverted 2009-02-05 13:49:32 +04:00
rpl_extraSlave_Col.test merge mysql-5.1-rep+2-delivery1 --> mysql-5.1-rpl-merge 2010-01-07 15:39:11 +00:00
rpl_failed_optimize.test BUG#44661: rpl_ndb.rpl_ndb_circular_simplex fails because of 2009-09-27 23:03:05 +01:00
rpl_flsh_tbls.test WL#2687 WL#5072 BUG#40278 BUG#47175 2009-11-03 19:02:56 +00:00
rpl_foreign_key.test BUG#39934: Slave stops for engine that only support row-based logging 2009-07-14 21:31:19 +02:00
rpl_get_master_version_and_clock.test Bug #46931 rpl.rpl_get_master_version_and_clock fails on hpux11.31 2009-09-27 17:00:29 +08:00
rpl_implicit_commit_binlog.test BUG#46364 MyISAM transbuffer problems (NTM problem) 2010-01-21 13:10:34 +00:00
rpl_innodb.test WL#2687 WL#5072 BUG#40278 BUG#47175 2009-11-03 19:02:56 +00:00
rpl_insert_delayed.test WL#2687 WL#5072 BUG#40278 BUG#47175 2009-11-03 19:02:56 +00:00
rpl_insert_id.test merge mysql-5.1-rep+2-delivery1 --> mysql-5.1-rpl-merge 2010-01-07 15:39:11 +00:00
rpl_insert_id_pk.test Bug #28842 Different 'duplicate key' error code between 5.0 and 5.1 2007-06-06 10:57:07 -07:00
rpl_insert_ignore.test WL#2687 WL#5072 BUG#40278 BUG#47175 2009-11-03 19:02:56 +00:00
rpl_loaddata.test merge mysql-5.1-rep+2-delivery1 --> mysql-5.1-rpl-merge 2010-01-07 15:39:11 +00:00
rpl_loadfile.test BUG#39701: Mixed binlog format does not switch to row mode on 2009-03-24 18:27:33 +00:00
rpl_log.test WL#2687 WL#5072 BUG#40278 BUG#47175 2009-11-03 19:02:56 +00:00
rpl_max_relay_size.test Fix for versional test 2008-01-14 15:38:02 +08:00
rpl_mixing_engines.inc Post-fix for WL#2687 WL#5072 BUG#40278 BUG#47175 2009-11-13 00:17:10 +00:00
rpl_mixing_engines.test BUG#46364 MyISAM transbuffer problems (NTM problem) 2010-01-21 13:10:34 +00:00
rpl_multi_query.test Merge romeo.(none):/home/bkroot/mysql-5.1-new-rpl 2007-03-29 21:38:03 +02:00
rpl_multi_update.test WL#1012: All changes as one single changeset. 2005-12-22 06:39:02 +01:00
rpl_multi_update2.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_multi_update3.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_ndb_2multi_basic.test BUG#21842 (Cluster fails to replicate to innodb or myisam with err 134 2007-08-26 14:31:10 +02:00
rpl_ndb_2multi_eng.test Problem: pushbuild has sporadic errors during startup of 2008-02-11 15:14:24 +01:00
rpl_ndb_apply_status.test BUG#39934: Slave stops for engine that only support row-based logging 2009-07-14 21:31:19 +02:00
rpl_not_null.test BUG#48091 valgrind errors when slave has double not null and master has double null 2009-10-22 01:19:52 +01:00
rpl_partition.test Bug#18436 (RBR: Replication to partition engine triggers assertion on slave): 2006-03-27 14:58:37 +02:00
rpl_relayrotate.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_reset_slave.test BUG#48048: Deprecated constructs need removal in Betony 2009-11-04 12:28:20 +00:00
rpl_row_001.test Use absolute path to allow tets to be run also when datadir differs 2007-12-19 09:42:31 +01:00
rpl_row_basic.test WL#5151: Conversion between different types when replicating 2009-12-14 12:04:55 +01:00
rpl_row_blob.test Backport for WL#4416 2009-11-27 02:32:01 +03:00
rpl_row_delayed_ins.test BUG#29020 (Event results not correctly replicated to slave in RBR): 2008-03-28 13:16:41 +01:00
rpl_row_func003.test WL#3894, post-push fix. 2009-11-28 17:53:48 +03:00
rpl_row_sp002.test Bug #32307 mysqltest - does not detect illegal if syntax 2008-08-04 12:38:50 +02:00
rpl_row_sp003.test Backport for WL#4416 2009-11-27 02:32:01 +03:00
rpl_row_sp006.test Backport fixes for the follow tests 2009-10-02 17:24:21 +08:00
rpl_row_sp007.test WL#1012: All changes as one single changeset. 2005-12-22 06:39:02 +01:00
rpl_row_tabledefs.test BUG#48091 valgrind errors when slave has double not null and master has double null 2009-10-22 01:10:42 +01:00
rpl_row_UUID.test BUG#28722 (Multi-engine statements on has_own_binlogging engine): 2007-06-22 01:39:23 +02:00
rpl_show_relaylog_events.inc WL#2687 WL#5072 BUG#40278 BUG#47175 2009-11-03 19:02:56 +00:00
rpl_start_stop_slave.test mergin 5.1 -> rep+2 -> rep+3. create_table_from_dump issue will be merged on the next step 2009-11-30 20:20:26 +02:00
rpl_stm_000001.test merge mysql-5.1-rep+3 --> mysql-5.1-rep+2-delivery1 2009-12-17 21:43:35 +00:00
rpl_stm_EE_err2.test BUG#38350: Many tests don't clean up after themselves on exit. 2008-11-13 20:19:00 +01:00
rpl_stop_middle_group.test WL#2687 WL#5072 BUG#40278 BUG#47175 2009-11-03 19:02:56 +00:00
rpl_sv_relay_space.test Bug#16993 (ALTER TABLE ZEROFILL AUTO_INCREMENT not replicated correctly): 2006-04-19 15:29:49 +02:00
rpl_trig004.test Backport for WL#4416 2009-11-27 02:32:01 +03:00
rpl_truncate.test Bug #36763 2009-02-06 17:06:41 +01:00
rpl_truncate_helper.test Bug #36763 2009-02-06 17:06:41 +01:00
type_conversions.test BUG#49836: Replication of geometric fields is broken after WL#5151 2009-12-24 01:07:35 +00:00