Skip to content
  • s.sujatha's avatar
    5fd16200
    Bug#19928622: ASSERTION `! IS_SET()' FAILED. | ABORT IN · 5fd16200
    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.
    5fd16200
    Bug#19928622: ASSERTION `! IS_SET()' FAILED. | ABORT IN
    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.
Loading