• Brandon Nesterenko's avatar
    MDEV-25284: Assertion `info->type == READ_CACHE || info->type == WRITE_CACHE' failed · 2291f8ef
    Brandon Nesterenko authored
    Problem:
    ========
    This patch addresses two issues.
    
    First, if a CHANGE MASTER command is issued and an error happens
    while locating the replica’s relay logs, the logs can be put into an
    invalid state where future updates fail and future CHANGE MASTER
    calls crash the server. More specifically, right before a replica
    purges the relay logs (part of the `CHANGE MASTER TO` logic), the
    relay log is temporarily closed with state LOG_TO_BE_OPENED. If the
    server errors in-between the temporary log closure and purge, i.e.
    during the function find_log_pos, the log should be closed.
    MDEV-25284 reveals the log is not properly closed.
    
    Second, upon issuing a RESET SLAVE ALL command, a slave’s GTID
    filters are not cleared (DO_DOMAIN_IDS, IGNORE_DOMIAN_IDS,
    IGNORE_SERVER_IDS). MySQL had a similar bug report, Bug #18816897,
    which fixed this issue to clear IGNORE_SERVER_IDS after issuing
    RESET SLAVE ALL in version 5.7.
    
    Solution:
    =========
    
    To fix the first problem, the CHANGE MASTER error handling logic was
    extended to transition the relay log state to LOG_CLOSED from
    LOG_TO_BE_OPENED.
    
    To fix the second problem, the RESET SLAVE ALL logic is extended to
    clear the domain_id filter and ignore_server_ids.
    
    Reviewed By:
    ============
    Andrei Elkin <andrei.elkin@mariadb.com>
    2291f8ef
sql_repl.cc 143 KB