• Brandon Nesterenko's avatar
    MDEV-28530: Revoking privileges from a non-existing user on a master breaks... · 47812017
    Brandon Nesterenko authored
    MDEV-28530: Revoking privileges from a non-existing user on a master breaks replication on the slave in the presence of replication filters
    
    Problem:
    ========
    Replication can break while applying a query log event if its
    respective command errors on the primary, but is ignored by the
    replication filter within Grant_tables on the replica. The bug
    reported by MDEV-28530 shows this with REVOKE ALL PRIVILEGES using a
    non-existent user. The primary will binlog the REVOKE command with
    an error code, and the replica will think the command executed with
    success because the replication filter will ignore the command while
    accessing the Grant_tables classes. When the replica performs an
    error check, it sees the difference between the error codes, and
    replication breaks.
    
    Solution:
    ========
    If the replication filter check done by Grant_tables logic ignores
    the tables, reset thd->slave_expected_error to 0 so that
    Query_log_event::do_apply_event() can be made aware that the
    underlying query was ignored when it compares errors.
    
    Note that this bug also effects DROP USER if not all users exist
    in the provided list, and the patch fixes and tests this case.
    
    Reviewed By:
    ============
    andrei.elkin@mariadb.com
    47812017
sql_class.h 218 KB