Merge lp:~laurynas-biveinis/percona-server/bug1305364-5.5 into lp:percona-server/5.5
Status: | Merged |
---|---|
Approved by: | Laurynas Biveinis on 2014-05-19 |
Approved revision: | 625 |
Merged at revision: | 661 |
Proposed branch: | lp:~laurynas-biveinis/percona-server/bug1305364-5.5 |
Merge into: | lp:percona-server/5.5 |
Diff against target: |
302 lines (+47/-59) 5 files modified
storage/innobase/buf/buf0buf.c (+9/-1) storage/innobase/buf/buf0flu.c (+5/-1) storage/innobase/buf/buf0lru.c (+22/-55) storage/innobase/buf/buf0rea.c (+6/-2) storage/innobase/include/buf0buf.ic (+5/-0) |
To merge this branch: | bzr merge lp:~laurynas-biveinis/percona-server/bug1305364-5.5 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Vlad Lesin (community) | g2 | 2014-04-24 | Approve on 2014-04-28 |
Review via email:
|
Description of the change
Fix bug 1305364 (InnoDB: Assertion failure in file buf0flu.cc line 546
| crashes if RW workload and InnoDB compression are combined) and bug
1219833 (Redundant page state re-checks in
buf_LRU_
buf_LRU_
The former bug was fixed by reviewing buf_page_in_file calls and
buf_page_get_state == BUF_BLOCK_
correctness. The transition for a buffer page state from
BUF_BLOCK_FILE_PAGE to BUF_BLOCK_
combination of locked page_hash_latch, LRU_list_mutex, and block
mutex. Thus, any of the checks above must have locked at least one of
those three sync objects.
- buf_page_get_zip: check if buf_page_get_state is still
BUF_BLOCK_
buf_LRU_
- buf_LRU_
so that buf_LRU_
buf_LRU_
scans anymore.
- buf_read_
pool mutex around buf_page_hash_get mutex. This is in line with
previous fixes to buf_read_
Add several asserts to document the required locking better in
buf_pool_
buf_LRU_
buf_LRU_
and buf_page_get_block. Some of these are UNIV_SYNC_DEBUG, thus
nothing more than code comments, because currently UNIV_SYNC_DEBUG
builds are broken.
buf_LRU_
removing all the code in its callees that attempts to perform lockless
LRU list scans and is broken, as well as fixing bug 1219833. There
- remove have_LRU_mutex args from buf_LRU_
buf_LRU_
as it's always TRUE.
- remove any have_LRU_mutex checks, page state re-checks, and scan
restarts from the same functions.
http://
Not sure if G1 or G2.
I don't see any errors here. The code looks good for me and explanations are reasonable.