From d836a705477d813cb90f4172c5ef8caa3be94727 Mon Sep 17 00:00:00 2001 From: marko <Unknown> Date: Wed, 5 Nov 2008 15:13:09 +0000 Subject: [PATCH] branches/innodb+: ibuf_insert_low(): Ignore the free bits in the insert buffer bitmap when buffering deletes or delete-marks. TODO: ibuf_get_volume_buffered() should return only the volume of the buffered inserts, not deletes or delete-marks. --- ibuf/ibuf0ibuf.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/ibuf/ibuf0ibuf.c b/ibuf/ibuf0ibuf.c index 9f3f5547238..15bf777407e 100644 --- a/ibuf/ibuf0ibuf.c +++ b/ibuf/ibuf0ibuf.c @@ -2999,7 +2999,6 @@ ibuf_insert_low( ib_int64_t space_versions[IBUF_MAX_N_PAGES_MERGED]; ulint page_nos[IBUF_MAX_N_PAGES_MERGED]; ulint n_stored; - ulint bits; mtr_t mtr; mtr_t bitmap_mtr; @@ -3115,23 +3114,27 @@ ibuf_insert_low( goto function_exit; } - bits = ibuf_bitmap_page_get_bits(bitmap_page, page_no, zip_size, - IBUF_BITMAP_FREE, &bitmap_mtr); + if (op == IBUF_OP_INSERT) { + ulint bits = ibuf_bitmap_page_get_bits( + bitmap_page, page_no, zip_size, IBUF_BITMAP_FREE, + &bitmap_mtr); - if (buffered + entry_size + page_dir_calc_reserved_space(1) - > ibuf_index_page_calc_free_from_bits(zip_size, bits)) { - mtr_commit(&bitmap_mtr); + if (buffered + entry_size + page_dir_calc_reserved_space(1) + > ibuf_index_page_calc_free_from_bits(zip_size, bits)) { + mtr_commit(&bitmap_mtr); - /* It may not fit */ - err = DB_STRONG_FAIL; + /* It may not fit */ + err = DB_STRONG_FAIL; - do_merge = TRUE; + do_merge = TRUE; - ibuf_get_merge_page_nos( - FALSE, btr_pcur_get_rec(&pcur), - space_ids, space_versions, page_nos, &n_stored); + ibuf_get_merge_page_nos( + FALSE, btr_pcur_get_rec(&pcur), + space_ids, space_versions, + page_nos, &n_stored); - goto function_exit; + goto function_exit; + } } /* Patch correct counter value to the entry to insert. This can