• Andrei Elkin's avatar
    MDEV-15373 engine gtid_slave_pos table name disobeys lower-case-table-names · 9df656db
    Andrei Elkin authored
    Replicated transaction extra gtid statement on slave failed to specify
    an engine gtid_slave_pos name correctly. In case  lower-case-table-names > 0
    the InnoDB table name was generated to reproduce the lower-case-table-names=0 version
    which is of mixed cases.
    In rpl.rpl_mdev12179 test run this triggered a failure to DROP table which
    was due to the innodb table handle was not closed:
     InnoDB: Waited XYZ seconds for ref-count on table: `mysql`.`gtid_slave_pos_innodb`
    on windows.
    The closing issue was caused by having the table registered twice in the table cache,
    for its lower- and mixed- case name versions. The DROP-table handler closed only
    only one of the cache item to leave the 2nd one active.
    (On Linux a failure occurs earlier at attempt to open an expected lower-cased table:
    
      Last_Error: Error during XID COMMIT: failed to update GTID state in mysql.gtid_slave_pos: 1146: Table 'mysql.gtid_slave_pos_InnoDB' doesn't exist
    
    but the table's name as the message shows is not in the right case).
    
    Fixed with consulting lower-case-table-names when the engine gtid-slave-pos table
    is created.
    Note the lower-case-table-names=a-value created table will not recognized when next
    the lower case option changes to a different value.
    In 10.4 a follow-up patch is going to lowercase gtid-slave-pos autocreated table
    at once at their origination, and a warning is issued in the 10.3 current patch.
    9df656db
rpl_rli.cc 81.1 KB