-
s.sujatha authored
DIAGNOSTICS_AREA::SET_OK_STATUS Analysis: ======== When XA transaction is active trying to execute an internal rollback will result in error ER_XAER_RMFAIL.i.e ERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state. In the bug scenario a format description BINLOG command is being executed. While applying Format_description event there a peace of code which handles a special scenario. i.e a transaction NEVER spans on 2 or more binlogs: if we have an active transaction at this point, the master died while writing the transaction to the binary log, i.e. while flushing the binlog cache to the binlog. XA guarantees that master has rolled back. So we roll back. This rollback fails as an XA transaction is active and results in error 1399 and error diagnostic area is set to DA_ERROR. Post execution of the roll back, code tries to execute my_ok(thd). This my_ok(thd) expects diagnostic are to be DA_EMPTY since this contradicts with DA_ERROR an assert is generated. Fix: === The above mentioned rollback scenario should happen only for real slave when transaction spans across multiple binlogs. Roll back should not happen if the Format_description comes through BINLOG command from client. Hence avoid the call to rollback so that the Format_description event gets applied successfully.
s.sujatha authoredDIAGNOSTICS_AREA::SET_OK_STATUS Analysis: ======== When XA transaction is active trying to execute an internal rollback will result in error ER_XAER_RMFAIL.i.e ERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state. In the bug scenario a format description BINLOG command is being executed. While applying Format_description event there a peace of code which handles a special scenario. i.e a transaction NEVER spans on 2 or more binlogs: if we have an active transaction at this point, the master died while writing the transaction to the binary log, i.e. while flushing the binlog cache to the binlog. XA guarantees that master has rolled back. So we roll back. This rollback fails as an XA transaction is active and results in error 1399 and error diagnostic area is set to DA_ERROR. Post execution of the roll back, code tries to execute my_ok(thd). This my_ok(thd) expects diagnostic are to be DA_EMPTY since this contradicts with DA_ERROR an assert is generated. Fix: === The above mentioned rollback scenario should happen only for real slave when transaction spans across multiple binlogs. Roll back should not happen if the Format_description comes through BINLOG command from client. Hence avoid the call to rollback so that the Format_description event gets applied successfully.
Loading