• Marko Mäkelä's avatar
    MDEV-21216 InnoDB does dirty read of TRX_SYS page before recovery · 95e90326
    Marko Mäkelä authored
    InnoDB startup was discovering undo tablespaces in a dirty way.
    It was reading a possibly stale copy of the TRX_SYS page before
    processing any redo log records.
    
    srv_start(): Do not call buf_pool_invalidate(). Invoke
    trx_rseg_get_n_undo_tablespaces() after the recovery has been initiated.
    
    recv_recovery_from_checkpoint_start(): Assert that the buffer pool is
    empty. This used to be guaranteed by the buf_pool_invalidate() call.
    
    trx_rseg_get_n_undo_tablespaces(): Move to the calling compilation unit,
    and reimplement in a simpler way.
    
    srv_undo_tablespace_create(): Remove the constant parameter
    size=SRV_UNDO_TABLESPACE_SIZE_IN_PAGES.
    
    srv_undo_tablespace_open(): Reimplement in a cleaner way, with
    more robust error handling.
    
    srv_all_undo_tablespaces_open(): Split from srv_undo_tablespaces_init().
    
    srv_undo_tablespaces_init(): Read all "undo001","undo002" tablespace
    files directly, without consulting the TRX_SYS page via calling
    trx_rseg_get_n_undo_tablespaces().
    
    This is joint work with Thirunarayanan Balathandayuthapani.
    95e90326
undo_space_id.result 344 Bytes