Commit 3cac98cb authored by Satya B's avatar Satya B

Applying InnoDB snashot 5.1-ss3603. Fixes BUG#27276

1) BUG#27276 - InnoDB Error: ibuf cursor restoration fails

2) Follow up fix for BUG#27276 which fixes the bug introduced in
   the previous revision r2924

Detailed revision comments:

r2924 | marko | 2008-10-29 10:07:48 +0200 (Wed, 29 Oct 2008) | 7 lines
branches/5.1: Merge revision 2866 from branches/zip:

ibuf_delete_rec(): When the cursor to the insert buffer record cannot be
restored, do not complain if the tablespace does not exist. (Bug #27276)

Approved by Sunny Bains (rb://34)

r3598 | marko | 2008-12-22 15:28:03 +0200 (Mon, 22 Dec 2008) | 6 lines
branches/5.1: ibuf_delete_rec(): When the record cannot be found and
the tablespace has been dropped, commit the mini-transaction, so that
InnoDB will not hold the insert buffer tree latch in exclusive mode,
causing a potential deadlock.  This bug was introduced in the fix of
Bug #27276 in r2924.
parent 4474300a
...@@ -2992,6 +2992,13 @@ ibuf_delete_rec( ...@@ -2992,6 +2992,13 @@ ibuf_delete_rec(
success = btr_pcur_restore_position(BTR_MODIFY_TREE, pcur, mtr); success = btr_pcur_restore_position(BTR_MODIFY_TREE, pcur, mtr);
if (!success) { if (!success) {
if (fil_space_get_version(space) == -1) {
/* The tablespace has been dropped. It is possible
that another thread has deleted the insert buffer
entry. Do not complain. */
goto commit_and_exit;
}
fprintf(stderr, fprintf(stderr,
"InnoDB: ERROR: Submit the output to" "InnoDB: ERROR: Submit the output to"
" http://bugs.mysql.com\n" " http://bugs.mysql.com\n"
...@@ -3018,11 +3025,7 @@ ibuf_delete_rec( ...@@ -3018,11 +3025,7 @@ ibuf_delete_rec(
fprintf(stderr, "InnoDB: ibuf tree ok\n"); fprintf(stderr, "InnoDB: ibuf tree ok\n");
fflush(stderr); fflush(stderr);
btr_pcur_close(pcur); goto func_exit;
mutex_exit(&ibuf_mutex);
return(TRUE);
} }
root = ibuf_tree_root_get(ibuf_data, 0, mtr); root = ibuf_tree_root_get(ibuf_data, 0, mtr);
...@@ -3033,15 +3036,15 @@ ibuf_delete_rec( ...@@ -3033,15 +3036,15 @@ ibuf_delete_rec(
#ifdef UNIV_IBUF_DEBUG #ifdef UNIV_IBUF_DEBUG
ibuf_count_set(space, page_no, ibuf_count_get(space, page_no) - 1); ibuf_count_set(space, page_no, ibuf_count_get(space, page_no) - 1);
#else
UT_NOT_USED(space);
#endif #endif
ibuf_data_sizes_update(ibuf_data, root, mtr); ibuf_data_sizes_update(ibuf_data, root, mtr);
ut_ad(ibuf_validate_low()); ut_ad(ibuf_validate_low());
commit_and_exit:
btr_pcur_commit_specify_mtr(pcur, mtr); btr_pcur_commit_specify_mtr(pcur, mtr);
func_exit:
btr_pcur_close(pcur); btr_pcur_close(pcur);
mutex_exit(&ibuf_mutex); mutex_exit(&ibuf_mutex);
......
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