GOAL ---- This worklog aims at making the MTR binlog suite GTID_MODE agnostic, so that we can have run it daily on pushbuild with --gtid-mode=ON. INTRODUCTION ------------ To keep coverage figures acceptable for the GTIDs feature, we want to start running the binlog suite with the following switches: --gtid-mode=on --enforce-gtid-consistency --log-slave-updates But due to the fact that MTR is result file oriented, we end up in a bad situation to make this happen (mostly because commands like SHOW BINLOG EVENTS or the output of mysqlbinlog prints out more information when GTIDs are turned on. This breaks many tests due to result file difference. There are more problems, but these are the most recurring ones. The goal of this worklog is to fix this.
PROBLEM STATEMENT ----------------- We want to run the binlog suite periodically with --gtid-mode=on. However, one cannot just turn on the necessary mysqld switches and expect the test cases to pass. There are several problems/failures due to: P1. result file differences due to extra output on SHOW BINLOG EVENTS P2. result file differences due to extra output on mysqlbinlog ... P3. tests that mix transactional and non transactional engines in the same statement/transaction P4. the fact that tests assume that relpaying the same binary log on the same server will reexecute the transactions - not true when gtid-mode=on -- transactions that were seen before are skipped. P5. BUGS P6. tests that only test mysqlbinlog and not even turn on the binary log. SOLUTIONS --------- - Fixing P1 and P2 To fix P1 and P2, Sven has created a filter in MTR + Perl that can filter out the GTID additional events from the result files in some cases. In particular, those that resort to --source include/show_binlog_events.inc However, this is not enough. When not enough, we create two wrappers for the test case. One works on traditional positioning and the other on gtid positioning. The former keeps the test name, the latter gets the additional name component: _gtid_ . For example: - binlog_innodb becomes binlog_gtid_innodb. These should wrap the original test case that is moved into (keeping the original name, with the extension renamed from .test to .inc). Again, for the binlog_innodb example: mysql-test/extra/binlog_tests/binlog_innodb.inc - Fixing P3 These tests are not supported. Thence they shall be added to the skip-test-list regarding gtid-mode=on. No point on testing these. - Fixing P4 These tests are changed so that they logic becomes independent of the replay behavior. - Fixing P5 binlog.binlog_tmp_table binlog.binlog_sql_mode These tests are disabled for now on this run only, until the bugs are fixed. - Fixing P6 There is no point in testing these tests using --gtid-mode=on. They are moved to the skip-test-list.