• Libing Song's avatar
    MDEV-33853 Async rollback prepared transactions during binlog · 5bbda971
    Libing Song authored
               crash recovery
    
    Summary
    =======
    When doing server recovery, the active transactions will be rolled
    back by InnoDB background rollback thread automatically. The
    prepared transactions will be committed or rolled back accordingly
    by binlog recovery. Binlog recovery is done in main thread before
    the server can provide service to users. If there is a big
    transaction to rollback, the server will not available for a long
    time.
    
    This patch provides a way to rollback the prepared transactions
    asynchronously. Thus the rollback will not block server startup.
    
    Design
    ======
    - Handler::recover_rollback_by_xid()
      This patch provides a new handler interface to rollback transactions
      in recover phase. InnoDB just set the transaction's state to active.
      Then the transaction will be rolled back by the background rollback
      thread.
    
    - Handler::signal_tc_log_recover_done()
      This function is called after tc log is opened(typically binlog opened)
      has done. When this function is called, all transactions will be rolled
      back have been reverted to ACTIVE state. Thus it starts rollback thread
      to rollback the transactions.
    
    - Background rollback thread
      With this patch, background rollback thread is defered to run until binlog
      recovery is finished. It is started by innobase_tc_log_recovery_done().
    5bbda971
ha_innodb.cc 619 KB