Commit graph

1386 commits

Author SHA1 Message Date
marko
d1b5613fa0 branches/zip: Merge revisions 3479:3598 from branches/5.1:
------------------------------------------------------------------------
  r3588 | inaam | 2008-12-18 14:26:54 +0200 (Thu, 18 Dec 2008) | 8 lines

  branches/5.1

  It is a bug in unused code. If we don't calculate the hash value when
  calculating the mutex number then two pages which map to same hash
  value can get two different mutex numbers.

  Approved by: Marko
  ------------------------------------------------------------------------
  r3590 | marko | 2008-12-18 15:33:36 +0200 (Thu, 18 Dec 2008) | 11 lines

  branches/5.1: When converting a record to MySQL format, copy the default
  column values for columns that are SQL NULL.  This addresses failures in
  row-based replication (Bug #39648).

  row_prebuilt_t: Add default_rec, for the default values of the columns in
  MySQL format.

  row_sel_store_mysql_rec(): Use prebuilt->default_rec instead of
  padding columns.

  rb://64 approved by Heikki Tuuri
  ------------------------------------------------------------------------
  r3598 | marko | 2008-12-22 15:28:03 +0200 (Mon, 22 Dec 2008) | 6 lines

  branches/5.1: ibuf_delete_rec(): When the record cannot be found and
  the tablespace has been dropped, commit the mini-transaction, so that
  InnoDB will not hold the insert buffer tree latch in exclusive mode,
  causing a potential deadlock.  This bug was introduced in the fix of
  Bug #27276 in r2924.
  ------------------------------------------------------------------------
2008-12-22 13:41:47 +00:00
marko
5697b755e6 branches/zip: Pass the caller's file name and line number to
row_mysql_lock_data_dictionary(), row_mysql_freeze_data_dictionary(),
to better track down locking issues that involve dict_operation_lock.
2008-12-22 10:27:16 +00:00
marko
0cb2a737fd branches/zip: HASH_INSERT, HASH_DELETE: Add explicit type conversions,
so that the macros will expand to valid C++.  Unlike C++, C allows
implicit type conversions from void* to other pointer types.
2008-12-19 11:58:13 +00:00
marko
4ce5c4a19a branches/zip: ha_innodb.cc: Do not include some unnecessary MySQL header files. 2008-12-18 13:24:44 +00:00
marko
37187e09f1 branches/zip: row_sel_try_search_shortcut(), row_sel(): Adjust two
debug assertions that should have been adjusted in r3575.
2008-12-17 20:40:38 +00:00
vasil
4302847c99 branches/zip:
Remove 2 entries from the ChangeLog about changes not big enough.

Discussed with:	Marko
2008-12-17 12:58:26 +00:00
marko
4856b4ba61 branches/zip: Remove update-in-place-in-select from the internal SQL
interpreter.  It was only used for updating the InnoDB internal data
dictionary when renaming or dropping tables.  It could have caused
deadlocks after acquiring latches on insert buffer bitmap pages.
This and r3544 should fix Issue #135.

Furthermore, the update-in-place-in-select does not account for
compression failure.  That was not a problem yet, since the InnoDB SQL
interpreter has so far assumed ROW_FORMAT=REDUNDANT.

rb://63 approved by Heikki Tuuri
2008-12-17 12:40:59 +00:00
marko
3462b464f1 branches/zip: ChangeLog: Document recent changes that were not included in
InnoDB Plugin 1.0.2, except changes to source code comments.
2008-12-17 10:44:31 +00:00
marko
b0ab87862c branches/zip: Introduce UNIV_AHI_DEBUG for debugging the adaptive hash
index without enabling UNIV_DEBUG.
2008-12-17 09:19:56 +00:00
marko
fc249aa502 branches/zip: Do not update the free bits in the insert buffer bitmap
when inserting or deleting from the insert buffer B-tree.  Assert that
records in the insert buffer B-tree are never updated.  This could cure
Issue #135.

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

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

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

btr_cur_update_in_place(), btr_cur_optimistic_update(),
btr_cur_pessimistic_update(): Assert that these functions are never
invoked on the insert buffer tree.  The insert buffer only supports
the insertion and deletion of records.
2008-12-16 13:52:36 +00:00
marko
ba65432056 branches/zip: btr_cur_optimistic_delete(): Note that no further pages
must be latched before calling mtr_commit(mtr) if the function returns TRUE.
2008-12-16 10:14:58 +00:00
marko
1297a39ffe branches/zip: buf_page_init_for_read(): Use common code for error exit. 2008-12-16 10:13:31 +00:00
marko
1ed4504b4c branches/zip: sync_thread_add_level(): Add a comment explaining the
assertion about SYNC_BUF_POOL and SYNC_BUF_BLOCK.
2008-12-16 08:24:03 +00:00
marko
d32ffdd1a3 branches/zip: Clean up the insert buffer subsystem.
Originally, there were provisions in InnoDB for multiple insert buffer
B-trees, apparently one for each tablespace.

When Heikki implemented innodb_file_per_table (multiple InnoDB
tablespaces) in MySQL 4.1, he made the insert buffer live only in the
system tablespace (space 0) but left the provisions in the code.

When Osku Salerma implemented delete buffering, he also cleaned up the
insert buffer subsystem so that only one insert buffer B-tree exists.
This patch applies the clean-up to the InnoDB Plugin.

Having a separate patch of the insert buffer clean-up should help us
better compare the essential changes of the InnoDB Plugin and InnoDB+
and to track down bugs that are specific to InnoDB+.

IBUF_SPACE_ID: New constant, defined as 0.

ibuf_data_t: Remove.

ibuf_t: Add the applicable fields from ibuf_data_t.  There is only one
insert buffer tree from now on.

ibuf_page_low(), ibuf_page(): Merge to a single function ibuf_page().

fil_space_t: Remove ibuf_data.

fil_space_get_ibuf_data(): Remove.  There is only one ibuf_data, for
space IBUF_SPACE_ID.

fil_ibuf_init_at_db_start(): Remove.

ibuf_init_at_db_start(): Fuse with ibuf_data_init_for_space().

ibuf_validate_low(): Remove.  There is only one ibuf tree.

ibuf_free_excess_pages(), ibuf_header_page_get(),
ibuf_free_excess_pages(): Remove the parameter space, which was always
0.

ibuf_tree_root_get(): Remove the parameters space and data.  There is
only one ibuf tree, for space IBUF_SPACE_ID.

ibuf_data_sizes_update(): Rename to ibuf_size_update(), and remove the
parameter data.  There is only one ibuf data struct.

ibuf_build_entry_pre_4_1_x(): New function, refactored from
ibuf_build_entry_from_ibuf_rec().

ibuf_data_enough_free_for_insert(), ibuf_data_too_much_free(): Remove
the parameter data.  There is only one insert buffer tree.

ibuf_add_free_page(), ibuf_remove_free_page(): Remove the parameters
space and data.  There is only one insert buffer tree.

ibuf_get_merge_page_nos(): Add parenthesis, to reduce diffs to
branches/innodb+.

ibuf_contract_ext(): Do not pick an insert buffer tree at random.
There is only one.

ibuf_print(): Print the single insert buffer tree.

rb://19 approved by Heikki on IM
2008-12-12 14:08:23 +00:00
marko
565b4b8e7c branches/zip: Improve code locality in btr_cur_search_to_nth_level().
Make the variables rw_latch and buf_mode local in the for loop.
Initialize them at the beginning of each for loop round to reduce
register spilling on register-starved platforms such as the x86.  Move
the assignment of rw_latch and buf_mode from the end of the loop to
the beginning of the loop.  These parameters will only be needed in
the buf_page_get_gen() call at the start of the loop.

Remove the second (redundant) call to ibuf_should_try().

ibuf_should_try(): Now that the successful calls to this function will
be halved, halve the magic constant that ibuf_flush_count will be
compared to, accordingly.

rb://61 approved by Heikki over IM.
2008-12-12 12:22:34 +00:00
marko
f37e872587 branches/zip: btr_cur_search_to_nth_level(): Remove a duplicate check
for (rw_latch != RW_NO_LATCH) around debug code.
2008-12-12 11:39:40 +00:00
marko
da284534df branches/zip: ibuf_merge_or_delete_for_page(): Restore the seemingly
redundant checks for ibuf_fixed_addr_page() || fsp_descr_page() that
were removed in r3432, and add a comment explaining why.

Thanks to Michael for reporting this bug.
2008-12-11 15:08:14 +00:00
calvin
cb876f88df branches/zip: fix Mantis issue #138 InnoDB fails if
innodb_buffer_pool_size >= 4096M on x64 Windows

All three srv_buf_pool related variables are defined as ulong, which is
32-bit on 64-bit Windows. They are changed to 64-bit ulint. Also
system_info.dwPageSize appears to be 32-bit only. Casting to 64-bit
is required.

Approved by:	Marko (on IM)
2008-12-10 22:19:07 +00:00
calvin
68624f2498 branches/zip: change diff and result files eol-style to LF
The patch utility takes LF style diff, and mysql-test-run 
also only takes LF style, even on Windows.
2008-12-10 22:01:20 +00:00
calvin
02d8e95b20 branches/zip: Merge r3458:3479 from branches/5.1:
------------------------------------------------------------------------
  r3479 | calvin | 2008-12-10 15:30:05 -0600 (Wed, 10 Dec 2008) | 4 lines
  
  branches/5.1: change .result file eol-style to LF
  
  mysql-test-run only takes LF style even on Windows.
  
  ------------------------------------------------------------------------
2008-12-10 21:56:00 +00:00
vasil
7ed448ce95 branches/zip:
Merge 2929:3458 from branches/5.1 (resolving conflict in c3257,
note also that r3363 reverted r2933 so there are not changes in
mysql-test/innodb-autoinc.result with the current merge):

  ------------------------------------------------------------------------
  r2933 | calvin | 2008-10-30 02:57:31 +0200 (Thu, 30 Oct 2008) | 10 lines
  Changed paths:
     M /branches/5.1/mysql-test/innodb-autoinc.result
  
  branches/5.1: correct the result file innodb-autoinc.result
  
  Change the followings:
    auto_increment_increment
    auto_increment_offset
  
  to
    auto-increment-increment
    auto-increment-offset
  
  ------------------------------------------------------------------------
  r2981 | marko | 2008-11-07 14:54:10 +0200 (Fri, 07 Nov 2008) | 5 lines
  Changed paths:
     M /branches/5.1/row/row0mysql.c
  
  branches/5.0: row_mysql_store_col_in_innobase_format(): Correct a misleading
  comment. In the UTF-8 encoding, ASCII takes 1 byte per character, while
  the "latin1" character set (normally ISO-8859-1, but in MySQL it actually
  refers to the Windows Code Page 1252 a.k.a. CP1252, WinLatin1)
  takes 1 to 3 bytes (1 to 2 bytes for the ISO-8859-1 subset).
  ------------------------------------------------------------------------
  r3114 | calvin | 2008-11-14 20:31:48 +0200 (Fri, 14 Nov 2008) | 8 lines
  Changed paths:
     M /branches/5.1/handler/ha_innodb.cc
  
  branches/5.1: fix bug#40386: Not flushing query cache after truncate
  
  ha_statistics.records can not be 0 unless the table is empty, set to
  1 instead. The original problem of bug#29507 is fixed in the server.
  
  Additional test was done with the fix of bug#29507 in the server.
  
  Approved by: Heikki (on IM)
  ------------------------------------------------------------------------
  r3257 | inaam | 2008-11-24 22:06:50 +0200 (Mon, 24 Nov 2008) | 13 lines
  Changed paths:
     M /branches/5.1/handler/ha_innodb.cc
     M /branches/5.1/srv/srv0srv.c
     M /branches/5.1/trx/trx0trx.c
  
  branches/5.1 bug#40760
  
  The config param innodb_thread_concurrency is dynamically set and is
  read when a thread enters/exits innodb. If the value is changed between
  the enter and exit time the behaviour becomes erratic.
  The fix is not to use srv_thread_concurrency when exiting, instead use
  the flag trx->declared_to_be_inside_innodb.
  
  rb://57
  
  Approved by: Marko
  
  
  ------------------------------------------------------------------------
  r3363 | calvin | 2008-12-04 19:00:20 +0200 (Thu, 04 Dec 2008) | 13 lines
  Changed paths:
     M /branches/5.1/mysql-test/innodb-autoinc.result
  
  branches/5.1: revert the changes in r2933
  
  The changes in r2933 causes test failure on Linux.
  More investigation is needed for Windows.
  
  Change the followings in innodb-autoinc.result:
    auto-increment-increment
    auto-increment-offset
  
  back to:
    auto_increment_increment
    auto_increment_offset
  
  ------------------------------------------------------------------------
  r3412 | vasil | 2008-12-05 10:46:18 +0200 (Fri, 05 Dec 2008) | 7 lines
  Changed paths:
     M /branches/5.1/trx/trx0undo.c
  
  branches/5.1:
  
  Add the traditional 2 spaces after the timestamp so the message does
  not look like:
  
  070223 13:26:01InnoDB: Warning: canno....
  
  ------------------------------------------------------------------------
  r3458 | vasil | 2008-12-09 11:21:08 +0200 (Tue, 09 Dec 2008) | 51 lines
  Changed paths:
     M /branches/5.1/mysql-test/innodb_bug34300.test
  
  branches/5.1:
  
  Merge a change from MySQL to fix the failing innodb_bug34300 mysql-test:
  
    main.innodb_bug34300           [ fail ]
    
    mysqltest: At line 11: query 'SET @@max_allowed_packet=16777216' failed: 1621: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
    
    Aborting: main.innodb_bug34300 failed in default mode. 
  
  The changeset is this:
  
    ------------------------------------------------------------
    revno: 2709.1.10
    committer: Staale Smedseng <staale.smedseng@sun.com>
    branch nick: b22891-51-bugteam
    timestamp: Thu 2008-11-20 08:51:48 +0100
    message:
      A fix for Bug#22891 "session level max_allowed_packet can be
      set but is ignored".
    
      This patch makes @@session.max_allowed_packed and
      @@session.net_buffer_length read-only as suggested in the bug
      report. The user will have to use SET GLOBAL (and reconnect)
      to alter the session values of these variables.
    
      The error string ER_VARIABLE_IS_READONLY is introduced.
    
      Tests are modified accordingly.
    modified:
      mysql-test/r/func_compress.result
      mysql-test/r/max_allowed_packet_basic.result
      mysql-test/r/max_allowed_packet_func.result
      mysql-test/r/net_buffer_length_basic.result
      mysql-test/r/packet.result
      mysql-test/r/union.result
      mysql-test/r/variables.result
      mysql-test/t/func_compress.test
      mysql-test/t/innodb_bug34300.test
      mysql-test/t/max_allowed_packet_basic.test
      mysql-test/t/max_allowed_packet_func.test
      mysql-test/t/net_buffer_length_basic.test
      mysql-test/t/packet.test
      mysql-test/t/union.test
      mysql-test/t/variables.test
      sql/set_var.cc
      sql/set_var.h
      sql/share/errmsg.txt
    ------------------------------------------------------------
  
  
  ------------------------------------------------------------------------
2008-12-09 09:49:03 +00:00
marko
0b04505e8a branches/zip: row_purge_remove_sec_if_poss_low(): Allocate mtr_vers
from the stack, not with mem_alloc().
2008-12-09 08:31:26 +00:00
marko
d182215a4f branches/zip: ibuf_merge_or_delete_for_page(): Remove the redundant
checks for ibuf_fixed_addr_page() || fsp_descr_page().  The one at
the beginning of the function is enough.
2008-12-08 12:14:01 +00:00
marko
7c16a58d4b branches/zip: row_undo_mod_del_mark_or_remove_sec_low(): Do not
complain if the record is not found.  Explain that this is possible
when a deadlock occurs during an update.  Heikki investigated this
in Issue #134.
2008-12-05 08:02:54 +00:00
vasil
23a752360e branches/zip:
Revert our temporary fix for Bug#40360 Binlog related errors with binlog off

This bug was fixed in MySQL code.

Our fix went into r2944 and r2947, but this patch does not entirely revert
those revisions because we want to leave the test case that was introduced
and also r2944 itself reverted r2935 and r2936. So if we completely revert
r2944 and r2947 then we would loose the test and will restore r2935 and
r2936.

This resolves Issue#108 We should remove ib_bin_log_is_engaged() once mysql
add an equivallent, see Bug#40360
2008-12-04 16:49:24 +00:00
vasil
13c01e48fd branches/zip:
Fix Mantis issue#103 mysql_addons.c depends on THD internals - please remove it

Use MySQL's thd_get_thread_id() instead of our own ib_thd_get_thread_id()
since MySQL implemented the former, see http://bugs.mysql.com/30930.

Approved by:	Marko (https://svn.innodb.com/rb/r/40, rb://40)
2008-12-04 16:10:08 +00:00
vasil
0e645ded93 branches/zip:
Resurrect a ChangeLog entry that I removed in c3331 with a fake date
so it does not appear that it has been included in 1.0.2.
2008-12-02 11:34:36 +00:00
vasil
931fc75cb0 branches/zip:
Now that 1.0.2 is out, the current tree is version 1.0.3.
2008-12-02 10:11:54 +00:00
vasil
565c0fe095 branches/zip:
Remove an entry from the ChnageLog for a change that was made before
the release of 1.0.2 but was not included in that release.
2008-12-02 10:09:20 +00:00
vasil
b35f664531 branches/zip:
Add entry in the ChangeLog for the release of 1.0.2.
2008-12-02 10:03:17 +00:00
marko
de011c2198 branches/zip: page_cur_insert_rec_zip(): When allocating insert_buf
from the free list, zero out the DB_TRX_ID and DB_ROLL_PTR of the
deleted record if the new record would not overwrite these
fields. This fixes a harmless content mismatch reported by
page_zip_validate() that was reported as Issue #111.
rb://55 approved by Sunny Bains.
2008-12-02 08:16:05 +00:00
marko
e6acdb3c82 branches/zip: row_undo_mod_del_mark_or_remove_sec_low(): Complain if
the secondary index entry cannot be found, and this is not an incomplete
transaction that is being rolled back in crash recovery.  The source code
comments were suggested by Heikki.
2008-11-28 14:18:43 +00:00
vasil
f5abca1618 branches/zip:
Non-functional change in win-plugin/win-plugin.diff: fix the file name
before the diff, this is irrelevant but it is nice to be the same as
the file name on the following line.
2008-11-27 21:33:48 +00:00
vasil
2a028069ea branches/zip:
* Remove a change from win-plugin/win-plugin.diff about time_t because
  MySQL has used VS2005 for building 5.1.30.

* Adjust the line numbers so the patch applies cleanly without fuzz and
  offset messages.

Submitted by:	Calvin
2008-11-27 21:31:18 +00:00
vasil
5bd71ba18b branches/zip:
Fix Mantis issue#130 wdl: does not handle 64-bit address

- Change the call from strtoul() to strtoull()
- Change "%16X" to "%16llx" when scanning preferred load address

rb://58

Submitted by:	Calvin
Approved by:	Marko
2008-11-27 21:26:39 +00:00
marko
afe9ee1f86 branches/zip: row_merge_drop_temp_indexes(): Replace the WHILE 1 with
WHILE 1=1 in the SQL procedure, so that the loop will actually be
entered and temporary indexes be dropped during crash recovery.
Thanks to Sunny Bains for pointing this out.

Tested as follows:

Set a breakpoint in row_merge_rename_indexes.

CREATE TABLE t(a INT)ENGINE=InnoDB;
CREATE INDEX a ON t(a);

-- The breakpoint will be reached.  Kill and restart mysqld.
SHOW CREATE TABLE t;
-- This shows the MySQL .frm file, without and index.
CREATE TABLE innodb_table_monitor(a INT)ENGINE=InnoDB;
-- This will dump the InnoDB dictionary to the error log, without the index.
2008-11-26 08:00:28 +00:00
marko
106d894efd branches/zip: Note that it is legitimate for a secondary index record not
to be found during purge.  This tries to address Issue #129.  The comments
were supplied by Heikki.
2008-11-24 16:01:42 +00:00
marko
a00032220f branches/zip: buf_LRU_free_block(): Do not assert on ibuf_count until after
it has been determined that the block is not being I/O-fixed.
This corrects the mistake that was made in r3177.
2008-11-21 14:36:18 +00:00
marko
0e613f0c92 branches/zip: buf_LRU_free_block(), buf_page_try_get_func(): Assert that
there is nothing in the insert buffer for the page.  This is for
tracking down Issue #128.
2008-11-21 14:24:31 +00:00
marko
c8fd3a51ff branches/zip: dtuple_print(): Dump each field in a separate line,
so that the dumps can be read and compared more easily.
This is related to the change to rec_print_old() and rec_print_comp()
in r3148.
2008-11-21 08:11:18 +00:00
marko
ed2321931c branches/zip: rec_print_old(), rec_print_comp(): Dump each field in a
separate line, so that the dumps can be read and compared more easily.
2008-11-20 11:27:27 +00:00
marko
6bdab319ad branches/zip: Always check for "row too large" when executing SQL to create
an index or table.  We have to skip this check when loading table definitions
from the data dictionary, because we could otherwise refuse to load old
tables (even uncompressed ones).  This addresses Issue #119.

The first "row too large" check was implemented in MySQL 5.0.3
to address MySQL Bug #5682.  In the InnoDB Plugin 1.0.2, a more
accurate check was implemented in innodb_strict_mode.  We now
make the check unconditional.

dict_create_index_step(): Pass strict=TRUE to dict_index_add_to_cache().

trx_is_strict(), thd_is_strict(): Remove.

innodb-zip.test: Test in innodb_strict_mode=OFF.

innodb_bug36169.test: Ensure that none of the tables can be created.

rb://56 approved by Sunny Bains.
2008-11-20 10:22:40 +00:00
marko
cde818bd81 branches/zip: rec_get_nth_field_offs_old(): Add UNIV_UNLIKELY hints
to assertion-like tests.
2008-11-20 09:39:49 +00:00
marko
d26ba07df0 branches/zip: buf_LRU_free_block(): Clarify the function comment. 2008-11-19 14:39:55 +00:00
michael
337c4d9561 branches/zip: rb://53
Final version of rb://53, fixes the styling of a comment, makes
the definition and the declaration of thd_supports_xa() identical commentwise.
2008-11-17 14:02:01 +00:00
michael
c6227f3766 branches/zip:
rb://53

Improve innodb_supports_xa system variable handling and 
reduces the number of retrievals of the value from MySQL.

Approved by: Marko, over IM
2008-11-17 12:56:56 +00:00
marko
69a89b02b4 branches/zip: row_vers_impl_x_locked_off_kernel(): Remove compilation
warnings about prev_trx_id and vers_del being possibly uninitialized,
by handling the case prev_version == NULL in a single if block.

rb://45 approved by Inaam Rana.
2008-11-12 11:52:57 +00:00
marko
d7abedcdbb branches/zip: dtuple_validate(): When UNIV_DEBUG_VALGRIND is defined,
rely solely on the UNIV_MEM_ASSERT_RW() check and disable the for loop
that would only cause additional noise.
2008-11-12 10:34:30 +00:00
marko
426fccde9f branches/zip: ha_innobase::create(): Remove the dependences on
DICT_TF_ZSSIZE_MAX, so that the code can be compiled with a different
uncompressed page size by redefining UNIV_PAGE_SIZE_SHIFT in univ.i.
Currently, the allowed values are 12, 13, or 14 (4k, 8k, 16k).

Make the default compressed page size half the uncompressed page size.
The previous default was 8 kilobytes, which is the same when compiling
with the default 16k uncompressed page size.

rb://50 approved by Pekka Lampio and Sunny Bains.
2008-11-11 07:28:37 +00:00
calvin
bf9b5f06c5 branches/zip: windows plugin - fix references to array variables.
This problem surfaced when running new test innodb_bug40360.test. Both
tx_isolation_names and binlog_format_names are name arrays, and
should be defined as wdl_tx_isolation_names and wdl_binlog_format_names,
not *wdl_tx_isolation_names and *wdl_binlog_format_names.

Another array variable is all_charsets, which is already correctly
defined.

Approved by:	Marko (on IM)
2008-11-04 10:43:14 +00:00