mariadb/include/log0recv.h
marko 227df33ed6 branches/innodb+: Merge revisions 6560:6773 from branches/zip:
------------------------------------------------------------------------
  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.
  ------------------------------------------------------------------------
2010-03-04 10:15:07 +00:00

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