From 937e6971ec97a965be9cd0ad733a417dfddf87ba Mon Sep 17 00:00:00 2001 From: marko Date: Fri, 24 Oct 2008 06:51:35 +0000 Subject: [PATCH] branches/innodb+: Merge revisions 2862:2867 from branches/zip: ------------------------------------------------------------------------ r2866 | marko | 2008-10-23 23:25:43 +0300 (Thu, 23 Oct 2008) | 4 lines 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. This fixes Issue #88. ------------------------------------------------------------------------ r2867 | marko | 2008-10-24 10:24:17 +0300 (Fri, 24 Oct 2008) | 2 lines branches/zip: ChangeLog: Document r2763, r2794, r2683, r2799, r2809, r2866. ------------------------------------------------------------------------ --- ChangeLog | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ ibuf/ibuf0ibuf.c | 16 +++++++----- 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4430a1b0719..95895968192 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-10-23 The InnoDB Team + + * ibuf/ibuf0ibuf.c: + + ibuf_delete_rec(): When the cursor to the insert buffer record + cannot be restored, do not complain if the tablespace does not + exist, because the insert buffer record may have been discarded by + some other thread. This bug has existed in MySQL/InnoDB since + version 4.1, when innodb_file_per_table was implemented. + 2008-10-22 The InnoDB Team * dict/dict0dict.c, dict/dict0mem.c, handler/ha_innodb.cc, @@ -15,6 +25,64 @@ Fix Bug#40224 New AUTOINC changes mask reporting of deadlock/timeout errors +2008-10-16 The InnoDB Team + + * dict/dict0dict.c, + mysql-test/innodb-index.result, mysql-test/innodb-index.test: + Skip the undo log size check when creating REDUNDANT and COMPACT + tables. In ROW_FORMAT=DYNAMIC and ROW_FORMAT=COMPRESSED, column + prefix indexes require that prefixes of externally stored columns + be written to the undo log. This may make the undo log record + bigger than the record on the B-tree page. The maximum size of an + undo log record is the page size. That must be checked for, in + dict_index_add_to_cache(). However, this restriction must not + be enforced on REDUNDANT or COMPACT tables. + +2008-10-15 The InnoDB Team + + * btr/btr0cur.c, include/btr0cur.h, row/row0ext.c, + row/row0sel.c, row/row0upd.c: + When the server crashes while freeing an externally stored column + of a compressed table, the BTR_EXTERN_LEN field in the BLOB + pointer will be written as 0. Tolerate this in the functions that + deal with externally stored columns. This fixes problems after + crash recovery, in the rollback of incomplete transactions, and in + the purge of delete-marked records. + +2008-10-15 The InnoDB Team + + * btr/btr0btr.c, include/page0zip.h, page/page0zip.c, include/univ.i: + When a B-tree node of a compressed table is split or merged, the + compression may fail. In this case, the entire compressed page + will be copied and the excess records will be deleted. However, + page_zip_copy(), now renamed to page_zip_copy_recs(), copied too + many fields in the page header, overwriting PAGE_BTR_SEG_LEAF and + PAGE_BTR_SEG_TOP when splitting the B-tree root. This caused + corruption of compressed tables. Furthermore, the lock table and + the adaptive hash index would be corrupted, because we forgot to + update them when invoking page_zip_copy_recs(). + + Introduce the symbol UNIV_ZIP_DEBUG for triggering the copying of + compressed pages more often, for debugging purposes. + +2008-10-10 The InnoDB Team + + * handler/handler0alter.cc, include/row0merge.h, row/row0merge.c, + row/row0mysql.c: + Fix some locking issues, mainly in fast index creation. The + InnoDB data dictionary cache should be latched whenever a + transaction is holding locks on any data dictionary tables. + Otherwise, lock waits or deadlocks could occur. Furthermore, the + data dictionary transaction must be committed (and the locks + released) before the data dictionary latch is released. + + ha_innobase::add_index(): Lock the data dictionary before renaming + or dropping the created indexes, because neither operation will + commit the data dictionary transaction. + + ha_innobase::final_drop_index(): Commit the transactions before + unlocking the data dictionary. + 2008-10-09 The InnoDB Team * buf/buf0lru.c: diff --git a/ibuf/ibuf0ibuf.c b/ibuf/ibuf0ibuf.c index 5fee0403307..c94fc2e5867 100644 --- a/ibuf/ibuf0ibuf.c +++ b/ibuf/ibuf0ibuf.c @@ -3658,6 +3658,13 @@ ibuf_delete_rec( success = btr_pcur_restore_position(BTR_MODIFY_TREE, pcur, mtr); if (!success) { + if (fil_space_get_flags(space) == ULINT_UNDEFINED) { + /* The tablespace has been dropped. It is possible + that another thread has deleted the insert buffer + entry. Do not complain. */ + goto func_exit; + } + fprintf(stderr, "InnoDB: ERROR: Submit the output to" " http://bugs.mysql.com\n" @@ -3684,11 +3691,7 @@ ibuf_delete_rec( fprintf(stderr, "InnoDB: ibuf tree ok\n"); fflush(stderr); - btr_pcur_close(pcur); - - mutex_exit(&ibuf_mutex); - - return(TRUE); + goto func_exit; } root = ibuf_tree_root_get(mtr); @@ -3699,13 +3702,12 @@ ibuf_delete_rec( #ifdef UNIV_IBUF_COUNT_DEBUG ibuf_count_set(space, page_no, ibuf_count_get(space, page_no) - 1); -#else - UT_NOT_USED(space); #endif ibuf_size_update(root, mtr); btr_pcur_commit_specify_mtr(pcur, mtr); +func_exit: btr_pcur_close(pcur); mutex_exit(&ibuf_mutex);