• Brandon Nesterenko's avatar
    MDEV-21087/MDEV-21433: ER_SLAVE_INCIDENT arrives at slave without failure specifics · 555c12a5
    Brandon Nesterenko authored
    Problem:
    =======
    
    This patch addresses two issues:
    
     1. An incident event can be incorrectly reported for transactions
    which are rolled back successfully. That is, an incident event
    should only be generated for failed “non-transactional transactions”
    (i.e., those which modify non-transactional tables) because they
    cannot be rolled back.
    
     2. When the mariadb slave (error) stops at receiving the incident
    event there's no description of what led to it. Neither in the event
    nor in the master's error log.
    
    Solution:
    ========
    
    Before reporting an incident event for a transaction, first validate
    that it is “non-transactional” (i.e. cannot be safely rolled back).
    To determine if a transaction is non-transactional,
      lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE)
    is used because it is set previously in
    THD::decide_logging_format().
    
    Additionally, when an incident event is written, write an error
    message to the server’s error log to indicate the underlying issue.
    
    Reviewed by:
    ===========
    Andrei Elkin <andrei.elkin@mariadb.com>
    555c12a5
binlog_write_error.inc 2.61 KB