Commit graph

104 commits

Author SHA1 Message Date
marko
36c9bbc734 branches/innodb+: buf_get_volume_buffered(): When estimating the number of
records on a page, count each unique buffered record at most once.

ibuf_get_volume_buffered_hash(): New function, for inserting a hashed record
into a bit array.

ibuf_get_volume_buffered_count(): New function, refactored from
ibuf_get_volume_buffered(), for counting the unique records buffered for
the page.

ibuf_get_volume_buffered(): Define hash_bitmap, a bit array for identifying
duplicate records.  Hash collisions do not hurt correctness, only performance.
If the number of records on the page is estimated as 0, deletes will not be
buffered.

This patch is just for the record, as is rb://44.  In the tests run so far,
the function ibuf_get_volume_buffered() always seems to estimate the number
of records as 0, disabling all buffered deletes.
2008-11-05 10:25:07 +00:00
marko
8d4985420c branches/innodb+: ibuf0ibuf.c: Add a compile-time check for IBUF_REC_INFO_SIZE.
ibuf_get_volume_buffered(): Correct the grammar of the function comment.
2008-11-05 08:28:20 +00:00
marko
957f14fde2 branches/innodb+: Merge revisions 2862:2867 from branches/zip:
------------------------------------------------------------------------
  r2866 | marko | 2008-10-23 23:25:43 +0300 (Thu, 23 Oct 2008) | 4 lines

  branches/zip: ibuf_delete_rec(): When the cursor to the insert buffer record
  cannot be restored, do not complain if the tablespace does not exist.
  This fixes Issue #88.
  ------------------------------------------------------------------------
  r2867 | marko | 2008-10-24 10:24:17 +0300 (Fri, 24 Oct 2008) | 2 lines

  branches/zip: ChangeLog: Document r2763, r2794, r2683, r2799, r2809, r2866.
  ------------------------------------------------------------------------
2008-10-24 06:51:35 +00:00
marko
e1fc8d04c3 branches/innodb+: ibuf_get_volume_buffered(): Do not count insert operations
when estimating n_recs.  This should finally fix Issue #82.
2008-10-23 11:47:17 +00:00
marko
a3d14f23d7 branches/innodb+: Refuse to buffer deletes if that could lead to B-tree
pages becoming empty.  Remove work-arounds for empty pages.  This fixes
Issue #82.

ibuf_get_volume_buffered(): Add the output parameter n_recs, for returning
the minimum number of records on the page.

ibuf_insert_low(): Refuse to buffer IBUF_OP_DELETE if the page could
become empty.

btr_page_get_father_node_ptr(): Remove the work-around for the page
being empty.

page_zip_dir_delete(): Revert to the version from branches/zip.
Always invoke page_zip_clear_rec().
2008-10-23 10:22:46 +00:00
marko
f557ff3ea9 branches/innodb+: Merge revisions 2835:2862 from branches/zip:
------------------------------------------------------------------------
  r2838 | vasil | 2008-10-21 12:49:27 +0300 (Tue, 21 Oct 2008) | 61 lines

  branches/zip:

  Merge 2744:2837 from branches/5.1 (skipping r2782 and r2826):

    ------------------------------------------------------------------------
    r2832 | vasil | 2008-10-21 10:08:30 +0300 (Tue, 21 Oct 2008) | 10 lines
    Changed paths:
       M /branches/5.1/handler/ha_innodb.cc

    branches/5.1:

    In ha_innobase::info():

    Replace sql_print_warning() which prints to mysqld error log with
    push_warning_printf() which sends the error message to the client.

    Suggested by: Marko, Sunny, Michael
    Objected by:  Inaam

    ------------------------------------------------------------------------
    r2837 | vasil | 2008-10-21 12:07:44 +0300 (Tue, 21 Oct 2008) | 32 lines
    Changed paths:
       M /branches/5.1/mysql-test/innodb-semi-consistent.result
       M /branches/5.1/mysql-test/innodb-semi-consistent.test
       M /branches/5.1/mysql-test/innodb.result
       M /branches/5.1/mysql-test/innodb.test

    branches/5.1:

    Merge a change from MySQL (this fixes the failing innodb and
    innodb-semi-consistent tests):

      revno: 2757
      committer: Georgi Kodinov <kgeorge@mysql.com>
      branch nick: B39812-5.1-5.1.29-rc
      timestamp: Fri 2008-10-03 15:24:19 +0300
      message:
        Bug #39812: Make statement replication default for 5.1 (to match 5.0)

        Make STMT replication default for 5.1.
        Add a default of MIXED into the config files
        Fix the tests that needed MIXED replication mode.
      modified:
        mysql-test/include/mix1.inc
        mysql-test/r/innodb-semi-consistent.result
        mysql-test/r/innodb.result
        mysql-test/r/innodb_mysql.result
        mysql-test/r/tx_isolation_func.result
        mysql-test/t/innodb-semi-consistent.test
        mysql-test/t/innodb.test
        mysql-test/t/tx_isolation_func.test
        sql/mysqld.cc
        support-files/my-huge.cnf.sh
        support-files/my-innodb-heavy-4G.cnf.sh
        support-files/my-large.cnf.sh
        support-files/my-medium.cnf.sh
        support-files/my-small.cnf.sh


    ------------------------------------------------------------------------

  ------------------------------------------------------------------------
  r2847 | marko | 2008-10-22 10:07:37 +0300 (Wed, 22 Oct 2008) | 6 lines

  branches/zip: page_zip_rec_needs_ext(): Fix a bug that was introduced
  in the fix of Mantis issue #73.  With key_block_size=16, we will also
  have to check the available space on the uncompressed page.
  Otherwise, the clustered index record can be almost 16 kilobytes in
  size, and the undo log record will not fit.
  ------------------------------------------------------------------------
  r2850 | marko | 2008-10-22 13:52:12 +0300 (Wed, 22 Oct 2008) | 2 lines

  branches/zip: ibuf_insert_to_index_page(): Discard the local variable block.
  page_cur is always positioned on block, the function parameter.
  ------------------------------------------------------------------------
  r2853 | sunny | 2008-10-23 01:52:09 +0300 (Thu, 23 Oct 2008) | 2 lines
  branches/zip: Add missing UNIV_INTERN.
  ------------------------------------------------------------------------
  r2855 | sunny | 2008-10-23 09:29:46 +0300 (Thu, 23 Oct 2008) | 36 lines

  branches/zip:

  Merge revisions 2837:2852 from branches/5.1:

    ------------------------------------------------------------------------
    r2849 | sunny | 2008-10-22 12:01:18 +0300 (Wed, 22 Oct 2008) | 8 lines
    Changed paths:
       M /branches/5.1/handler/ha_innodb.cc
       M /branches/5.1/include/row0mysql.h
       M /branches/5.1/row/row0mysql.c

    branches/5.1: Return the actual error code encountered when allocating
    a new autoinc value. The change in behavior (bug) was introduced in 5.1.22
    when we introduced the new AUTOINC locking model.

    rb://31

    Bug#40224 New AUTOINC changes mask reporting of deadlock/timeout errors

    ------------------------------------------------------------------------
    r2852 | sunny | 2008-10-23 01:42:24 +0300 (Thu, 23 Oct 2008) | 9 lines
    Changed paths:
       M /branches/5.1/handler/ha_innodb.cc
       M /branches/5.1/handler/ha_innodb.h

    branches/5.1: Backport r2724 from branches/zip

    Check column value against the col max value before updating the table's
    global autoinc counter value. This is part of simplifying the AUTOINC
    sub-system. We extract the type info from MySQL data structures at runtime.

    This fixes Bug#37788 InnoDB Plugin: AUTO_INCREMENT wrong for compressed tables

    ------------------------------------------------------------------------

  ------------------------------------------------------------------------
  r2856 | sunny | 2008-10-23 10:07:05 +0300 (Thu, 23 Oct 2008) | 1 line

  Reverting test file changes from r2855
  ------------------------------------------------------------------------
  r2857 | sunny | 2008-10-23 10:24:33 +0300 (Thu, 23 Oct 2008) | 30 lines

  branches/zip:

  Merge revisions 2852:2854 from branches/5.1:

    ------------------------------------------------------------------------
    r2854 | sunny | 2008-10-23 08:30:32 +0300 (Thu, 23 Oct 2008) | 13 lines
    Changed paths:
       M /branches/5.1/dict/dict0dict.c
       M /branches/5.1/dict/dict0mem.c
       M /branches/5.1/handler/ha_innodb.cc
       M /branches/5.1/handler/ha_innodb.h
       M /branches/5.1/include/dict0dict.h
       M /branches/5.1/include/dict0mem.h
       M /branches/5.1/row/row0mysql.c

    branches/5.1: Backport changes from branches/zip r2725

    Simplify the autoinc initialization code. This removes the
    non-determinism related to reading the table's autoinc value for the first
    time. This change has also reduced the sizeof dict_table_t by sizeof(ibool)
    bytes because we don't need the dict_table_t::autoinc_inited field anymore.

    Bug#39830 Table autoinc value not updated on first insert.
    Bug#35498 Cannot get table test/table1 auto-inccounter value in ::info
    Bug#36411 Failed to read auto-increment value from storage engine" in 5.1.24 auto-inc
    rb://16


    ------------------------------------------------------------------------

  ------------------------------------------------------------------------
  r2858 | vasil | 2008-10-23 11:33:43 +0300 (Thu, 23 Oct 2008) | 4 lines

  branches/zip:

  Update the ChangeLog
  ------------------------------------------------------------------------
  r2861 | marko | 2008-10-23 12:27:15 +0300 (Thu, 23 Oct 2008) | 24 lines

  branches/zip: Clean up the file format stamping.

  trx_sys_file_format_max_upgrade(): Rename from
  trx_sys_file_format_max_update().  Improve the documentation.  Add a
  const qualifier to the parameter "name".  Replace the parameter
  "flags" with "format_id", because this function should deal with file
  format identifiers, not with table flags.

  trx_sys_file_format_max_write(), trx_sys_file_format_max_set(): Add a
  const qualifier to the parameter "name".

  ha_innodb.cc: Correct the spelling in some comments: "side effect".
  Remove redundant prototypes for some static callback functions.

  innodb_file_format_name_update(), innodb_file_format_check_update():
  Correct the function signature.  Use appropriate pointer type conversions.

  MYSQL_SYSVAR_STR(file_format), MYSQL_SYSVAR_STR(file_format_check):
  Remove the type conversions from the callback function pointers.  When
  the function signatures match, no type conversion is needed.  The type
  conversions would only prevent compilation warnings for any mismatch.

  Approved by Sunny in rb://25.
  ------------------------------------------------------------------------
  r2862 | marko | 2008-10-23 12:37:42 +0300 (Thu, 23 Oct 2008) | 8 lines

  branches/zip: Non-functional changes:

  ibuf_get_volume_buffered(): Declare with static linkage.
  This function is private to ibuf0ibuf.c.

  btr_cur_pessimistic_delete(): Use the cached result of
  btr_cur_get_index(cursor).
  ------------------------------------------------------------------------
2008-10-23 10:03:20 +00:00
marko
c829e1c497 branches/innodb+: ibuf_insert_to_index_page(): When the page is empty, look
at the first deleted record when checking the number of fields.
This fixes part of Issue #82.
2008-10-22 10:00:01 +00:00
marko
c25e0221bb branches/innodb+: Merge revisions 2799:2835 from branches/zip:
------------------------------------------------------------------------
  r2809 | marko | 2008-10-16 09:41:13 +0300 (Thu, 16 Oct 2008) | 18 lines

  branches/zip: Skip the undo log size check on REDUNDANT and COMPACT tables.

  In ROW_FORMAT=DYNAMIC and ROW_FORMAT=COMPRESSED, column prefix indexes
  require that prefixes of externally stored columns be written to the
  undo log. This may make the undo log record bigger than the record on
  the B-tree page.  The maximum size of an undo log record is the page
  size.  That must be checked for, in dict_index_add_to_cache().

  dict_index_add_to_cache(): Skip the undo log size check for REDUNDANT
  and COMPACT tables. These tables store prefixes of externally stored
  columns locally within the clustered index record.  There are no special
  considerations for the undo log record size.

  innodb-index.test: Ensure that the check exists for ROW_FORMAT=DYNAMIC,
  but not for ROW_FORMAT=COMPACT.

  This fixes issue #99.  rb://28 approved by Sunny.
  ------------------------------------------------------------------------
  r2810 | vasil | 2008-10-16 19:57:58 +0300 (Thu, 16 Oct 2008) | 12 lines

  branches/zip:

  Fix Mantis issue#61:

  In row_undo_ins_parse_undo_rec(): if we find that a table has no indexes
  (dict_table_get_first_index() returns NULL) do not try to call
  trx_undo_rec_get_row_ref() with a NULL pointer because that would lead to
  a crash. Instead, print a warning and set node->table to NULL just like
  it is done if the .ibd file is missing.

  Approved by:    Heikki (via IM)
  ------------------------------------------------------------------------
  r2824 | marko | 2008-10-20 09:58:01 +0300 (Mon, 20 Oct 2008) | 2 lines

  branches/zip: rec_convert_dtuple_to_rec_comp(): Relax a too tight assertion.
  Spotted by Sunny.
  ------------------------------------------------------------------------
  r2825 | vasil | 2008-10-20 13:41:04 +0300 (Mon, 20 Oct 2008) | 6 lines

  branches/zip:

  Print the table name via ut_print_name() and add two spaces before InnoDB.

  Suggested by:   Marko
  ------------------------------------------------------------------------
  r2833 | marko | 2008-10-21 10:16:45 +0300 (Tue, 21 Oct 2008) | 2 lines

  branches/zip: ibuf_insert_low(): Avoid unnecessarily
  acquiring and releasing ibuf_mutex.
  ------------------------------------------------------------------------
  r2834 | marko | 2008-10-21 10:18:57 +0300 (Tue, 21 Oct 2008) | 1 line

  branches/zip: ibuf_delete_rec(): Add debug assertions suggested by Heikki.
  ------------------------------------------------------------------------
  r2835 | marko | 2008-10-21 11:04:06 +0300 (Tue, 21 Oct 2008) | 1 line

  branches/zip: ibuf_insert_low(): Simplify a comparison.
  ------------------------------------------------------------------------
2008-10-21 07:30:53 +00:00
marko
7c2257c673 branches/innodb+: Adjust decorative comment. 2008-10-02 05:20:32 +00:00
marko
019174152b branches/innodb+: ibuf_set_entry_counter(): Return FALSE if trying to
insert after a record that has no counter field.

ibuf_get_entry_counter_low(): Return ULINT_UNDEFINED if the record
lacks a counter.
2008-10-01 11:14:03 +00:00
marko
db1cb1066d branches/innodb+: ibuf_rec_get_size(): Correct some bugs. rb://17
This function was created when the delete buffering code was merged from
branches/fts in r2324.

ibuf_rec_get_size(): Rename the parameter new_format to pre_4_1.  Use
the correct offsets and accessors for both values of pre_4_1.

ibuf_rec_get_info(): Note that the record must be in 4.1 or later format.
2008-09-30 11:33:33 +00:00
marko
2cf9ce26fc branches/innodb+: Minor cleanup.
ibuf_set_entry_counter(): Turn a ut_ad() assertion into ut_a().

ibuf_set_del_mark(), ibuf_delete(): Add const qualifiers to read-only
parameters.
2008-09-30 10:29:23 +00:00
marko
29c7db7168 branches/innodb+: Non-functional changes:
ibuf_get_entry_counter_low(): Rename from ibuf_set_entry_counter_low().
This function only reads the counter.  Add const qualifier to the
rec parameter.

ibuf_set_entry_counter(): Document the entry parameter as in/out.
2008-09-30 07:18:11 +00:00
marko
829ab89185 branches/innodb+: Remove an #ifdef around buf_block_dbg_add_level().
This could have been made as part of the merge in r2661.
2008-09-29 11:15:57 +00:00
marko
160ea61e63 branches/innodb+: Minor cleanup.
ibuf_rec_get_info(): Eliminate the local variable "mod".  Use switch-case
instead of if-else if-else.

ibuf_rec_get_op_type(), ibuf_add_ops(), ibuf_print_ops():
Add const qualifiers to read-only parameters.

ibuf_rec_get_volume(): Remove empty line at end of block.
2008-09-26 10:47:17 +00:00
marko
30443c5592 branches/innodb+: Merge revisions 2660:2676 from branches/zip. 2008-09-24 09:45:19 +00:00
marko
1c448425af branches/innodb+: ibuf_delete(): Correctly set the free bits in the
insert buffer bitmap.
2008-09-24 09:19:24 +00:00
marko
12d060fb21 branches/innodb+: Non-functional change:
ibuf_rec_get_counter(): Rename from ibuf_rec_get_fake_counter().  There is
nothing fake about the counter.  Also add const qualifiers to the pointers.
2008-09-22 10:38:51 +00:00
marko
8af53f3c3a branches/innodb+: Non-functional change: Rename all functions related to the
buf_pool->watch_ fields to start with the common prefix buf_pool_watch,
so that they can be searched easily:

buf_pool_watch_set(): Renamed from buf_pool_add_watch().  The "add" was
misleading, because only one watch can be active at a time.

buf_pool_watch_clear(): Renamed from buf_pool_remove_watch().

buf_pool_watch_occurred(): Renamed from buf_pool_watch_happened().
2008-09-22 09:18:14 +00:00
marko
19ddd9a58c branches/innodb+: ibuf_print(): Add a missing local variable that has been
missing since the code was merged in r2324 from branches/fts.
2008-09-22 09:10:38 +00:00
marko
f248e92092 branches/innodb+: Correct an error introduced in r736 of branches/fts
and merged in r2324:

ibuf_page(): Assert that recv_no_ibuf_operations == FALSE.

fil_io(): Check !recv_no_ibuf_operations before calling ibuf_page().
2008-09-22 08:05:17 +00:00
marko
c5fa1c20be branches/innodb+: Merge 2637:2660 from branches/zip. 2008-09-22 07:57:34 +00:00
marko
fd3df4d0a4 branches/innodb+: Undo the partial introduction of UNIV_UNUSED, to reduce
differences from branches/zip.  The __attribute__((unused)) should
work on all platforms.  When compiled with something else than GCC,
MySQL supposedly does #define __attribute__(x) /* empty */
so that the attributes will be ignored.
2008-09-18 08:56:13 +00:00
marko
f50e5536ad branches/innodb+: Add missing UNIV_INTERN linkage specifiers. 2008-09-18 08:44:32 +00:00
marko
7dc3e545c3 branches/innodb+: Revert some changes that make the code differ
from branches/zip.

btr_cur_optimistic_delete(): Split a too long line in the way it is
split in branches/zip.

buf_page_get_gen(): Add missing space in the function comment.

buf_print_io(): Restoer a removed space to the printout.

univ.i: Remove C++-style (or C99-style) comments.

buf0buf.h: Undo the white-space changes to the wrapper macros of
buf_page_get_gen().

ibuf_update_free_bits_low(): Revert the changes.  Restore the assertion
that this function must not be invoked on compressed pages.  The function
ibuf_update_free_bits_zip() is for compressed pages.

ibuf_insert_to_index_page(): Undo a white-space change.
2008-09-18 07:01:13 +00:00
marko
3c939e95cd branches/innodb+: Merge 2579:2637 from branches/zip. 2008-09-17 19:52:30 +00:00
marko
61ed2bc91b branches/innodb+: ibuf0ibuf.c: Minor cleanup to make the code a little
closer to branches/zip.

ibuf_size_update(): Add const qualifier to the parameter "root".
Remove #ifdef UNIV_SYNC_DEBUG around ut_ad(mutex_own()).

ibuf_page(): Use the variable name local_mtr instead of mtr_local, to
be more like existing functions.  Eliminate the flag use_local_mtr.

ibuf_get_merge_page_nos(): Restore an "if (...) break; else if" to
"if (...) break; if" as in branches/zip.

ibuf_dummy_index_create(), ibuf_dummy_index_add_col(),
ibuf_contract_ext(), ibuf_insert_low(): Revert to the formatting of
branches/zip.
2008-09-15 10:15:25 +00:00
marko
b0f35c188a branches/innodb+: ibuf_t: Remove the unused array n_ops[].
ibuf_print(): Do not print n_ops[].

ibuf_print_ops(): Output trailing newline.
2008-09-15 10:13:40 +00:00
sunny
4b06a4b130 branches/innodb+: Merge revisions 2460:2579 from branches/zip
The followin mysql-tests failed (and they are known to fail):
main.information_schema        	[ fail ]
main.innodb_file_per_table_basic[ fail ]
main.type_bit_innodb           	[ fail ]

Tested against : MYSQL_SERVER_VERSION  "5.1.28"
2008-08-09 00:15:46 +00:00
inaam
a48c8a2878 branches/innodb+: Merge revisions 2344:2454 from branches/zip 2008-05-14 15:43:19 +00:00
sunny
35d626f098 branches/innodb+: Delete buffer port from branches/fts:r2283 2008-02-27 07:03:34 +00:00
sunny
8c24ad9e55 branches/innodb+: Merge revisions 2315:2322 from branches/zip 2008-02-27 06:50:51 +00:00
marko
2c2b06ad75 branches/zip: Introduce UNIV_INTERN, a linkage specifier for InnoDB-global
symbols.  Use it for all definitions of non-static variables and functions.

lexyy.c, make_flex.sh: Declare yylex as UNIV_INTERN, not static.  It is
referenced from pars0grm.c.

Actually, according to
	nm .libs/ha_innodb.so|grep -w '[ABCE-TVXYZ]'
the following symbols are still global:

* The vtable for class ha_innodb
* pars0grm.c: The function yyparse() and the variables yychar, yylval, yynerrs

The required changes to the Bison-generated file pars0grm.c will be addressed
in a separate commit, which will add a script similar to make_flex.sh.

The class ha_innodb is renamed from class ha_innobase by a #define.  Thus,
there will be no clash with the builtin InnoDB.  However, there will be some
overhead for invoking virtual methods of class ha_innodb.  Ideas for making
the vtable hidden are welcome.  -fvisibility=hidden is not available in GCC 3.
2008-02-06 14:17:36 +00:00
marko
463141d149 branches/zip: Implement a limit for the size of undo log records.
innodb-index.test: Add a test with a large number of externally stored
columns.  Check that there may not be prefix indexes on too many columns.

dict_index_too_big_for_undo(): New function: Check if the undo log may
overflow.

dict_index_add_to_cache(): Return DB_SUCCESS or DB_TOO_BIG_RECORD.
Postpone the creation and linking of some data structures, so that
when dict_index_too_big_for_undo() holds, it will be easier to clean up.
Check the return status in all callers.
2007-12-19 14:03:39 +00:00
sunny
5cab01e91c branches/zip: Fix a bug where the zipped page and the uncompressed page
contents end up with conflicting versions of a record's state. The zipped
page record was not being marked as "(un)deleted" because we were not
passing the zipped page contents to the (un)delete function, which first
(un)delete marks the uncompressed version and then based on whether
page_zip is NULL or not (un)delete marks the record in the compressed page.
2007-11-29 12:23:48 +00:00
marko
247d1449d1 branches/zip: Minor cleanup.
buf_page_get_release_on_io(): Removed this unused function.

ibuf_build_entry_from_ibuf_rec(): Justify why it is not necessary to
add system columns to the dummy table pointed to by the dummy secondary index.

page_zip_rec_set_deleted(): Add a page_zip_validate() assertion.
2007-11-28 11:22:25 +00:00
marko
8bed4c4c3f branches/zip: Do not access the fields of dfield_t directly.
dfield_dup(): New function for duplicating the data pointed to by dfield_t.

dfield_set_len(), dfield_set_data(): Add Valgrind instrumentation.
2007-10-23 06:46:12 +00:00
marko
8ab05ab1d2 branches/zip: Minor cleanup of B-tree cursor operations.
btr_pcur_get_rel_pos(): Add a const qualifier.

btr_pcur_get_btr_cur(), btr_pcur_get_page_cur(): btr_cur_get_page_cur():
Define as const-preserving macros.

btr_pcur_is_on_user_rec(), btr_pcur_is_after_last_on_page(),
btr_pcur_is_before_first_on_page(): Remove the unused parameter mtr.
Add a const qualifier.

btr_pcur_move_to_next_on_page(), btr_pcur_move_to_prev_on_page():
Remove the unused parameter mtr.

page_cur_search(): Add const qualifiers.

page_cur_get_page(), page_cur_is_before_first(), page_cur_is_after_last():
Add debug assertions.
2007-10-22 08:16:35 +00:00
marko
edb7de5fee branches/zip: On compressed pages, always update the insert buffer bitmap.
Do not assume anything about the contents of the bitmap.

ibuf_update_free_bits_low(): Use this function only for uncompressed pages.
Remove the parameter zip_size.  This function avoids latching the bitmap page
and updating the bitmap when the bits do not change.

ibuf_update_free_bits_zip(): New function based on ibuf_update_free_bits_low(),
for use on compressed pages.  Remove the parameter max_insert_size that
was used for computing the before image of the free bits.  Always update the
bitmap.

ibuf_index_page_calc_free_zip(): New function, factored out from
ibuf_index_page_calc_free().

ibuf_update_free_bits_if_full(): Document that this function must only be
invoked on uncompressed pages.  Add a debug assertion about this.
2007-10-12 13:25:12 +00:00
marko
edf5b599d1 branches/zip: ibuf_insert_low(): Add the parameter entry_size in order to
avoid repeated invocation of the costly function rec_get_converted_size().
2007-10-12 10:48:35 +00:00
marko
36e3171767 branches/zip: Improve diagnostic output in ibuf_insert_to_index_page()
and add some debug assertions.
2007-10-12 08:38:49 +00:00
marko
faec4797c8 branches/zip: Merge 1664:1783 from trunk. 2007-08-30 09:21:25 +00:00
marko
5288876e23 branches/zip: Make merge sort handle externally stored columns.
Some things still fail in innodb-index.test, and there seems to be
a race condition (data dictionary lock wait) when running with --valgrind.

dfield_t: Add an "external storage" flag, dfield->ext.

dfield_is_null(), dfield_is_ext(), dfield_set_ext(), dfield_set_null():
New functions.

dfield_copy(), dfield_copy_data(): Add const qualifiers, fix in/out comments.

data_write_sql_null(): Use memset().

big_rec_field_t: Replace byte* data with const void* data.

ut_ulint_sort(): Remove.

upd_field_t: Remove extern_storage.

upd_node_t: Replace ext_vec, n_ext_vec with n_ext.

row_merge_copy_blobs(): New function.

row_ins_index_entry(): Add the parameter "ibool foreign" for suppressing
foreign key checks during fast index creation or when inserting into
secondary indexes.

btr_page_insert_fits(): Add const qualifiers.

btr_cur_add_ext(), upd_ext_vec_contains(): Remove.

dfield_print_also_hex(), dfield_print(): Replace if...else if with switch.
Observe dfield_is_ext().
2007-06-21 09:43:15 +00:00
marko
7fbc04fcdc branches/zip: Merge 1533:1553 from trunk. 2007-06-06 11:07:37 +00:00
marko
d75e64f98a branches/zip: Merge 1493:1533 from trunk.
Make use of UT_BITS_IN_BYTES().
2007-05-29 08:48:16 +00:00
marko
36e875f7a5 branches/zip: Document and obey the rules for modifying the free bits in
the insert buffer bitmap.

ibuf_set_free_bits_func(): Never disable redo logging.

ibuf_update_free_bits_zip(): Remove.

btr_page_reorganize_low(), page_zip_reorganize(): Do not update the insert
buffer bitmap.  Instead, document that callers will have to take care of it,
and adapt the callers.

btr_compress(): On error, reset the insert buffer free bits.

btr_cur_insert_if_possible(): Do not modify the insert buffer bitmap.

btr_compress(), btr_cur_optimistic_insert(): On compressed pages,
reset the insert buffer bitmap.  Document why.

btr_cur_update_alloc_zip(): Document why it is necessary and sufficient
to reset the insert buffer free bits.

btr_cur_update_in_place(), btr_cur_optimistic_update(),
btr_cur_pessimistic_update(): Update the free bits in the same
mini-transaction.  Document that the mini-transaction must be
committed before latching any further pages.  Verify that this
is the case in all execution paths.

row_ins_sec_index_entry_by_modify(), row_ins_clust_index_entry_by_modify(),
row_undo_mod_clust_low(): Because these functions call
btr_cur_update_in_place(), btr_cur_optimistic_update(), or
btr_cur_pessimistic_update(), document that the mini-transaction must be
committed before latching any further pages.  Verify that this is the case
in all execution paths.
2007-05-16 09:23:53 +00:00
marko
e7284367dc branches/zip: Merge revisions 1402:1493 from trunk.
Remove mysql.patch, because the configuration parameter interface has changed.
2007-05-14 09:07:15 +00:00
marko
fbc6f37cb1 branches/zip: Fix two bugs.
mtr_commit(): Do not acquire the log mutex if no log records are to be written.

ibuf_set_free_bits_func(): Do not clear mtr.modifications, because that would
prevent the dirty insert buffer bitmap block from being moved to the flush
list.  Instead, assume that mtr_commit() will not acquire log_sys->mutex
because redo logging is disabled.

buf_page_init_for_read(): I/O-fix the block before buf_buddy_alloc(), because
the newly allocated block could otherwise be reused by the compressed page.
2007-05-07 05:53:42 +00:00
marko
2e73922495 branches/zip: ibuf_set_free_bits_func(): Disable redo logging when
crash recovery is in progress.  This avoids a hang when
btr_parse_page_reorganize(), called from an I/O handler thread,
attempts to acquire log_sys->mutex while it is being held by
the main thread (the one that runs innobase_init()).  This change
was committed accidentally.  It may be unsafe to clear
mtr.modifications, because buf_page_release() at mtr_commit() may
forget to put modified pages to the flush list.

Cleanup: Remove the "type" parameter from many ibuf functions.
Let the caller check that !dict_index_is_clust().  This should avoid
function calls and register spilling.

ibuf_set_free_bits_func(), ibuf_set_free_bits(): Remove the parameter "type".

ibuf_reset_free_bits_with_type(): Rename to ibuf_reset_free_bits().
Remove the parameter "type".

ibuf_update_free_bits_if_full(), ibuf_update_free_bits_zip(),
ibuf_update_free_bits_low(), ibuf_update_free_bits_for_two_pages_low():
Remove the parameter "index".
2007-05-06 12:39:46 +00:00
marko
8ff43bd3db branches/zip: ibuf_set_free_bits(): Rename to ibuf_set_free_bits_func(),
and remove the max_val parameter unless #ifdef UNIV_IBUF_DEBUG
2007-03-01 11:33:26 +00:00