mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 12:01:42 +01:00
227df33ed6
------------------------------------------------------------------------ r6560 | sunny | 2010-02-04 16:11:23 +0200 (Thu, 04 Feb 2010) | 7 lines Changed paths: M /branches/zip/lock/lock0lock.c branches/zip: Remove the additional check introduced in r6534 which tries to check if the joining transaction has any other transactions waiting on its locks. This optimization results in excessive deadlocks when running Sysbench with a large number of threads. The function seems to return FALSE positives. rb://250 ------------------------------------------------------------------------ r6591 | marko | 2010-02-08 10:06:39 +0200 (Mon, 08 Feb 2010) | 3 lines Changed paths: M /branches/zip/row/row0merge.c branches/zip: row_merge_drop_index(): Remove redundant condition on SYS_INDEXES.TABLE_ID. INDEX_ID must be instance-widely unique, because SYS_FIELDS is not indexed by TABLE_ID. ------------------------------------------------------------------------ r6594 | marko | 2010-02-08 12:55:04 +0200 (Mon, 08 Feb 2010) | 2 lines Changed paths: M /branches/zip/rem/rem0rec.c branches/zip: rec_get_nth_field_offs_old(): Replace if (!cond) ut_error; tests with ut_a(cond). ------------------------------------------------------------------------ r6595 | marko | 2010-02-08 13:53:02 +0200 (Mon, 08 Feb 2010) | 1 line Changed paths: M /branches/zip/include/btr0pcur.h M /branches/zip/include/btr0pcur.ic branches/zip: btr_pcur_commit(): Unused function, remove. ------------------------------------------------------------------------ r6608 | marko | 2010-02-09 11:02:37 +0200 (Tue, 09 Feb 2010) | 1 line Changed paths: M /branches/zip/handler/handler0alter.cc branches/zip: ha_innobase::add_index(): Check for !innodb_table. ------------------------------------------------------------------------ r6609 | marko | 2010-02-09 13:45:40 +0200 (Tue, 09 Feb 2010) | 1 line Changed paths: M /branches/zip/dict/dict0dict.c branches/zip: dict_field_print_low(): Add const qualifier. ------------------------------------------------------------------------ r6610 | marko | 2010-02-09 13:53:59 +0200 (Tue, 09 Feb 2010) | 17 lines Changed paths: M /branches/zip/dict/dict0boot.c M /branches/zip/include/dict0boot.h M /branches/zip/row/row0merge.c M /branches/zip/row/row0mysql.c branches/zip: When dropping temporary indexes and tables at startup, first load them to the data dictionary cache and use the normal routines for dropping tables or indexes. This should reduce the risk of bugs and also make the code compatible with the upcoming TablespaceDictionary implementation. DICT_SYS_INDEXES_NAME_FIELD: The clustered index position of SYS_INDEXES.NAME. row_merge_drop_temp_indexes(): Scan SYS_INDEXES for tables containing temporary indexes, and load the tables as needed. Invoke row_merge_drop_index() to drop the indexes. row_mysql_drop_temp_tables(): Scan SYS_TABLES for temporary tables, load them with dict_load_table() and drop them with row_drop_table_for_mysql(). rb://251, not yet reviewed ------------------------------------------------------------------------ r6611 | marko | 2010-02-09 14:28:25 +0200 (Tue, 09 Feb 2010) | 11 lines Changed paths: M /branches/zip/include/log0recv.h M /branches/zip/log/log0recv.c M /branches/zip/srv/srv0start.c branches/zip: Roll back dictionary transaction(s) before scanning *.ibd files innobase_start_or_create_for_mysql(): Roll back data dictionary transactions before scanning the *.ibd files. Then, data dictionary records can be loaded to the cache before opening the *.ibd files. recv_recovery_rollback_active(): Refactored from recv_recovery_from_checkpoint_finish(). rb://235, committing without review, because this is needed for TablespaceDictionary. ------------------------------------------------------------------------ r6612 | marko | 2010-02-09 14:32:39 +0200 (Tue, 09 Feb 2010) | 3 lines Changed paths: M /branches/zip/log/log0recv.c branches/zip: recv_recovery_rollback_active(): Drop the temporary tables and indexes after enabling sync order checks. This should not make any difference. This could have been done in r6611. ------------------------------------------------------------------------ r6614 | inaam | 2010-02-09 20:26:23 +0200 (Tue, 09 Feb 2010) | 7 lines Changed paths: M /branches/zip/srv/srv0srv.c branches/plugin rb://242 Let the master thread sleep if the amount of work to be done is calibrated as taking less than a second. Approved by: Heikki ------------------------------------------------------------------------ r6631 | marko | 2010-02-10 09:19:52 +0200 (Wed, 10 Feb 2010) | 1 line Changed paths: M /branches/zip/ChangeLog branches/zip: Document r6614 in ChangeLog. ------------------------------------------------------------------------ r6633 | marko | 2010-02-10 10:40:55 +0200 (Wed, 10 Feb 2010) | 31 lines Changed paths: M /branches/zip/ChangeLog M /branches/zip/buf/buf0buf.c M /branches/zip/lock/lock0lock.c branches/zip: Merge revisions 6538:6613 from branches/5.1: ------------------------------------------------------------------------ r6545 | jyang | 2010-02-03 03:57:32 +0200 (Wed, 03 Feb 2010) | 8 lines Changed paths: M /branches/5.1/lock/lock0lock.c branches/5.1: Fix bug #49001, "SHOW INNODB STATUS deadlock info incorrect when deadlock detection aborts". Print the correct lock owner when recursive function lock_deadlock_recursive() exceeds its maximum depth LOCK_MAX_DEPTH_IN_DEADLOCK_CHECK. rb://217, approved by Marko. ------------------------------------------------------------------------ r6613 | inaam | 2010-02-09 20:23:09 +0200 (Tue, 09 Feb 2010) | 11 lines Changed paths: M /branches/5.1/buf/buf0buf.c M /branches/5.1/buf/buf0rea.c M /branches/5.1/include/buf0rea.h branches/5.1: Fix Bug #38901 InnoDB logs error repeatedly when trying to load page into buffer pool In buf_page_get_gen() if we are unable to read a page (because of corruption or some other reason) we keep on retrying. This fills up error log with millions of entries in no time and we'd eventually run out of disk space. This patch limits the number of attempts that we make (currently set to 100) and after that we abort with a message. rb://241 Approved by: Heikki ------------------------------------------------------------------------ ------------------------------------------------------------------------ r6635 | marko | 2010-02-10 11:07:05 +0200 (Wed, 10 Feb 2010) | 4 lines Changed paths: M /branches/zip/row/row0sel.c branches/zip: Clean up after r6559. Now that btr_pcur_open_with_no_init() is a macro, do not mix preprocessor directives in the macro invocation, because it is implementation-defined whether that is going to work. ------------------------------------------------------------------------ r6639 | marko | 2010-02-10 13:11:04 +0200 (Wed, 10 Feb 2010) | 1 line Changed paths: M /branches/zip/include/trx0rseg.h M /branches/zip/trx/trx0rseg.c branches/zip: trx_rseg_create(): Unused function, remove. ------------------------------------------------------------------------ r6660 | marko | 2010-02-11 11:21:11 +0200 (Thu, 11 Feb 2010) | 7 lines Changed paths: M /branches/zip/row/row0umod.c branches/zip: Clarify the rollback of INSERT by UPDATE of delete-marked rec. row_undo_mod_remove_clust_low(): Augment the function comment. row_undo_mod_remove_clust_low(), row_undo_mod_del_mark_or_remove_sec_low(), row_undo_mod_del_mark_or_remove_sec(), row_undo_mod_upd_del_sec(): Add ut_ad(node->rec_type == TRX_UNDO_UPD_DEL_REC); ------------------------------------------------------------------------ r6672 | marko | 2010-02-11 13:01:18 +0200 (Thu, 11 Feb 2010) | 1 line Changed paths: M /branches/zip/include/que0que.h M /branches/zip/include/que0que.ic M /branches/zip/row/row0umod.c branches/zip: Introduce thr_is_recv(). ------------------------------------------------------------------------ r6673 | marko | 2010-02-11 13:09:48 +0200 (Thu, 11 Feb 2010) | 9 lines Changed paths: M /branches/zip/btr/btr0cur.c M /branches/zip/include/trx0types.h M /branches/zip/row/row0umod.c branches/zip: Relax a debug assertion about a missing BLOB. (Issue #452) When rolling back an incomplete transaction in purge, tolerate missing BLOBs also in update undo, when undoing an INSERT by updating a delete-marked record, and the delete-marked record is no longer needed. Previously, we only tolerated missing BLOBs in insert undo. This merely fixes a debug assertion; the code performed correctly without UNIV_DEBUG. rb://249 approved by Sunny Bains. ------------------------------------------------------------------------ r6674 | inaam | 2010-02-11 17:54:44 +0200 (Thu, 11 Feb 2010) | 16 lines Changed paths: M /branches/zip/include/mem0mem.h M /branches/zip/include/mem0mem.ic M /branches/zip/mem/mem0mem.c branches/zip bug# 49535 This is a backport of r4924. mem_heap_get_size() scans all allocated blocks to calculate the total size of the heap. This patch introduces a new, total_size, field in mem_block_info_struct. This field is valid only for base block (i.e.: the first block allocated for the heap) and is set to ULINT_UNDEFINED in other blocks. This considerably improves the performance of redo scan during recovery. rb://108 issue#216 Approved by: Heikki ------------------------------------------------------------------------ r6675 | marko | 2010-02-11 22:41:11 +0200 (Thu, 11 Feb 2010) | 1 line Changed paths: M /branches/zip/row/row0umod.c branches/zip: Remove bogus debug assertions introduced in r6660. ------------------------------------------------------------------------ r6707 | inaam | 2010-02-12 19:22:35 +0200 (Fri, 12 Feb 2010) | 4 lines Changed paths: M /branches/zip/ChangeLog branches/zip ChangeLog entry for r6674. ------------------------------------------------------------------------ r6712 | marko | 2010-02-16 10:05:36 +0200 (Tue, 16 Feb 2010) | 2 lines Changed paths: M /branches/zip/trx/trx0trx.c branches/zip: trx_lists_init_at_db_start(): Assert that the kernel_mutex is held by the caller. ------------------------------------------------------------------------ r6713 | sunny | 2010-02-16 10:12:17 +0200 (Tue, 16 Feb 2010) | 7 lines Changed paths: M /branches/zip/include/trx0trx.h branches/zip: Change the bit fields back to ulint. Bit fields were causing problems with concurrency on SMP systems because of word packing issues. The number of trx_t's in a system is not sufficient enough to require that we try and save a few bytes in the data structure. See rb://255 for details. ------------------------------------------------------------------------ r6714 | sunny | 2010-02-16 10:12:25 +0200 (Tue, 16 Feb 2010) | 2 lines Changed paths: M /branches/zip/include/trx0trx.h branches/zip: Update the comments and fix the whitespace issues. See rb://255 Approved by: Marko ------------------------------------------------------------------------ r6715 | sunny | 2010-02-16 10:14:21 +0200 (Tue, 16 Feb 2010) | 1 line Changed paths: M /branches/zip/include/trx0trx.h branches/zip: Fix comment. Non functional change. ------------------------------------------------------------------------ r6717 | marko | 2010-02-16 14:53:20 +0200 (Tue, 16 Feb 2010) | 2 lines Changed paths: M /branches/zip/include/log0log.ic branches/zip: log_reserve_and_write_fast(): Correct a race condition in UNIV_LOG_LSN_DEBUG. This could have caused Issue #440. ------------------------------------------------------------------------ r6718 | marko | 2010-02-16 15:06:16 +0200 (Tue, 16 Feb 2010) | 1 line Changed paths: M /branches/zip/include/trx0trx.h branches/zip: Fix a comment. ------------------------------------------------------------------------ r6723 | marko | 2010-02-17 11:48:34 +0200 (Wed, 17 Feb 2010) | 3 lines Changed paths: M /branches/zip/lock/lock0lock.c branches/zip: lock_table_other_has_incompatible(): Return an incompatible lock or NULL instead of TRUE or FALSE. Approved by Sunny over IM. ------------------------------------------------------------------------ r6724 | marko | 2010-02-17 15:52:05 +0200 (Wed, 17 Feb 2010) | 11 lines Changed paths: M /branches/zip/os/os0file.c branches/zip: Merge revisions 6613:6669 from branches/5.1: ------------------------------------------------------------------------ r6669 | jyang | 2010-02-11 12:24:19 +0200 (Thu, 11 Feb 2010) | 7 lines branches/5.1: Fix bug #50691, AIX implementation of readdir_r causes InnoDB errors. readdir_r() returns an non-NULL value in the case of reaching the end of a directory. It should not be treated as an error return. rb://238 approved by Marko ------------------------------------------------------------------------ ------------------------------------------------------------------------ r6726 | marko | 2010-02-17 18:49:21 +0200 (Wed, 17 Feb 2010) | 3 lines Changed paths: M /branches/zip/include/fil0fil.h branches/zip: FIL_PAGE_FILE_FLUSH_LSN: Note that the field is only valid for the first page of each ibdata* file, not *.ibd files. Suggested by Heikki, in connection with the LSN warning noted in Issue #341. ------------------------------------------------------------------------ r6727 | marko | 2010-02-17 18:50:20 +0200 (Wed, 17 Feb 2010) | 2 lines Changed paths: M /branches/zip/fsp/fsp0fsp.c branches/zip: fsp_init_file_page_low(): Declare the page uninitialized for Valgrind. ------------------------------------------------------------------------ r6728 | marko | 2010-02-17 18:54:04 +0200 (Wed, 17 Feb 2010) | 3 lines Changed paths: M /branches/zip/fsp/fsp0fsp.c M /branches/zip/include/univ.i branches/zip: Remove UNIV_BASIC_LOG_DEBUG. This fixes the FILE_FLUSH_LSN printouts mentioned in Issue #341. Suggested by Heikki. ------------------------------------------------------------------------ r6740 | sunny | 2010-02-18 13:44:31 +0200 (Thu, 18 Feb 2010) | 6 lines Changed paths: M /branches/zip/lock/lock0lock.c branches/zip: Don't print the entire lock bit set if the block was not found in the buffer pool. Only print the bits that are set and that information is in the lock and not in the block. See rb://256 approved by Marko. ------------------------------------------------------------------------ r6749 | vasil | 2010-02-20 18:45:41 +0200 (Sat, 20 Feb 2010) | 5 lines Changed paths: M /branches/embedded-1.0/btr/btr0btr.c M /branches/embedded-1.0/btr/btr0cur.c M /branches/embedded-1.0/btr/btr0pcur.c M /branches/embedded-1.0/buf/buf0buf.c M /branches/embedded-1.0/buf/buf0flu.c M /branches/embedded-1.0/buf/buf0lru.c M /branches/embedded-1.0/dict/dict0boot.c M /branches/embedded-1.0/dict/dict0crea.c M /branches/embedded-1.0/dict/dict0dict.c M /branches/embedded-1.0/dict/dict0load.c M /branches/embedded-1.0/fil/fil0fil.c M /branches/embedded-1.0/fsp/fsp0fsp.c M /branches/embedded-1.0/ibuf/ibuf0ibuf.c M /branches/embedded-1.0/include/btr0btr.h M /branches/embedded-1.0/include/btr0cur.h M /branches/embedded-1.0/include/btr0pcur.h M /branches/embedded-1.0/include/btr0pcur.ic M /branches/embedded-1.0/include/buf0buf.h M /branches/embedded-1.0/include/buf0buf.ic M /branches/embedded-1.0/include/dict0boot.h M /branches/embedded-1.0/include/fil0fil.h M /branches/embedded-1.0/include/lock0lock.h M /branches/embedded-1.0/include/log0log.h M /branches/embedded-1.0/include/log0log.ic M /branches/embedded-1.0/include/log0recv.h M /branches/embedded-1.0/include/mem0dbg.h M /branches/embedded-1.0/include/mem0dbg.ic M /branches/embedded-1.0/include/mem0mem.h M /branches/embedded-1.0/include/mem0mem.ic M /branches/embedded-1.0/include/os0file.h M /branches/embedded-1.0/include/os0sync.h M /branches/embedded-1.0/include/os0sync.ic M /branches/embedded-1.0/include/os0thread.h M /branches/embedded-1.0/include/que0que.h M /branches/embedded-1.0/include/que0que.ic M /branches/embedded-1.0/include/row0merge.h M /branches/embedded-1.0/include/row0prebuilt.h M /branches/embedded-1.0/include/srv0srv.h M /branches/embedded-1.0/include/sync0sync.h M /branches/embedded-1.0/include/trx0rseg.h M /branches/embedded-1.0/include/trx0sys.h M /branches/embedded-1.0/include/trx0trx.h M /branches/embedded-1.0/include/trx0types.h M /branches/embedded-1.0/include/trx0undo.h M /branches/embedded-1.0/include/trx0xa.h M /branches/embedded-1.0/include/univ.i M /branches/embedded-1.0/include/ut0vec.h M /branches/embedded-1.0/include/ut0vec.ic M /branches/embedded-1.0/lock/lock0lock.c M /branches/embedded-1.0/log/log0log.c M /branches/embedded-1.0/log/log0recv.c M /branches/embedded-1.0/mem/mem0mem.c M /branches/embedded-1.0/os/os0file.c M /branches/embedded-1.0/os/os0thread.c M /branches/embedded-1.0/page/page0page.c M /branches/embedded-1.0/rem/rem0rec.c M /branches/embedded-1.0/row/row0ins.c M /branches/embedded-1.0/row/row0merge.c M /branches/embedded-1.0/row/row0prebuilt.c M /branches/embedded-1.0/row/row0sel.c M /branches/embedded-1.0/row/row0umod.c M /branches/embedded-1.0/row/row0undo.c M /branches/embedded-1.0/row/row0upd.c M /branches/embedded-1.0/srv/srv0srv.c M /branches/embedded-1.0/srv/srv0start.c M /branches/embedded-1.0/sync/sync0sync.c M /branches/embedded-1.0/trx/trx0sys.c M /branches/embedded-1.0/trx/trx0trx.c M /branches/embedded-1.0/trx/trx0undo.c M /branches/embedded-1.0/ut/ut0mem.c M /branches/innodb+/btr/btr0btr.c M /branches/innodb+/btr/btr0cur.c M /branches/innodb+/btr/btr0pcur.c M /branches/innodb+/buf/buf0buf.c M /branches/innodb+/buf/buf0lru.c M /branches/innodb+/dict/dict0crea.c M /branches/innodb+/dict/dict0dict.c M /branches/innodb+/dict/dict0load.c M /branches/innodb+/handler/ha_innodb.cc M /branches/innodb+/handler/ha_innodb.h M /branches/innodb+/handler/handler0alter.cc M /branches/innodb+/include/btr0btr.h M /branches/innodb+/include/btr0cur.h M /branches/innodb+/include/btr0pcur.h M /branches/innodb+/include/btr0pcur.ic M /branches/innodb+/include/buf0buf.h M /branches/innodb+/include/log0log.h M /branches/innodb+/include/mem0dbg.h M /branches/innodb+/include/mem0dbg.ic M /branches/innodb+/include/os0file.h M /branches/innodb+/include/row0mysql.h M /branches/innodb+/include/srv0srv.h M /branches/innodb+/include/sync0sync.h M /branches/innodb+/include/trx0trx.h M /branches/innodb+/lock/lock0lock.c M /branches/innodb+/log/log0log.c M /branches/innodb+/log/log0recv.c M /branches/innodb+/mem/mem0dbg.c M /branches/innodb+/os/os0file.c M /branches/innodb+/page/page0page.c M /branches/innodb+/row/row0ins.c M /branches/innodb+/row/row0mysql.c M /branches/innodb+/row/row0sel.c M /branches/innodb+/srv/srv0srv.c M /branches/innodb+/srv/srv0start.c M /branches/innodb+/sync/sync0sync.c M /branches/innodb+_metrics_table/btr/btr0btr.c M /branches/innodb+_metrics_table/buf/buf0buf.c M /branches/innodb+_metrics_table/buf/buf0flu.c M /branches/innodb+_metrics_table/dict/dict0crea.c M /branches/innodb+_metrics_table/dict/dict0dict.c M /branches/innodb+_metrics_table/dict/dict0load.c M /branches/innodb+_metrics_table/handler/ha_innodb.cc M /branches/innodb+_metrics_table/handler/ha_innodb.h M /branches/innodb+_metrics_table/handler/handler0alter.cc M /branches/innodb+_metrics_table/handler/i_s.cc M /branches/innodb+_metrics_table/handler/i_s.h M /branches/innodb+_metrics_table/include/mem0dbg.h M /branches/innodb+_metrics_table/include/mem0dbg.ic M /branches/innodb+_metrics_table/include/srv0mon.h M /branches/innodb+_metrics_table/include/srv0mon.ic M /branches/innodb+_metrics_table/include/srv0srv.h M /branches/innodb+_metrics_table/lock/lock0lock.c M /branches/innodb+_metrics_table/log/log0log.c M /branches/innodb+_metrics_table/mem/mem0dbg.c M /branches/innodb+_metrics_table/os/os0file.c M /branches/innodb+_metrics_table/page/page0zip.c M /branches/innodb+_metrics_table/row/row0mysql.c M /branches/innodb+_metrics_table/row/row0purge.c M /branches/innodb+_metrics_table/row/row0sel.c M /branches/innodb+_metrics_table/srv/srv0mon.c M /branches/innodb+_metrics_table/srv/srv0srv.c M /branches/innodb+_metrics_table/sync/sync0sync.c M /branches/innodb+_metrics_table/trx/trx0roll.c M /branches/innodb+_metrics_table/trx/trx0trx.c M /branches/innodb+_persistent_stats/btr/btr0btr.c M /branches/innodb+_persistent_stats/buf/buf0buf.c M /branches/innodb+_persistent_stats/data/data0type.c M /branches/innodb+_persistent_stats/dict/dict0boot.c M /branches/innodb+_persistent_stats/dict/dict0crea.c M /branches/innodb+_persistent_stats/dict/dict0dict.c M /branches/innodb+_persistent_stats/dict/dict0load.c M /branches/innodb+_persistent_stats/dict/dict0mem.c M /branches/innodb+_persistent_stats/fil/fil0fil.c M /branches/innodb+_persistent_stats/fsp/fsp0fsp.c M /branches/innodb+_persistent_stats/handler/ha_innodb.cc M /branches/innodb+_persistent_stats/handler/ha_innodb.h M /branches/innodb+_persistent_stats/handler/handler0alter.cc M /branches/innodb+_persistent_stats/ibuf/ibuf0ibuf.c M /branches/innodb+_persistent_stats/include/btr0pcur.h M /branches/innodb+_persistent_stats/include/btr0pcur.ic M /branches/innodb+_persistent_stats/include/db0err.h M /branches/innodb+_persistent_stats/include/dict0dict.h M /branches/innodb+_persistent_stats/include/dict0mem.h M /branches/innodb+_persistent_stats/include/ha_prototypes.h M /branches/innodb+_persistent_stats/include/lock0lock.h M /branches/innodb+_persistent_stats/include/log0log.h M /branches/innodb+_persistent_stats/include/log0recv.h M /branches/innodb+_persistent_stats/include/mem0dbg.h M /branches/innodb+_persistent_stats/include/mem0dbg.ic M /branches/innodb+_persistent_stats/include/os0file.h M /branches/innodb+_persistent_stats/include/pars0pars.h M /branches/innodb+_persistent_stats/include/srv0srv.h M /branches/innodb+_persistent_stats/include/sync0sync.h M /branches/innodb+_persistent_stats/include/trx0sys.h M /branches/innodb+_persistent_stats/include/trx0trx.h M /branches/innodb+_persistent_stats/include/ut0lst.h M /branches/innodb+_persistent_stats/include/ut0ut.h M /branches/innodb+_persistent_stats/lock/lock0lock.c M /branches/innodb+_persistent_stats/log/log0log.c M /branches/innodb+_persistent_stats/log/log0recv.c M /branches/innodb+_persistent_stats/mem/mem0dbg.c M /branches/innodb+_persistent_stats/os/os0file.c M /branches/innodb+_persistent_stats/page/page0page.c M /branches/innodb+_persistent_stats/pars/pars0pars.c M /branches/innodb+_persistent_stats/row/row0merge.c M /branches/innodb+_persistent_stats/row/row0mysql.c M /branches/innodb+_persistent_stats/row/row0sel.c M /branches/innodb+_persistent_stats/row/row0umod.c M /branches/innodb+_persistent_stats/row/row0upd.c M /branches/innodb+_persistent_stats/srv/srv0srv.c M /branches/innodb+_persistent_stats/srv/srv0start.c M /branches/innodb+_persistent_stats/sync/sync0sync.c M /branches/innodb+_persistent_stats/trx/trx0i_s.c M /branches/innodb+_persistent_stats/trx/trx0sys.c M /branches/innodb+_persistent_stats/trx/trx0trx.c M /branches/innodb+_persistent_stats/ut/ut0ut.c M /branches/innofts+/handler/ha_innodb.cc M /branches/innofts+/handler/i_s.cc M /branches/innofts+/handler/i_s.h M /branches/innofts+/include/fut0fut.h M /branches/performance_schema/btr/btr0sea.c M /branches/performance_schema/buf/buf0buf.c M /branches/performance_schema/dict/dict0dict.c M /branches/performance_schema/fil/fil0fil.c M /branches/performance_schema/handler/ha_innodb.cc M /branches/performance_schema/include/srv0srv.h M /branches/performance_schema/include/sync0rw.h M /branches/performance_schema/include/sync0rw.ic M /branches/performance_schema/include/sync0sync.h M /branches/performance_schema/include/sync0sync.ic M /branches/performance_schema/include/sync0types.h M /branches/performance_schema/log/log0log.c M /branches/performance_schema/srv/srv0srv.c M /branches/performance_schema/sync/sync0rw.c M /branches/performance_schema/trx/trx0i_s.c M /branches/performance_schema/trx/trx0purge.c M /branches/plugin-2.0/buf/buf0buf.c M /branches/plugin-2.0/buf/buf0lru.c M /branches/plugin-2.0/dict/dict0boot.c M /branches/plugin-2.0/dict/dict0crea.c M /branches/plugin-2.0/dict/dict0dict.c M /branches/plugin-2.0/dict/dict0load.c M /branches/plugin-2.0/dict/dict0mem.c M /branches/plugin-2.0/fil/fil0fil.c M /branches/plugin-2.0/fsp/fsp0fsp.c M /branches/plugin-2.0/handler/ha_innodb.cc M /branches/plugin-2.0/handler/ha_innodb.h M /branches/plugin-2.0/handler/handler0alter.cc M /branches/plugin-2.0/ibuf/ibuf0ibuf.c M /branches/plugin-2.0/include/dict0mem.h M /branches/plugin-2.0/include/ha_prototypes.h M /branches/plugin-2.0/include/lock0lock.h M /branches/plugin-2.0/include/log0log.h M /branches/plugin-2.0/include/log0recv.h M /branches/plugin-2.0/include/mem0dbg.h M /branches/plugin-2.0/include/mem0dbg.ic M /branches/plugin-2.0/include/os0file.h M /branches/plugin-2.0/include/row0mysql.h M /branches/plugin-2.0/include/srv0srv.h M /branches/plugin-2.0/include/sync0sync.h M /branches/plugin-2.0/include/trx0sys.h M /branches/plugin-2.0/include/trx0trx.h M /branches/plugin-2.0/lock/lock0lock.c M /branches/plugin-2.0/log/log0log.c M /branches/plugin-2.0/log/log0recv.c M /branches/plugin-2.0/mem/mem0dbg.c M /branches/plugin-2.0/os/os0file.c M /branches/plugin-2.0/page/page0page.c M /branches/plugin-2.0/row/row0merge.c M /branches/plugin-2.0/row/row0mysql.c M /branches/plugin-2.0/row/row0sel.c M /branches/plugin-2.0/row/row0umod.c M /branches/plugin-2.0/row/row0upd.c M /branches/plugin-2.0/srv/srv0srv.c M /branches/plugin-2.0/srv/srv0start.c M /branches/plugin-2.0/sync/sync0sync.c M /branches/plugin-2.0/trx/trx0i_s.c M /branches/plugin-2.0/trx/trx0sys.c M /branches/plugin-2.0/trx/trx0trx.c M /branches/zip/btr/btr0btr.c M /branches/zip/btr/btr0cur.c M /branches/zip/btr/btr0pcur.c M /branches/zip/buf/buf0buf.c M /branches/zip/buf/buf0lru.c M /branches/zip/dict/dict0boot.c M /branches/zip/dict/dict0crea.c M /branches/zip/dict/dict0dict.c M /branches/zip/dict/dict0load.c M /branches/zip/fsp/fsp0fsp.c M /branches/zip/handler/ha_innodb.cc M /branches/zip/handler/ha_innodb.h M /branches/zip/handler/handler0alter.cc M /branches/zip/include/btr0btr.h M /branches/zip/include/btr0cur.h M /branches/zip/include/btr0pcur.h M /branches/zip/include/btr0pcur.ic M /branches/zip/include/buf0buf.h M /branches/zip/include/dict0boot.h M /branches/zip/include/fil0fil.h M /branches/zip/include/log0log.h M /branches/zip/include/log0log.ic M /branches/zip/include/log0recv.h M /branches/zip/include/mem0dbg.h M /branches/zip/include/mem0dbg.ic M /branches/zip/include/mem0mem.h M /branches/zip/include/mem0mem.ic M /branches/zip/include/os0file.h M /branches/zip/include/que0que.h M /branches/zip/include/que0que.ic M /branches/zip/include/row0mysql.h M /branches/zip/include/srv0srv.h M /branches/zip/include/sync0sync.h M /branches/zip/include/trx0rseg.h M /branches/zip/include/trx0trx.h M /branches/zip/include/trx0types.h M /branches/zip/include/univ.i M /branches/zip/lock/lock0lock.c M /branches/zip/log/log0log.c M /branches/zip/log/log0recv.c M /branches/zip/mem/mem0dbg.c M /branches/zip/mem/mem0mem.c M /branches/zip/os/os0file.c M /branches/zip/page/page0page.c M /branches/zip/rem/rem0rec.c M /branches/zip/row/row0ins.c M /branches/zip/row/row0merge.c M /branches/zip/row/row0mysql.c M /branches/zip/row/row0sel.c M /branches/zip/row/row0umod.c M /branches/zip/srv/srv0srv.c M /branches/zip/srv/srv0start.c M /branches/zip/sync/sync0sync.c M /branches/zip/trx/trx0rseg.c M /branches/zip/trx/trx0trx.c Non-functional change: update copyright year to 2010 of the files that have been modified after 2010-01-01 according to svn. for f in $(svn log -v -r{2010-01-01}:HEAD |grep "^ M " |cut -b 16- |sort -u) ; do sed -i "" -E 's/(Copyright \(c\) [0-9]{4},) [0-9]{4}, (.*Innobase Oy.+All Rights Reserved)/\1 2010, \2/' $f ; done ------------------------------------------------------------------------ r6750 | marko | 2010-02-22 08:57:23 +0200 (Mon, 22 Feb 2010) | 2 lines Changed paths: M /branches/zip/include/row0sel.h M /branches/zip/row/row0sel.c branches/zip: row_fetch_store_uint4(): Remove unused function. This was added to trunk in r435. ------------------------------------------------------------------------ r6754 | marko | 2010-02-24 10:56:43 +0200 (Wed, 24 Feb 2010) | 17 lines Changed paths: M /branches/zip/row/row0merge.c branches/zip: Allocate the merge sort buffers from a heap, not stack. The merge sort can use up to 48KiB of buffers when merging blocks. That can cause a stack overflow, especially on 64-bit systems when not building with inlined functions. This was reported as Issue #462. row_merge_dup_report(): Allocate buf and offsets from a heap. row_merge_heap_create(): Allocate space for buf[3] too. Fix bogus sizeof arithmetics that happened to work, because sizeof(ulint)==sizeof(void*). row_merge_blocks(), row_merge_blocks_copy(): Allocate buf[3] from heap. row_merge_insert_index_tuples(): Allocate buf from graph_heap. rb://258 approved and tested by Sunny Bains ------------------------------------------------------------------------ r6767 | calvin | 2010-03-01 18:16:10 +0200 (Mon, 01 Mar 2010) | 3 lines Changed paths: M /branches/zip/srv/srv0srv.c branches/zip: fix bug#51587 Non-functional change. ------------------------------------------------------------------------ r6768 | vasil | 2010-03-02 18:20:48 +0200 (Tue, 02 Mar 2010) | 5 lines Changed paths: M /branches/zip/include/btr0btr.h M /branches/zip/include/btr0btr.ic branches/zip: Add a NOTE to the comment of btr_node_ptr_get_child_page_no() to prevent mysterious bugs. ------------------------------------------------------------------------ r6770 | marko | 2010-03-03 12:52:55 +0200 (Wed, 03 Mar 2010) | 12 lines Changed paths: M /branches/zip/handler/handler0alter.cc M /branches/zip/mysql-test/innodb-index.result M /branches/zip/mysql-test/innodb-index.test M /branches/zip/mysql-test/innodb.result M /branches/zip/mysql-test/innodb.test branches/zip: Disallow duplicate index name when creating an index. This should fix Mantis Issue #461. innodb.test, innodb.result, innodb-index.test, innodb-index.result: Adjust the test result and mention that the introduced restriction has been reported as MySQL Bug #51451. innobase_check_index_keys(): Add a parameter for the InnoDB table and check that no duplicate index name is added. Report errors by my_error() instead of sql_print_error(). rb://260 approved by Sunny Bains ------------------------------------------------------------------------ r6771 | marko | 2010-03-03 14:52:43 +0200 (Wed, 03 Mar 2010) | 1 line Changed paths: M /branches/zip/ChangeLog Document r6770. ------------------------------------------------------------------------ r6773 | marko | 2010-03-03 15:31:54 +0200 (Wed, 03 Mar 2010) | 2 lines Changed paths: M /branches/zip/row/row0row.c branches/zip: row_raw_format(): Silence a GCC 4.4.2 warning of possibly uninitialized variable format_in_hex. ------------------------------------------------------------------------
497 lines
18 KiB
C
497 lines
18 KiB
C
/*****************************************************************************
|
|
|
|
Copyright (c) 1997, 2010, Innobase Oy. All Rights Reserved.
|
|
|
|
This program is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*****************************************************************************/
|
|
|
|
/**************************************************//**
|
|
@file include/log0recv.h
|
|
Recovery
|
|
|
|
Created 9/20/1997 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
#ifndef log0recv_h
|
|
#define log0recv_h
|
|
|
|
#include "univ.i"
|
|
#include "ut0byte.h"
|
|
#include "buf0types.h"
|
|
#include "hash0hash.h"
|
|
#include "log0log.h"
|
|
|
|
#ifdef UNIV_HOTBACKUP
|
|
extern ibool recv_replay_file_ops;
|
|
|
|
/*******************************************************************//**
|
|
Reads the checkpoint info needed in hot backup.
|
|
@return TRUE if success */
|
|
UNIV_INTERN
|
|
ibool
|
|
recv_read_cp_info_for_backup(
|
|
/*=========================*/
|
|
const byte* hdr, /*!< in: buffer containing the log group
|
|
header */
|
|
ib_uint64_t* lsn, /*!< out: checkpoint lsn */
|
|
ulint* offset, /*!< out: checkpoint offset in the log group */
|
|
ulint* fsp_limit,/*!< out: fsp limit of space 0,
|
|
1000000000 if the database is running
|
|
with < version 3.23.50 of InnoDB */
|
|
ib_uint64_t* cp_no, /*!< out: checkpoint number */
|
|
ib_uint64_t* first_header_lsn);
|
|
/*!< out: lsn of of the start of the
|
|
first log file */
|
|
/*******************************************************************//**
|
|
Scans the log segment and n_bytes_scanned is set to the length of valid
|
|
log scanned. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_scan_log_seg_for_backup(
|
|
/*=========================*/
|
|
byte* buf, /*!< in: buffer containing log data */
|
|
ulint buf_len, /*!< in: data length in that buffer */
|
|
ib_uint64_t* scanned_lsn, /*!< in/out: lsn of buffer start,
|
|
we return scanned lsn */
|
|
ulint* scanned_checkpoint_no,
|
|
/*!< in/out: 4 lowest bytes of the
|
|
highest scanned checkpoint number so
|
|
far */
|
|
ulint* n_bytes_scanned);/*!< out: how much we were able to
|
|
scan, smaller than buf_len if log
|
|
data ended here */
|
|
#endif /* UNIV_HOTBACKUP */
|
|
/*******************************************************************//**
|
|
Returns TRUE if recovery is currently running.
|
|
@return recv_recovery_on */
|
|
UNIV_INLINE
|
|
ibool
|
|
recv_recovery_is_on(void);
|
|
/*=====================*/
|
|
#ifdef UNIV_LOG_ARCHIVE
|
|
/*******************************************************************//**
|
|
Returns TRUE if recovery from backup is currently running.
|
|
@return recv_recovery_from_backup_on */
|
|
UNIV_INLINE
|
|
ibool
|
|
recv_recovery_from_backup_is_on(void);
|
|
/*=================================*/
|
|
#endif /* UNIV_LOG_ARCHIVE */
|
|
/************************************************************************//**
|
|
Applies the hashed log records to the page, if the page lsn is less than the
|
|
lsn of a log record. This can be called when a buffer page has just been
|
|
read in, or also for a page already in the buffer pool. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_recover_page_func(
|
|
/*===================*/
|
|
#ifndef UNIV_HOTBACKUP
|
|
ibool just_read_in,
|
|
/*!< in: TRUE if the i/o handler calls
|
|
this for a freshly read page */
|
|
#endif /* !UNIV_HOTBACKUP */
|
|
buf_block_t* block); /*!< in/out: buffer block */
|
|
#ifndef UNIV_HOTBACKUP
|
|
/** Wrapper for recv_recover_page_func().
|
|
Applies the hashed log records to the page, if the page lsn is less than the
|
|
lsn of a log record. This can be called when a buffer page has just been
|
|
read in, or also for a page already in the buffer pool.
|
|
@param jri in: TRUE if just read in (the i/o handler calls this for
|
|
a freshly read page)
|
|
@param block in/out: the buffer block
|
|
*/
|
|
# define recv_recover_page(jri, block) recv_recover_page_func(jri, block)
|
|
#else /* !UNIV_HOTBACKUP */
|
|
/** Wrapper for recv_recover_page_func().
|
|
Applies the hashed log records to the page, if the page lsn is less than the
|
|
lsn of a log record. This can be called when a buffer page has just been
|
|
read in, or also for a page already in the buffer pool.
|
|
@param jri in: TRUE if just read in (the i/o handler calls this for
|
|
a freshly read page)
|
|
@param block in/out: the buffer block
|
|
*/
|
|
# define recv_recover_page(jri, block) recv_recover_page_func(block)
|
|
#endif /* !UNIV_HOTBACKUP */
|
|
/********************************************************//**
|
|
Recovers from a checkpoint. When this function returns, the database is able
|
|
to start processing of new user transactions, but the function
|
|
recv_recovery_from_checkpoint_finish should be called later to complete
|
|
the recovery and free the resources used in it.
|
|
@return error code or DB_SUCCESS */
|
|
UNIV_INTERN
|
|
ulint
|
|
recv_recovery_from_checkpoint_start_func(
|
|
/*=====================================*/
|
|
#ifdef UNIV_LOG_ARCHIVE
|
|
ulint type, /*!< in: LOG_CHECKPOINT or
|
|
LOG_ARCHIVE */
|
|
ib_uint64_t limit_lsn, /*!< in: recover up to this lsn
|
|
if possible */
|
|
#endif /* UNIV_LOG_ARCHIVE */
|
|
ib_uint64_t min_flushed_lsn,/*!< in: min flushed lsn from
|
|
data files */
|
|
ib_uint64_t max_flushed_lsn);/*!< in: max flushed lsn from
|
|
data files */
|
|
#ifdef UNIV_LOG_ARCHIVE
|
|
/** Wrapper for recv_recovery_from_checkpoint_start_func().
|
|
Recovers from a checkpoint. When this function returns, the database is able
|
|
to start processing of new user transactions, but the function
|
|
recv_recovery_from_checkpoint_finish should be called later to complete
|
|
the recovery and free the resources used in it.
|
|
@param type in: LOG_CHECKPOINT or LOG_ARCHIVE
|
|
@param lim in: recover up to this log sequence number if possible
|
|
@param min in: minimum flushed log sequence number from data files
|
|
@param max in: maximum flushed log sequence number from data files
|
|
@return error code or DB_SUCCESS */
|
|
# define recv_recovery_from_checkpoint_start(type,lim,min,max) \
|
|
recv_recovery_from_checkpoint_start_func(type,lim,min,max)
|
|
#else /* UNIV_LOG_ARCHIVE */
|
|
/** Wrapper for recv_recovery_from_checkpoint_start_func().
|
|
Recovers from a checkpoint. When this function returns, the database is able
|
|
to start processing of new user transactions, but the function
|
|
recv_recovery_from_checkpoint_finish should be called later to complete
|
|
the recovery and free the resources used in it.
|
|
@param type ignored: LOG_CHECKPOINT or LOG_ARCHIVE
|
|
@param lim ignored: recover up to this log sequence number if possible
|
|
@param min in: minimum flushed log sequence number from data files
|
|
@param max in: maximum flushed log sequence number from data files
|
|
@return error code or DB_SUCCESS */
|
|
# define recv_recovery_from_checkpoint_start(type,lim,min,max) \
|
|
recv_recovery_from_checkpoint_start_func(min,max)
|
|
#endif /* UNIV_LOG_ARCHIVE */
|
|
/********************************************************//**
|
|
Completes recovery from a checkpoint. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_recovery_from_checkpoint_finish(void);
|
|
/*======================================*/
|
|
/********************************************************//**
|
|
Initiates the rollback of active transactions. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_recovery_rollback_active(void);
|
|
/*===============================*/
|
|
/*******************************************************//**
|
|
Scans log from a buffer and stores new log data to the parsing buffer.
|
|
Parses and hashes the log records if new data found. Unless
|
|
UNIV_HOTBACKUP is defined, this function will apply log records
|
|
automatically when the hash table becomes full.
|
|
@return TRUE if limit_lsn has been reached, or not able to scan any
|
|
more in this log group */
|
|
UNIV_INTERN
|
|
ibool
|
|
recv_scan_log_recs(
|
|
/*===============*/
|
|
ulint available_memory,/*!< in: we let the hash table of recs
|
|
to grow to this size, at the maximum */
|
|
ibool store_to_hash, /*!< in: TRUE if the records should be
|
|
stored to the hash table; this is set
|
|
to FALSE if just debug checking is
|
|
needed */
|
|
const byte* buf, /*!< in: buffer containing a log
|
|
segment or garbage */
|
|
ulint len, /*!< in: buffer length */
|
|
ib_uint64_t start_lsn, /*!< in: buffer start lsn */
|
|
ib_uint64_t* contiguous_lsn, /*!< in/out: it is known that all log
|
|
groups contain contiguous log data up
|
|
to this lsn */
|
|
ib_uint64_t* group_scanned_lsn);/*!< out: scanning succeeded up to
|
|
this lsn */
|
|
/******************************************************//**
|
|
Resets the logs. The contents of log files will be lost! */
|
|
UNIV_INTERN
|
|
void
|
|
recv_reset_logs(
|
|
/*============*/
|
|
ib_uint64_t lsn, /*!< in: reset to this lsn
|
|
rounded up to be divisible by
|
|
OS_FILE_LOG_BLOCK_SIZE, after
|
|
which we add
|
|
LOG_BLOCK_HDR_SIZE */
|
|
#ifdef UNIV_LOG_ARCHIVE
|
|
ulint arch_log_no, /*!< in: next archived log file number */
|
|
#endif /* UNIV_LOG_ARCHIVE */
|
|
ibool new_logs_created);/*!< in: TRUE if resetting logs
|
|
is done at the log creation;
|
|
FALSE if it is done after
|
|
archive recovery */
|
|
#ifdef UNIV_HOTBACKUP
|
|
/******************************************************//**
|
|
Creates new log files after a backup has been restored. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_reset_log_files_for_backup(
|
|
/*============================*/
|
|
const char* log_dir, /*!< in: log file directory path */
|
|
ulint n_log_files, /*!< in: number of log files */
|
|
ulint log_file_size, /*!< in: log file size */
|
|
ib_uint64_t lsn); /*!< in: new start lsn, must be
|
|
divisible by OS_FILE_LOG_BLOCK_SIZE */
|
|
#endif /* UNIV_HOTBACKUP */
|
|
/********************************************************//**
|
|
Creates the recovery system. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_sys_create(void);
|
|
/*=================*/
|
|
/**********************************************************//**
|
|
Release recovery system mutexes. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_sys_close(void);
|
|
/*================*/
|
|
/********************************************************//**
|
|
Frees the recovery system memory. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_sys_mem_free(void);
|
|
/*===================*/
|
|
/********************************************************//**
|
|
Inits the recovery system for a recovery operation. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_sys_init(
|
|
/*==========*/
|
|
ulint available_memory); /*!< in: available memory in bytes */
|
|
#ifndef UNIV_HOTBACKUP
|
|
/********************************************************//**
|
|
Reset the state of the recovery system variables. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_sys_var_init(void);
|
|
/*===================*/
|
|
#endif /* !UNIV_HOTBACKUP */
|
|
/*******************************************************************//**
|
|
Empties the hash table of stored log records, applying them to appropriate
|
|
pages. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_apply_hashed_log_recs(
|
|
/*=======================*/
|
|
ibool allow_ibuf); /*!< in: if TRUE, also ibuf operations are
|
|
allowed during the application; if FALSE,
|
|
no ibuf operations are allowed, and after
|
|
the application all file pages are flushed to
|
|
disk and invalidated in buffer pool: this
|
|
alternative means that no new log records
|
|
can be generated during the application */
|
|
#ifdef UNIV_HOTBACKUP
|
|
/*******************************************************************//**
|
|
Applies log records in the hash table to a backup. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_apply_log_recs_for_backup(void);
|
|
/*================================*/
|
|
#endif
|
|
#ifdef UNIV_LOG_ARCHIVE
|
|
/********************************************************//**
|
|
Recovers from archived log files, and also from log files, if they exist.
|
|
@return error code or DB_SUCCESS */
|
|
UNIV_INTERN
|
|
ulint
|
|
recv_recovery_from_archive_start(
|
|
/*=============================*/
|
|
ib_uint64_t min_flushed_lsn,/*!< in: min flushed lsn field from the
|
|
data files */
|
|
ib_uint64_t limit_lsn, /*!< in: recover up to this lsn if
|
|
possible */
|
|
ulint first_log_no); /*!< in: number of the first archived
|
|
log file to use in the recovery; the
|
|
file will be searched from
|
|
INNOBASE_LOG_ARCH_DIR specified in
|
|
server config file */
|
|
/********************************************************//**
|
|
Completes recovery from archive. */
|
|
UNIV_INTERN
|
|
void
|
|
recv_recovery_from_archive_finish(void);
|
|
/*===================================*/
|
|
#endif /* UNIV_LOG_ARCHIVE */
|
|
|
|
/** Block of log record data */
|
|
typedef struct recv_data_struct recv_data_t;
|
|
/** Block of log record data */
|
|
struct recv_data_struct{
|
|
recv_data_t* next; /*!< pointer to the next block or NULL */
|
|
/*!< the log record data is stored physically
|
|
immediately after this struct, max amount
|
|
RECV_DATA_BLOCK_SIZE bytes of it */
|
|
};
|
|
|
|
/** Stored log record struct */
|
|
typedef struct recv_struct recv_t;
|
|
/** Stored log record struct */
|
|
struct recv_struct{
|
|
byte type; /*!< log record type */
|
|
ulint len; /*!< log record body length in bytes */
|
|
recv_data_t* data; /*!< chain of blocks containing the log record
|
|
body */
|
|
ib_uint64_t start_lsn;/*!< start lsn of the log segment written by
|
|
the mtr which generated this log record: NOTE
|
|
that this is not necessarily the start lsn of
|
|
this log record */
|
|
ib_uint64_t end_lsn;/*!< end lsn of the log segment written by
|
|
the mtr which generated this log record: NOTE
|
|
that this is not necessarily the end lsn of
|
|
this log record */
|
|
UT_LIST_NODE_T(recv_t)
|
|
rec_list;/*!< list of log records for this page */
|
|
};
|
|
|
|
/** States of recv_addr_struct */
|
|
enum recv_addr_state {
|
|
/** not yet processed */
|
|
RECV_NOT_PROCESSED,
|
|
/** page is being read */
|
|
RECV_BEING_READ,
|
|
/** log records are being applied on the page */
|
|
RECV_BEING_PROCESSED,
|
|
/** log records have been applied on the page, or they have
|
|
been discarded because the tablespace does not exist */
|
|
RECV_PROCESSED
|
|
};
|
|
|
|
/** Hashed page file address struct */
|
|
typedef struct recv_addr_struct recv_addr_t;
|
|
/** Hashed page file address struct */
|
|
struct recv_addr_struct{
|
|
enum recv_addr_state state;
|
|
/*!< recovery state of the page */
|
|
ulint space; /*!< space id */
|
|
ulint page_no;/*!< page number */
|
|
UT_LIST_BASE_NODE_T(recv_t)
|
|
rec_list;/*!< list of log records for this page */
|
|
hash_node_t addr_hash;/*!< hash node in the hash bucket chain */
|
|
};
|
|
|
|
/** Recovery system data structure */
|
|
typedef struct recv_sys_struct recv_sys_t;
|
|
/** Recovery system data structure */
|
|
struct recv_sys_struct{
|
|
#ifndef UNIV_HOTBACKUP
|
|
mutex_t mutex; /*!< mutex protecting the fields apply_log_recs,
|
|
n_addrs, and the state field in each recv_addr
|
|
struct */
|
|
#endif /* !UNIV_HOTBACKUP */
|
|
ibool apply_log_recs;
|
|
/*!< this is TRUE when log rec application to
|
|
pages is allowed; this flag tells the
|
|
i/o-handler if it should do log record
|
|
application */
|
|
ibool apply_batch_on;
|
|
/*!< this is TRUE when a log rec application
|
|
batch is running */
|
|
ib_uint64_t lsn; /*!< log sequence number */
|
|
ulint last_log_buf_size;
|
|
/*!< size of the log buffer when the database
|
|
last time wrote to the log */
|
|
byte* last_block;
|
|
/*!< possible incomplete last recovered log
|
|
block */
|
|
byte* last_block_buf_start;
|
|
/*!< the nonaligned start address of the
|
|
preceding buffer */
|
|
byte* buf; /*!< buffer for parsing log records */
|
|
ulint len; /*!< amount of data in buf */
|
|
ib_uint64_t parse_start_lsn;
|
|
/*!< this is the lsn from which we were able to
|
|
start parsing log records and adding them to
|
|
the hash table; zero if a suitable
|
|
start point not found yet */
|
|
ib_uint64_t scanned_lsn;
|
|
/*!< the log data has been scanned up to this
|
|
lsn */
|
|
ulint scanned_checkpoint_no;
|
|
/*!< the log data has been scanned up to this
|
|
checkpoint number (lowest 4 bytes) */
|
|
ulint recovered_offset;
|
|
/*!< start offset of non-parsed log records in
|
|
buf */
|
|
ib_uint64_t recovered_lsn;
|
|
/*!< the log records have been parsed up to
|
|
this lsn */
|
|
ib_uint64_t limit_lsn;/*!< recovery should be made at most
|
|
up to this lsn */
|
|
ibool found_corrupt_log;
|
|
/*!< this is set to TRUE if we during log
|
|
scan find a corrupt log block, or a corrupt
|
|
log record, or there is a log parsing
|
|
buffer overflow */
|
|
#ifdef UNIV_LOG_ARCHIVE
|
|
log_group_t* archive_group;
|
|
/*!< in archive recovery: the log group whose
|
|
archive is read */
|
|
#endif /* !UNIV_LOG_ARCHIVE */
|
|
mem_heap_t* heap; /*!< memory heap of log records and file
|
|
addresses*/
|
|
hash_table_t* addr_hash;/*!< hash table of file addresses of pages */
|
|
ulint n_addrs;/*!< number of not processed hashed file
|
|
addresses in the hash table */
|
|
};
|
|
|
|
/** The recovery system */
|
|
extern recv_sys_t* recv_sys;
|
|
|
|
/** TRUE when applying redo log records during crash recovery; FALSE
|
|
otherwise. Note that this is FALSE while a background thread is
|
|
rolling back incomplete transactions. */
|
|
extern ibool recv_recovery_on;
|
|
/** If the following is TRUE, the buffer pool file pages must be invalidated
|
|
after recovery and no ibuf operations are allowed; this becomes TRUE if
|
|
the log record hash table becomes too full, and log records must be merged
|
|
to file pages already before the recovery is finished: in this case no
|
|
ibuf operations are allowed, as they could modify the pages read in the
|
|
buffer pool before the pages have been recovered to the up-to-date state.
|
|
|
|
TRUE means that recovery is running and no operations on the log files
|
|
are allowed yet: the variable name is misleading. */
|
|
extern ibool recv_no_ibuf_operations;
|
|
/** TRUE when recv_init_crash_recovery() has been called. */
|
|
extern ibool recv_needed_recovery;
|
|
#ifdef UNIV_DEBUG
|
|
/** TRUE if writing to the redo log (mtr_commit) is forbidden.
|
|
Protected by log_sys->mutex. */
|
|
extern ibool recv_no_log_write;
|
|
#endif /* UNIV_DEBUG */
|
|
|
|
/** TRUE if buf_page_is_corrupted() should check if the log sequence
|
|
number (FIL_PAGE_LSN) is in the future. Initially FALSE, and set by
|
|
recv_recovery_from_checkpoint_start_func(). */
|
|
extern ibool recv_lsn_checks_on;
|
|
#ifdef UNIV_HOTBACKUP
|
|
/** TRUE when the redo log is being backed up */
|
|
extern ibool recv_is_making_a_backup;
|
|
#endif /* UNIV_HOTBACKUP */
|
|
/** Maximum page number encountered in the redo log */
|
|
extern ulint recv_max_parsed_page_no;
|
|
|
|
/** Size of the parsing buffer; it must accommodate RECV_SCAN_SIZE many
|
|
times! */
|
|
#define RECV_PARSING_BUF_SIZE (2 * 1024 * 1024)
|
|
|
|
/** Size of block reads when the log groups are scanned forward to do a
|
|
roll-forward */
|
|
#define RECV_SCAN_SIZE (4 * UNIV_PAGE_SIZE)
|
|
|
|
/** This many frames must be left free in the buffer pool when we scan
|
|
the log and store the scanned log records in the buffer pool: we will
|
|
use these free frames to read in pages when we start applying the
|
|
log records to the database. */
|
|
extern ulint recv_n_pool_free_frames;
|
|
|
|
#ifndef UNIV_NONINL
|
|
#include "log0recv.ic"
|
|
#endif
|
|
|
|
#endif
|