Commit 112a93a7 authored by Marko Mäkelä's avatar Marko Mäkelä

Bug#14329288 IS THE CALL TO IBUF_MERGE_OR_DELETE_FOR_PAGE FROM

BUF_PAGE_GET_GEN REDUNDANT?

buf_page_get_gen(): When decompressing a compressed page that had
already been accessed in the buffer pool, do not attempt to merge
buffered changes.

rb:1602 approved by Inaam Rana
parent 0e01efc0
2012-11-28 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,
......
...@@ -1786,14 +1786,26 @@ wait_until_unfixed: ...@@ -1786,14 +1786,26 @@ wait_until_unfixed:
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, unsigned accessed;
zip_size, TRUE);
mutex_enter(&block->mutex);
accessed = buf_page_is_accessed(&block->page);
mutex_exit(&block->mutex);
if (accessed) {
#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. */
......
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