-
Darshan M N authored
Issue: ====== Currently the approach we take to find the chunk corresponding to a given pointer uses srv_buf_pool_chunk_unit based on the assumption that srv_buf_pool_chunk_unit is the total size of all pages in a buffer pool chunk. We first step back by srv_buf_pool_chunk_unit bytes and use std::map::upper_bound() to find the first chunk in the map whose key >= the resulting pointer. However, the real size of a chunk (and thus, the total size of its pages) may differ from the value configured with innodb_buffer_pool_chunk_size due to rounding up to the OS page size. So, in some cases the above logic gives us the wrong chunk. Fix: ==== We find out the chunk corresponding to the give pointer without using srv_buf_pool_chunk_unit. This is done by using std::map::upper_bound() to find the next chunk in the map which appears right after the pointer and decrementing the iterator, which would give us the chunk the pointer belongs to. Contribution by Alexey Kopytov. RB: 13347 Reviewed-by: Debarun Banerjee <debarun.banerjee@oracle.com>
c6713f65