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.