Commit 1f796c2b authored by Marko Mäkelä's avatar Marko Mäkelä

Bug #55284 diagnostics: Enable UNIV_DEBUG_FILE_ACCESSES by UNIV_DEBUG

It was the enabling of UNIV_DEBUG_FILE_ACCESSES that caught Bug #55284
in the first place. This is a very light piece of of debug code, and
there really is no reason why it is not enabled in all debug builds.

rb://551 approved by Jimmy Yang
parent e952ee11
...@@ -657,9 +657,9 @@ buf_block_init( ...@@ -657,9 +657,9 @@ buf_block_init(
block->modify_clock = 0; block->modify_clock = 0;
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
block->page.file_page_was_freed = FALSE; block->page.file_page_was_freed = FALSE;
#endif /* UNIV_DEBUG_FILE_ACCESSES */ #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
block->check_index_page_at_flush = FALSE; block->check_index_page_at_flush = FALSE;
block->index = NULL; block->index = NULL;
...@@ -1600,7 +1600,7 @@ buf_page_peek_if_search_hashed( ...@@ -1600,7 +1600,7 @@ buf_page_peek_if_search_hashed(
return(is_hashed); return(is_hashed);
} }
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
/********************************************************************//** /********************************************************************//**
Sets file_page_was_freed TRUE if the page is found in the buffer pool. Sets file_page_was_freed TRUE if the page is found in the buffer pool.
This function should be called when we free a file page and want the This function should be called when we free a file page and want the
...@@ -1621,6 +1621,8 @@ buf_page_set_file_page_was_freed( ...@@ -1621,6 +1621,8 @@ buf_page_set_file_page_was_freed(
bpage = buf_page_hash_get(space, offset); bpage = buf_page_hash_get(space, offset);
if (bpage) { if (bpage) {
/* bpage->file_page_was_freed can already hold
when this code is invoked from dict_drop_index_tree() */
bpage->file_page_was_freed = TRUE; bpage->file_page_was_freed = TRUE;
} }
...@@ -1656,7 +1658,7 @@ buf_page_reset_file_page_was_freed( ...@@ -1656,7 +1658,7 @@ buf_page_reset_file_page_was_freed(
return(bpage); return(bpage);
} }
#endif /* UNIV_DEBUG_FILE_ACCESSES */ #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
/********************************************************************//** /********************************************************************//**
Get read access to a compressed page (usually of type Get read access to a compressed page (usually of type
...@@ -1753,7 +1755,7 @@ got_block: ...@@ -1753,7 +1755,7 @@ got_block:
buf_page_set_accessed_make_young(bpage, access_time); buf_page_set_accessed_make_young(bpage, access_time);
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
ut_a(!bpage->file_page_was_freed); ut_a(!bpage->file_page_was_freed);
#endif #endif
...@@ -2321,7 +2323,7 @@ wait_until_unfixed: ...@@ -2321,7 +2323,7 @@ wait_until_unfixed:
buf_page_set_accessed_make_young(&block->page, access_time); buf_page_set_accessed_make_young(&block->page, access_time);
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
ut_a(!block->page.file_page_was_freed); ut_a(!block->page.file_page_was_freed);
#endif #endif
...@@ -2479,7 +2481,7 @@ buf_page_optimistic_get( ...@@ -2479,7 +2481,7 @@ buf_page_optimistic_get(
ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE); ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
#endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */ #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
ut_a(block->page.file_page_was_freed == FALSE); ut_a(block->page.file_page_was_freed == FALSE);
#endif #endif
if (UNIV_UNLIKELY(!access_time)) { if (UNIV_UNLIKELY(!access_time)) {
...@@ -2587,7 +2589,7 @@ buf_page_get_known_nowait( ...@@ -2587,7 +2589,7 @@ buf_page_get_known_nowait(
ut_a(block->page.buf_fix_count > 0); ut_a(block->page.buf_fix_count > 0);
ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE); ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
#endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */ #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
ut_a(block->page.file_page_was_freed == FALSE); ut_a(block->page.file_page_was_freed == FALSE);
#endif #endif
...@@ -2670,9 +2672,9 @@ buf_page_try_get_func( ...@@ -2670,9 +2672,9 @@ buf_page_try_get_func(
ut_a(block->page.buf_fix_count > 0); ut_a(block->page.buf_fix_count > 0);
ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE); ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
#endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */ #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
ut_a(block->page.file_page_was_freed == FALSE); ut_a(block->page.file_page_was_freed == FALSE);
#endif /* UNIV_DEBUG_FILE_ACCESSES */ #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
buf_block_dbg_add_level(block, SYNC_NO_ORDER_CHECK); buf_block_dbg_add_level(block, SYNC_NO_ORDER_CHECK);
buf_pool->stat.n_page_gets++; buf_pool->stat.n_page_gets++;
...@@ -2701,9 +2703,9 @@ buf_page_init_low( ...@@ -2701,9 +2703,9 @@ buf_page_init_low(
bpage->newest_modification = 0; bpage->newest_modification = 0;
bpage->oldest_modification = 0; bpage->oldest_modification = 0;
HASH_INVALIDATE(bpage, hash); HASH_INVALIDATE(bpage, hash);
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
bpage->file_page_was_freed = FALSE; bpage->file_page_was_freed = FALSE;
#endif /* UNIV_DEBUG_FILE_ACCESSES */ #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
} }
/********************************************************************//** /********************************************************************//**
...@@ -3009,9 +3011,9 @@ buf_page_create( ...@@ -3009,9 +3011,9 @@ buf_page_create(
#ifdef UNIV_IBUF_COUNT_DEBUG #ifdef UNIV_IBUF_COUNT_DEBUG
ut_a(ibuf_count_get(space, offset) == 0); ut_a(ibuf_count_get(space, offset) == 0);
#endif #endif
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
block->page.file_page_was_freed = FALSE; block->page.file_page_was_freed = FALSE;
#endif /* UNIV_DEBUG_FILE_ACCESSES */ #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
/* Page can be found in buf_pool */ /* Page can be found in buf_pool */
buf_pool_mutex_exit(); buf_pool_mutex_exit();
......
...@@ -3444,9 +3444,9 @@ fseg_free_page( ...@@ -3444,9 +3444,9 @@ fseg_free_page(
fseg_free_page_low(seg_inode, space, zip_size, page, mtr); fseg_free_page_low(seg_inode, space, zip_size, page, mtr);
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
buf_page_set_file_page_was_freed(space, page); buf_page_set_file_page_was_freed(space, page);
#endif #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
} }
/**********************************************************************//** /**********************************************************************//**
...@@ -3513,13 +3513,13 @@ fseg_free_extent( ...@@ -3513,13 +3513,13 @@ fseg_free_extent(
fsp_free_extent(space, zip_size, page, mtr); fsp_free_extent(space, zip_size, page, mtr);
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
for (i = 0; i < FSP_EXTENT_SIZE; i++) { for (i = 0; i < FSP_EXTENT_SIZE; i++) {
buf_page_set_file_page_was_freed(space, buf_page_set_file_page_was_freed(space,
first_page_in_extent + i); first_page_in_extent + i);
} }
#endif #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
} }
/**********************************************************************//** /**********************************************************************//**
......
...@@ -1878,9 +1878,9 @@ ibuf_remove_free_page(void) ...@@ -1878,9 +1878,9 @@ ibuf_remove_free_page(void)
fseg_free_page(header_page + IBUF_HEADER + IBUF_TREE_SEG_HEADER, fseg_free_page(header_page + IBUF_HEADER + IBUF_TREE_SEG_HEADER,
IBUF_SPACE_ID, page_no, &mtr); IBUF_SPACE_ID, page_no, &mtr);
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
buf_page_reset_file_page_was_freed(IBUF_SPACE_ID, page_no); buf_page_reset_file_page_was_freed(IBUF_SPACE_ID, page_no);
#endif #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
ibuf_enter(); ibuf_enter();
...@@ -1922,9 +1922,9 @@ ibuf_remove_free_page(void) ...@@ -1922,9 +1922,9 @@ ibuf_remove_free_page(void)
ibuf_bitmap_page_set_bits( ibuf_bitmap_page_set_bits(
bitmap_page, page_no, zip_size, IBUF_BITMAP_IBUF, FALSE, &mtr); bitmap_page, page_no, zip_size, IBUF_BITMAP_IBUF, FALSE, &mtr);
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
buf_page_set_file_page_was_freed(IBUF_SPACE_ID, page_no); buf_page_set_file_page_was_freed(IBUF_SPACE_ID, page_no);
#endif #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
mtr_commit(&mtr); mtr_commit(&mtr);
mutex_exit(&ibuf_mutex); mutex_exit(&ibuf_mutex);
......
...@@ -368,7 +368,7 @@ buf_reset_check_index_page_at_flush( ...@@ -368,7 +368,7 @@ buf_reset_check_index_page_at_flush(
/*================================*/ /*================================*/
ulint space, /*!< in: space id */ ulint space, /*!< in: space id */
ulint offset);/*!< in: page number */ ulint offset);/*!< in: page number */
#ifdef UNIV_DEBUG_FILE_ACCESSES #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
/********************************************************************//** /********************************************************************//**
Sets file_page_was_freed TRUE if the page is found in the buffer pool. Sets file_page_was_freed TRUE if the page is found in the buffer pool.
This function should be called when we free a file page and want the This function should be called when we free a file page and want the
...@@ -393,7 +393,7 @@ buf_page_reset_file_page_was_freed( ...@@ -393,7 +393,7 @@ buf_page_reset_file_page_was_freed(
/*===============================*/ /*===============================*/
ulint space, /*!< in: space id */ ulint space, /*!< in: space id */
ulint offset); /*!< in: page number */ ulint offset); /*!< in: page number */
#endif /* UNIV_DEBUG_FILE_ACCESSES */ #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
/********************************************************************//** /********************************************************************//**
Reads the freed_page_clock of a buffer block. Reads the freed_page_clock of a buffer block.
@return freed_page_clock */ @return freed_page_clock */
...@@ -1135,11 +1135,11 @@ struct buf_page_struct{ ...@@ -1135,11 +1135,11 @@ struct buf_page_struct{
0 if the block was never accessed 0 if the block was never accessed
in the buffer pool */ in the buffer pool */
/* @} */ /* @} */
# ifdef UNIV_DEBUG_FILE_ACCESSES # if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
ibool file_page_was_freed; ibool file_page_was_freed;
/*!< this is set to TRUE when fsp /*!< this is set to TRUE when fsp
frees a page in buffer pool */ frees a page in buffer pool */
# endif /* UNIV_DEBUG_FILE_ACCESSES */ # endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
#endif /* !UNIV_HOTBACKUP */ #endif /* !UNIV_HOTBACKUP */
}; };
......
...@@ -182,9 +182,8 @@ command. Not tested on Windows. */ ...@@ -182,9 +182,8 @@ command. Not tested on Windows. */
#define UNIV_DEBUG_LOCK_VALIDATE /* Enable #define UNIV_DEBUG_LOCK_VALIDATE /* Enable
ut_ad(lock_rec_validate_page()) ut_ad(lock_rec_validate_page())
assertions. */ assertions. */
#define UNIV_DEBUG_FILE_ACCESSES /* Debug .ibd file access #define UNIV_DEBUG_FILE_ACCESSES /* Enable freed block access
(field file_page_was_freed debugging without UNIV_DEBUG */
in buf_page_t) */
#define UNIV_LRU_DEBUG /* debug the buffer pool LRU */ #define UNIV_LRU_DEBUG /* debug the buffer pool LRU */
#define UNIV_HASH_DEBUG /* debug HASH_ macros */ #define UNIV_HASH_DEBUG /* debug HASH_ macros */
#define UNIV_LIST_DEBUG /* debug UT_LIST_ macros */ #define UNIV_LIST_DEBUG /* debug UT_LIST_ macros */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment