Bug#14329288 IS THE CALL TO IBUF_MERGE_OR_DELETE_FOR_PAGE FROM
BUF_PAGE_GET_GEN REDUNDANT? rb://1711 approved by: Marko Makela When decompressing a compressed page that had already been accessed in the buffer pool, do not attempt to merge buffered changes.
This commit is contained in:
parent
9258223200
commit
0b10e6d03f
@ -1,3 +1,9 @@
|
|||||||
|
2012-12-13 The InnoDB Team
|
||||||
|
|
||||||
|
* buf/buf0buf.c:
|
||||||
|
Fix Bug#14329288 IS THE CALL TO IBUF_MERGE_OR_DELETE_FOR_PAGE FROM
|
||||||
|
BUF_PAGE_GET_GEN REDUNDANT?
|
||||||
|
|
||||||
2012-11-15 The InnoDB Team
|
2012-11-15 The InnoDB Team
|
||||||
|
|
||||||
* include/data0type.ic, include/rem0rec.h,
|
* include/data0type.ic, include/rem0rec.h,
|
||||||
|
@ -1778,22 +1778,29 @@ wait_until_unfixed:
|
|||||||
|
|
||||||
UNIV_MEM_INVALID(bpage, sizeof *bpage);
|
UNIV_MEM_INVALID(bpage, sizeof *bpage);
|
||||||
|
|
||||||
|
buf_pool->n_pend_unzip++;
|
||||||
|
buf_pool_mutex_exit();
|
||||||
|
|
||||||
|
access_time = buf_page_is_accessed(&block->page);
|
||||||
mutex_exit(&block->mutex);
|
mutex_exit(&block->mutex);
|
||||||
mutex_exit(&buf_pool_zip_mutex);
|
mutex_exit(&buf_pool_zip_mutex);
|
||||||
buf_pool->n_pend_unzip++;
|
|
||||||
|
|
||||||
buf_pool_mutex_exit();
|
|
||||||
|
|
||||||
buf_page_free_descriptor(bpage);
|
buf_page_free_descriptor(bpage);
|
||||||
|
|
||||||
/* Decompress the page and apply buffered operations
|
/* Decompress the page while not holding
|
||||||
while not holding buf_pool_mutex or block->mutex. */
|
buf_pool_mutex or block->mutex. */
|
||||||
success = buf_zip_decompress(block, srv_use_checksums);
|
success = buf_zip_decompress(block, srv_use_checksums);
|
||||||
ut_a(success);
|
ut_a(success);
|
||||||
|
|
||||||
if (UNIV_LIKELY(!recv_no_ibuf_operations)) {
|
if (UNIV_LIKELY(!recv_no_ibuf_operations)) {
|
||||||
ibuf_merge_or_delete_for_page(block, space, offset,
|
if (access_time) {
|
||||||
zip_size, TRUE);
|
#ifdef UNIV_IBUF_COUNT_DEBUG
|
||||||
|
ut_a(ibuf_count_get(space, offset) == 0);
|
||||||
|
#endif /* UNIV_IBUF_COUNT_DEBUG */
|
||||||
|
} else {
|
||||||
|
ibuf_merge_or_delete_for_page(
|
||||||
|
block, space, offset, zip_size, TRUE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unfix and unlatch the block. */
|
/* Unfix and unlatch the block. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user