• Marko Mäkelä's avatar
    MDEV-32029 Assertion failures in log_sort_flush_list upon crash recovery · 9d146652
    Marko Mäkelä authored
    In commit 0d175968 (MDEV-31354)
    we only waited that no buf_pool.flush_list writes are in progress.
    The buf_flush_page_cleaner() thread could still initiate page writes
    from the buf_pool.LRU list while only holding buf_pool.mutex, not
    buf_pool.flush_list_mutex. This is something that was changed in
    commit a55b951e (MDEV-26827).
    
    log_sort_flush_list(): Wait for the buf_flush_page_cleaner() thread to
    be completely idle, including LRU flushing.
    
    buf_flush_page_cleaner(): Always broadcast buf_pool.done_flush_list
    when becoming idle, so that log_sort_flush_list() will be woken up.
    Also, ensure that buf_pool.n_flush_inc() or
    buf_pool.flush_list_set_active() has been invoked before any page
    writes are initiated.
    
    buf_flush_try_neighbors(): Release buf_pool.mutex here and not in the
    callers, to avoid code duplication. Make innodb_flush_neighbors=ON
    obey the innodb_io_capacity limit.
    9d146652
buf0buf.h 71.4 KB