Commit 880a55f7 authored by marko's avatar marko

branches/innodb+: Merge revisions 3541:3544 from branches/zip:

  ------------------------------------------------------------------------
  r3541 | marko | 2008-12-16 12:14:58 +0200 (Tue, 16 Dec 2008) | 3 lines

  branches/zip: btr_cur_optimistic_delete(): Note that no further pages
  must be latched before calling mtr_commit(mtr) if the function returns TRUE.
  ------------------------------------------------------------------------
  r3544 | marko | 2008-12-16 15:52:36 +0200 (Tue, 16 Dec 2008) | 20 lines

  branches/zip: Do not update the free bits in the insert buffer bitmap
  when inserting or deleting from the insert buffer B-tree.  Assert that
  records in the insert buffer B-tree are never updated.  This could cure
  Issue #135.

  btr_cur_optimistic_insert(): Do not update the insert buffer bitmap
  when inserting to the insert buffer tree.

  btr_cur_optimistic_delete(): Do not update the insert buffer bitmap
  when deleting from the insert buffer tree.  This could be the cause
  of the assertion failure that was reported in Issue #135.

  btr_cur_update_alloc_zip(): Assert that the index is not the insert
  buffer.  The insert buffer will never be stored in compressed format.

  btr_cur_update_in_place(), btr_cur_optimistic_update(),
  btr_cur_pessimistic_update(): Assert that these functions are never
  invoked on the insert buffer tree.  The insert buffer only supports
  the insertion and deletion of records.
  ------------------------------------------------------------------------
parent 0a8380ab
...@@ -1357,7 +1357,9 @@ btr_cur_optimistic_insert( ...@@ -1357,7 +1357,9 @@ btr_cur_optimistic_insert(
buf_block_get_page_no(block), max_size, buf_block_get_page_no(block), max_size,
rec_size + PAGE_DIR_SLOT_SIZE, index->type); rec_size + PAGE_DIR_SLOT_SIZE, index->type);
#endif #endif
if (!dict_index_is_clust(index) && leaf) { if (leaf
&& !dict_index_is_clust(index)
&& !dict_index_is_ibuf(index)) {
/* Update the free bits of the B-tree page in the /* Update the free bits of the B-tree page in the
insert buffer bitmap. */ insert buffer bitmap. */
...@@ -1738,6 +1740,7 @@ btr_cur_update_alloc_zip( ...@@ -1738,6 +1740,7 @@ btr_cur_update_alloc_zip(
{ {
ut_a(page_zip == buf_block_get_page_zip(block)); ut_a(page_zip == buf_block_get_page_zip(block));
ut_ad(page_zip); ut_ad(page_zip);
ut_ad(!dict_index_is_ibuf(index));
if (page_zip_available(page_zip, dict_index_is_clust(index), if (page_zip_available(page_zip, dict_index_is_clust(index),
length, 0)) { length, 0)) {
...@@ -1814,6 +1817,9 @@ btr_cur_update_in_place( ...@@ -1814,6 +1817,9 @@ btr_cur_update_in_place(
rec = btr_cur_get_rec(cursor); rec = btr_cur_get_rec(cursor);
index = cursor->index; index = cursor->index;
ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(index->table)); ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(index->table));
/* The insert buffer tree should never be updated in place. */
ut_ad(!dict_index_is_ibuf(index));
trx = thr_get_trx(thr); trx = thr_get_trx(thr);
offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap); offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap);
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
...@@ -1950,6 +1956,8 @@ btr_cur_optimistic_update( ...@@ -1950,6 +1956,8 @@ btr_cur_optimistic_update(
index = cursor->index; index = cursor->index;
ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(index->table)); ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(index->table));
ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX)); ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
/* The insert buffer tree should never be updated in place. */
ut_ad(!dict_index_is_ibuf(index));
heap = mem_heap_create(1024); heap = mem_heap_create(1024);
offsets = rec_get_offsets(rec, index, NULL, ULINT_UNDEFINED, &heap); offsets = rec_get_offsets(rec, index, NULL, ULINT_UNDEFINED, &heap);
...@@ -2213,6 +2221,8 @@ btr_cur_pessimistic_update( ...@@ -2213,6 +2221,8 @@ btr_cur_pessimistic_update(
#ifdef UNIV_ZIP_DEBUG #ifdef UNIV_ZIP_DEBUG
ut_a(!page_zip || page_zip_validate(page_zip, page)); ut_a(!page_zip || page_zip_validate(page_zip, page));
#endif /* UNIV_ZIP_DEBUG */ #endif /* UNIV_ZIP_DEBUG */
/* The insert buffer tree should never be updated in place. */
ut_ad(!dict_index_is_ibuf(index));
optim_err = btr_cur_optimistic_update(flags, cursor, update, optim_err = btr_cur_optimistic_update(flags, cursor, update,
cmpl_info, thr, mtr); cmpl_info, thr, mtr);
...@@ -2916,10 +2926,12 @@ btr_cur_optimistic_delete( ...@@ -2916,10 +2926,12 @@ btr_cur_optimistic_delete(
#endif /* UNIV_ZIP_DEBUG */ #endif /* UNIV_ZIP_DEBUG */
if (dict_index_is_clust(cursor->index) if (dict_index_is_clust(cursor->index)
|| dict_index_is_ibuf(cursor->index)
|| !page_is_leaf(page)) { || !page_is_leaf(page)) {
/* The insert buffer does not handle /* The insert buffer does not handle
inserts to clustered indexes or to non-leaf inserts to clustered indexes, to
pages of secondary index B-trees. */ non-leaf pages of secondary index B-trees,
or to the insert buffer. */
} else if (page_zip) { } else if (page_zip) {
ibuf_update_free_bits_zip(block, mtr); ibuf_update_free_bits_zip(block, mtr);
} else { } else {
......
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