Skip to content
Snippets Groups Projects
  • Vladislav Shpilevoy's avatar
    b5f0dc4d
    txn: stop TXN_SIGNATURE_ABORT override · b5f0dc4d
    Vladislav Shpilevoy authored
    When txn_commit/try_async() failed before going to WAL thread,
    they installed TXN_SIGNATURE_ABORT signature meaning that the
    caller and the rollback triggers must look at the global diag.
    
    But they called txn_rollback() before doing return and calling the
    triggers, which overrode the signature with TXN_SIGNATURE_ROLLBACK
    leading to the original error loss.
    
    The patch makes TXN_SIGNATURE_ROLLBACK installed only when a real
    rollback happens (via box_txn_rollback()).
    
    This makes the original commit errors like a conflict in the
    transaction manager and OOM not lost.
    
    Besides, ERRINJ_TXN_COMMIT_ASYNC does not need its own diag_log()
    anymore. Because since this commit the applier logs the correct
    error instead of ER_WAL_IO/ER_TXN_ROLLBACK.
    
    Closes #6027
    b5f0dc4d
    History
    txn: stop TXN_SIGNATURE_ABORT override
    Vladislav Shpilevoy authored
    When txn_commit/try_async() failed before going to WAL thread,
    they installed TXN_SIGNATURE_ABORT signature meaning that the
    caller and the rollback triggers must look at the global diag.
    
    But they called txn_rollback() before doing return and calling the
    triggers, which overrode the signature with TXN_SIGNATURE_ROLLBACK
    leading to the original error loss.
    
    The patch makes TXN_SIGNATURE_ROLLBACK installed only when a real
    rollback happens (via box_txn_rollback()).
    
    This makes the original commit errors like a conflict in the
    transaction manager and OOM not lost.
    
    Besides, ERRINJ_TXN_COMMIT_ASYNC does not need its own diag_log()
    anymore. Because since this commit the applier logs the correct
    error instead of ER_WAL_IO/ER_TXN_ROLLBACK.
    
    Closes #6027