• Marko Mäkelä's avatar
    Bug#24346574 PAGE CLEANER THREAD, ASSERT BLOCK->N_POINTERS == 0 · e63ead68
    Marko Mäkelä authored
    btr_search_drop_page_hash_index(): Do not return before ensuring
    that block->index=NULL, even if !btr_search_enabled. We would
    typically still skip acquiring the AHI latch when the AHI is
    disabled, because block->index would already be NULL. Only if the AHI
    is in the process of being disabled, we would wait for the AHI latch
    and then notice that block->index=NULL and return.
    
    The above bug was a regression caused in MySQL 5.7.9 by the fix of
    Bug#21407023: DISABLING AHI SHOULD AVOID TAKING AHI LATCH
    
    The rest of this patch improves diagnostics by adding assertions.
    
    assert_block_ahi_valid(): A debug predicate for checking that
    block->n_pointers!=0 implies block->index!=NULL.
    
    assert_block_ahi_empty(): A debug predicate for checking that
    block->n_pointers==0.
    
    buf_block_init(): Instead of assigning block->n_pointers=0,
    assert_block_ahi_empty(block).
    
    buf_pool_clear_hash_index(): Clarify comments, and assign
    block->n_pointers=0 before assigning block->index=NULL.
    The wrong ordering could make block->n_pointers appear incorrect in
    debug assertions. This bug was introduced in MySQL 5.1.52 by
    Bug#13006367 62487: INNODB TAKES 3 MINUTES TO CLEAN UP THE
    ADAPTIVE HASH INDEX AT SHUTDOWN
    
    i_s_innodb_buffer_page_get_info(): Add a comment that
    the IS_HASHED column in the INFORMATION_SCHEMA views
    INNODB_BUFFER_POOL_PAGE and INNODB_BUFFER_PAGE_LRU may
    show false positives (there may be no pointers after all.)
    
    ha_insert_for_fold_func(), ha_delete_hash_node(),
    ha_search_and_update_if_found_func(): Use atomics for
    updating buf_block_t::n_pointers. While buf_block_t::index is
    always protected by btr_search_x_lock(index), in
    ha_insert_for_fold_func() the n_pointers-- may belong to
    another dict_index_t whose btr_search_latches[] we are not holding.
    
    RB: 13879
    Reviewed-by: default avatarJimmy Yang <jimmy.yang@oracle.com>
    e63ead68
btr0cur.cc 221 KB