• Marko Mäkelä's avatar
    MDEV-16855 Fix fts_sync_synchronization in InnoDB · e52315a4
    Marko Mäkelä authored
    This is a backport of the following fix from MySQL 5.7.23.
    Some code refactoring has been omitted, and the test case has
    been adapted to MariaDB.
    
    commit 7a689acaa65e9d602575f7aa53fe36a64a07460f
    Author: Krzysztof Kapuścik <krzysztof.kapuscik@oracle.com>
    Date:   Tue Mar 13 12:34:03 2018 +0100
    
    Bug#27082268 Invalid FTS sync synchronization
    
    The fix closes two issues:
    Bug #27082268 - INNODB: FAILING ASSERTION: SYM_NODE->TABLE != NULL DURING FTS SYNC
    Bug #27095935 - DEADLOCK BETWEEN FTS_DROP_INDEX AND FTS_OPTIMIZE_SYNC_TABLE
    
    Both issues were related to a FTS cache sync being done during
    operations that perfomed DDL actions on internal FTS tables
    (ALTER TABLE, TRUNCATE). In some cases the FTS tables and/or
    internal cache structures could get removed while still being
    used to perform FTS synchronization leading to crashes. In other
    the sync operations could not get finishes as it was waiting for
    dict lock which was taken by thread waiting for the background
    sync to be finished.
    
    The changes done includes:
    - Stopping background operations during ALTER TABLE and TRUNCATE.
    - Removal of unused code in FTS.
    - Cleanup of FTS sync related code to make it more readable and
    easier to maintain.
    
    RB#18262
    e52315a4
handler0alter.cc 175 KB