WL#6663: Make the MTR binlog suite GTID_MODE agnostic
Affects: Server-5.6
—
Status: Complete
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.
Copyright (c) 2000, 2025, Oracle Corporation and/or its affiliates. All rights reserved.