• Marko Mäkelä's avatar
    MDEV-27610 Unnecessary wait in InnoDB crash recovery · 56f5599f
    Marko Mäkelä authored
    In recv_sys_t::apply(), we were unnecessarily looking up pages
    in buf_pool.page_hash and potentially waiting for exclusive page latches.
    
    Before buf_page_get_low() would return an x-latched page,
    that page will have to be read and buf_page_read_complete() would
    have invoked recv_recover_page() to apply the log to the page.
    
    Therefore, it suffices to invoke recv_read_in_area() to trigger
    a transition from RECV_NOT_PROCESSED.
    
    recv_read_in_area(): Take the iterator as a parameter, and remove
    page_id lookups. Should the page already be in buf_pool.page_hash,
    buf_page_init_for_read() will return nullptr to buf_read_page_low()
    and buf_read_page_background().
    
    recv_sys_t::apply(): Replace goto, remove dead code, and add assertions
    to guarantee that the iteration will make progress.
    
    Reviewed by: Vladislav Lesin
    56f5599f
log0recv.cc 112 KB