Commit graph

68389 commits

Author SHA1 Message Date
Vasil Dimov
3ce27deac3 Merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-02-25 11:52:47 +02:00
Vasil Dimov
05c4a3518e Fix BUG#11798085 - INCORRECT INTEGER TYPES USED IN CALCULATION RESULT
IN OVERFLOW

Do not assign the result of the difference to a signed variable and
checking whether it is negative afterwards because this limits the max diff
to 2G on 32 bit systems. E.g. "signed = 3.5G - 1G" would be negative and the
code would assume that 3.5G < 1G. Instead compare the two variables directly
and assign to unsigned only if we know that the result of the subtraction
will be positive.

Discussed with:	Jimmy and Sunny (via IRC)
2011-02-25 11:50:18 +02:00
Jimmy Yang
afe4b605a3 Fix Bug #11765975 __FILE__ macros expanded to full path instead of relative
in CMake builds

rb://600 approved by Sunny Bains
2011-02-25 00:33:13 -08:00
Vasil Dimov
700bec21fc Fix the failing sys_vars.all_vars on behalf of Sunny 2011-02-23 16:39:54 +02:00
Sunny Bains
759d346e67 Revert the max value of innodb_purge_batch_size to 5000. 2011-02-23 17:56:37 +11:00
Sunny Bains
669c3e7110 Add ut0bh.h and ut0bh.c. 2011-02-23 17:48:15 +11:00
Sunny Bains
8d8ebc5b01 Remove ut0bh.h and ut0bh.c and re-add so that we can sync the file ids with
the trunk.
2011-02-23 17:44:11 +11:00
Sunny Bains
165ccf3be7 Add ut0bh.ic. 2011-02-23 07:24:34 +11:00
Sunny Bains
2cc164341a Remove ut0bh.ic from 5.5 and then re-add so that the file ids are the same
in 5.5 and trunk. First we remove the file in the commit.
2011-02-23 07:14:49 +11:00
Sunny Bains
83659a7fba Add files that were missed in bug# 11798085 commit. 2011-02-22 20:17:02 +11:00
Sunny Bains
9d6d1902e0 Bug #11766227: InnoDB purge lag much worse for 5.5.8 versus 5.1
Bug #11766501: Multiple RBS break the get rseg with mininum trx_t::no code during purge
      
Bug# 59291 changes:
      
Main problem is that truncating the UNDO log at the completion of every
trx_purge() call is expensive as the number of rollback segments is increased.
We truncate after a configurable amount of pages. The innodb_purge_batch_size
parameter is used to control when InnoDB does the actual truncate. The truncate
is done once after 128 (or TRX_SYS_N_RSEGS iterations). In other words we
truncate after purge 128 * innodb_purge_batch_size. The smaller the batch
size the quicker we truncate.
      
Introduce a new parameter that allows how many rollback segments to use for
storing REDO information. This is really step 1 in allowing complete control
to the user over rollback space management.
      
New parameters:
    i) innodb_rollback_segments = number of rollback_segments to use
       (default is now 128) dynamic parameter, can be changed anytime.
       Currently there is little benefit in changing it from the default.
      
Optimisations in the patch.
      
    i. Change the O(n) behaviour of trx_rseg_get_on_id() to O(log n)
       Backported from 5.6. Refactor some of the binary heap code.
       Create a new include/ut0bh.ic file.
      
    ii. Avoid truncating the rollback segments after every purge.
      
Related changes that were moved to a separate patch:
      
    i. Purge should not do any flushing, only wait for space to be free so that
       it only does purging of records unless it is held up by a long running
       transaction that is preventing it from progressing.
      
   ii. Give the purge thread preference over transactions when acquiring the
       rseg->mutex during commit. This to avoid purge blocking unnecessarily
       when getting the next rollback segment to purge.
      
Bug #11766501 changes:
      
Add the rseg to the min binary heap under the cover of the kernel mutex and
the binary heap mutex. This ensures the ordering of the min binary heap.
      
The two changes have to be committed together because they share the same
that fixes both issues.
      
rb://567 Approved by: Inaam Rana.
2011-02-22 16:04:08 +11:00
Marko Mäkelä
7e6f3517a0 Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-17 22:27:56 +02:00
Marko Mäkelä
db55cf8526 Allow 30 seconds for slow shutdown in the Bug #60049 test. 2011-02-17 22:25:33 +02:00
Vasil Dimov
f19a4c0d76 Merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-02-17 19:14:41 +02:00
Vasil Dimov
5e7d354326 Fix the non-determinism in innodb_information_schema.test
Thanks to Kristian Nielsen for finding out the root cause for the
failure, see: https://bugs.launchpad.net/maria/+bug/677407
2011-02-17 19:09:53 +02:00
Marko Mäkelä
778e700d1c Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-17 09:48:01 +02:00
Marko Mäkelä
e428f0ed9d Disable the Bug #60049 test on embedded, as it requires server restart. 2011-02-17 09:45:07 +02:00
Marko Mäkelä
11cbe8743b Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-16 15:41:46 +02:00
Marko Mäkelä
afda842f02 Make the implicit unpack parameter explicit in the Bug #60049 test. 2011-02-16 15:34:16 +02:00
Marko Mäkelä
cfc9176bce Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-15 12:18:15 +02:00
Marko Mäkelä
518a4440ea Add a test for suspected Bug#60049. 2011-02-15 12:12:27 +02:00
Marko Mäkelä
53cfea3911 Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-15 11:29:56 +02:00
Marko Mäkelä
6ae8c575f3 Bug#59307 Valgrind: uninitialized value in rw_lock_set_writer_id_and_recursion_flag()
rw_lock_create_func(): Initialize lock->writer_thread, so that Valgrind
will not complain even when Valgrind instrumentation is not enabled.
Flag lock->writer_thread uninitialized, so that Valgrind can complain
when it is used uninitialized.

rw_lock_set_writer_id_and_recursion_flag(): Revert the bogus Valgrind
instrumentation that was pushed in the first attempt to fix this bug.
2011-02-15 10:51:33 +02:00
Jimmy Yang
8586497e5d Merge from mysql-5.1-innodb to mysql-5.5-innodb 2011-02-14 02:17:51 -08:00
Jimmy Yang
d06bb27fd1 Fix Bug #59749 Enabling concurrent reads while creating non-primary unique
index gives failures.

Approved by Marko
2011-02-14 02:07:59 -08:00
Vasil Dimov
4c5c1c5d0c Merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-02-10 17:26:09 +02:00
Vasil Dimov
07116bbf8b Fix Bug#59307 Valgrind: uninitialized value in rw_lock_set_writer_id_and_recursion_flag()
by silencing a bogus Valgrind warning:

==4392== Conditional jump or move depends on uninitialised value(s)
==4392==    at 0x5A18416: rw_lock_set_writer_id_and_recursion_flag (sync0rw.ic:283)
==4392==    by 0x5A1865C: rw_lock_x_lock_low (sync0rw.c:558)
==4392==    by 0x5A18481: rw_lock_x_lock_func (sync0rw.c:617)
==4392==    by 0x597EEE6: mtr_x_lock_func (mtr0mtr.ic:271)
==4392==    by 0x597EBBD: fsp_header_init (fsp0fsp.c:970)
==4392==    by 0x5A15E78: innobase_start_or_create_for_mysql (srv0start.c:1508)
==4392==    by 0x598B789: innobase_init(void*) (ha_innodb.cc:2282)

os_compare_and_swap_thread_id() is defined as
__sync_bool_compare_and_swap(). From the GCC doc:

`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
  ...
  The "bool" version returns true if the comparison is successful and
  NEWVAL was written.

So it is not possible that the return value is uninitialized, no matter what
the arguments to os_compare_and_swap_thread_id() are. Probably Valgrind gets
confused by the implementation of the GCC internal function
__sync_bool_compare_and_swap().
2011-02-10 17:16:32 +02:00
Marko Mäkelä
adef5550eb Bug #59877 Wrong buffer pool selected in buf_read_ibuf_merge_pages() 2011-02-10 14:07:58 +02:00
Vasil Dimov
acf2e9a6b2 Null merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-02-10 13:32:50 +02:00
Vasil Dimov
2095b63b84 Extend the valgrind suppression to cover one more code path:
==3307== Invalid read of size 1
==3307==    at 0xA8389A: mach_read_from_4 (mach0data.ic:182)
==3307==    by 0xA833E3: buf_buddy_relocate (buf0buddy.c:450)
==3307==    by 0xA8451E: buf_buddy_free_low (buf0buddy.c:619)
==3307==    by 0x999326: buf_buddy_free (buf0buddy.ic:131)
==3307==    by 0x998B66: buf_page_get_gen (buf0buf.c:2968)
==3307==    by 0x9765D4: btr_cur_open_at_rnd_pos_func (btr0cur.c:985)
==3307==    by 0x97F5EB: btr_estimate_number_of_different_key_vals (btr0cur.c:3621)
==3307==    by 0x9C8694: dict_update_statistics (dict0dict.c:4312)
==3307==    by 0x8FCF85: row_update_statistics_if_needed (row0mysql.c:933)
==3307==    by 0x8FCEF8: row_insert_for_mysql (row0mysql.c:1240)
==3307==    by 0x8E8134: ha_innobase::write_row(unsigned char*) (ha_innodb.cc:4988)
==3307==    by 0x73CE6D: handler::ha_write_row(unsigned char*) (handler.cc:4776)
==3307==    by 0x6512DC: copy_data_between_tables(TABLE*, TABLE*, List<Create_field>&, bool, unsigned int, st_order*, unsigned long long*, unsigned long long*, enum_enable_or_disable, bool) (sql_table.cc:7017)
==3307==    by 0x65E1E1: mysql_alter_table(THD*, char*, char*, st_ha_create_information*, TABLE_LIST*, Alter_info*, unsigned int, st_order*, bool) (sql_table.cc:6416)
==3307==    by 0x893920: Alter_table_statement::execute(THD*) (sql_alter.cc:106)
==3307==    by 0x5DDB3B: mysql_execute_command(THD*) (sql_parse.cc:4321)
2011-02-10 13:28:58 +02:00
Vasil Dimov
8a20a73a7c Increment InnoDB version from 1.1.5 to 1.1.6
InnoDB 1.1.5 was released with MySQL 5.5.9
2011-02-10 13:25:12 +02:00
Vasil Dimov
2ae1cdf065 Increment InnoDB Plugin version from 1.0.15 to 1.0.16.
InnoDB Plugin 1.0.15 has been released with MySQL 5.1.55.
2011-02-10 13:21:22 +02:00
Jimmy Yang
801d018411 Merge a fix for Bug #53756 ALTER TABLE ADD PRIMARY KEY affects crash recovery
This was already pushed to mysql-5.1-innodb some time ago
(revision id jimmy.yang@oracle.com-20100907054137-tpuior7hez4f5ghl)
but it was not merged to the 5.5 trees.
2011-02-10 00:58:23 -08:00
Jimmy Yang
77838ae2cd Fix Bug #59048 truncate table or create index could leave index->page
to be FIL_NULL

rb://545 approved by Sunny Bains
2011-02-09 01:15:06 -08:00
Marko Mäkelä
5dfcf7c745 Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-08 13:39:24 +02:00
Marko Mäkelä
154fc1e364 Implement UNIV_BLOB_DEBUG. An early version of this caught Bug #55284.
This option is known to be broken when tablespaces contain off-page
columns after crash recovery. It has only been tested when creating
the data files from the scratch.

btr_blob_dbg_t: A map from page_no:heap_no:field_no to first_blob_page_no.
This map is instantiated for every clustered index in index->blobs.
It is protected by index->blobs_mutex.

btr_blob_dbg_msg_issue(): Issue a diagnostic message.
Invoked when btr_blob_dbg_msg is set.

btr_blob_dbg_rbt_insert(): Insert a btr_blob_dbg_t into index->blobs.

btr_blob_dbg_rbt_delete(): Remove a btr_blob_dbg_t from index->blobs.

btr_blob_dbg_cmp(): Comparator for btr_blob_dbg_t.

btr_blob_dbg_add_blob(): Add a BLOB reference to the map.

btr_blob_dbg_add_rec(): Add all BLOB references from a record to the map.

btr_blob_dbg_print(): Display the map of BLOB references in an index.

btr_blob_dbg_remove_rec(): Remove all BLOB references of a record from
the map.

btr_blob_dbg_is_empty(): Check that no BLOB references exist to or
from a page. Disowned references from delete-marked records are
tolerated.

btr_blob_dbg_op(): Perform an operation on all BLOB references on a
B-tree page.

btr_blob_dbg_add(): Add all BLOB references from a B-tree page to the
map.

btr_blob_dbg_remove(): Remove all BLOB references from a B-tree page
from the map.

btr_blob_dbg_restore(): Restore the BLOB references after a failed
page reorganize.

btr_blob_dbg_set_deleted_flag(): Modify the 'deleted' flag in the BLOB
references of a record.

btr_blob_dbg_owner(): Own or disown a BLOB reference.

btr_page_create(), btr_page_free_low(): Assert that no BLOB references exist.

btr_create(): Create index->blobs for clustered indexes.

btr_page_reorganize_low(): Invoke btr_blob_dbg_remove() before copying
the records. Invoke btr_blob_dbg_restore() if the operation fails.

btr_page_empty(), btr_lift_page_up(), btr_compress(), btr_discard_page():
Invoke btr_blob_dbg_remove().

btr_cur_del_mark_set_clust_rec(): Invoke btr_blob_dbg_set_deleted_flag().

Other cases of modifying the delete mark are either in the secondary
index or during crash recovery, which we do not promise to support.

btr_cur_set_ownership_of_extern_field(): Invoke btr_blob_dbg_owner().

btr_store_big_rec_extern_fields(): Invoke btr_blob_dbg_add_blob().

btr_free_externally_stored_field(): Invoke btr_blob_dbg_assert_empty()
on the first BLOB page.

page_cur_insert_rec_low(), page_cur_insert_rec_zip(),
page_copy_rec_list_end_to_created_page(): Invoke btr_blob_dbg_add_rec().

page_cur_insert_rec_zip_reorg(), page_copy_rec_list_end(),
page_copy_rec_list_start(): After failure, invoke
btr_blob_dbg_remove() and btr_blob_dbg_add().

page_cur_delete_rec(): Invoke btr_blob_dbg_remove_rec().

page_delete_rec_list_end(): Invoke btr_blob_dbg_op(btr_blob_dbg_remove_rec).

page_zip_reorganize(): Invoke btr_blob_dbg_remove() before copying the records.

page_zip_copy_recs(): Invoke btr_blob_dbg_add().

row_upd_rec_in_place(): Invoke btr_blob_dbg_rbt_delete() and
btr_blob_dbg_rbt_insert().

innobase_start_or_create_for_mysql(): Warn when UNIV_BLOB_DEBUG is enabled.

rb://550 approved by Jimmy Yang
2011-02-08 12:56:23 +02:00
Vasil Dimov
6eb014a606 Adjust a suppression to cover more codepaths. 2011-02-08 07:53:37 +02:00
Inaam Rana
62ec6970d9 Bug #59472 increase AIO requests per IO thread limit to 256 from 32
rb://566
approved by: Sunny

When using native aio on linux each IO helper thread should be able to
handle upto 256 IO requests. The number 256 is the same which is used
for simulated aio as well. In case of windows where we also use native
aio this limit is 32 because of OS constraints. It seems that we are
using the limit of 32 for all the platforms where we are using native
aio. The fix is to use 256 on all platforms except windows (when native
aio is enabled on windows)
2011-02-07 18:43:00 -05:00
Vasil Dimov
cbeb1299c7 Add one more Valgrind suppression to cover a different codepath 2011-02-07 19:54:09 +02:00
Vasil Dimov
99c7f81e02 Null merge mysql-5.1-innodb -> mysql-5.5-innodb
This change was backported from 5.5.
2011-02-07 16:47:39 +02:00
Vasil Dimov
b7cc4aa0e6 Backport the fix for Bug#59875 Valgrind warning in buf0buddy.c from 5.5
This warning also happens in 5.1 with a slightly different codepath.
2011-02-07 16:45:37 +02:00
Vasil Dimov
5c14b7e103 Merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-02-07 11:18:59 +02:00
Vasil Dimov
098a2ee85d Use fun:* instead of obj:*/libz.so* because when the bundled zlib is
used (--with-zlib-dir=bundled) then there is no libz.so involved.
2011-02-07 11:13:54 +02:00
Vasil Dimov
9bc782a3f5 Fix Bug#59875 Valgrind warning in buf0buddy.c
Suppress a bogus valgrind warning.
2011-02-04 19:43:34 +02:00
Vasil Dimov
907266d9b3 Merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-02-04 18:30:05 +02:00
kevin.lewis@oracle.com
c8ac9f10c1 Bug#59699 - Hidden bug would cause a crash for unknown tablespace flags.
The bug would cause a crash of InnoDB if a non-standard or unknown table
flags existed in a SYS_TABLES record. This is important because the next
file version, Cheetah, will identify itself by expanding this field.  So
unless this is fixed, an older engine that tries to open a table in a
tablespace with a newer file version will crash instead of report an error
and refuse to open the table, as it should do.

Reviewed at RB://583.    Approved by Marko.
2011-02-04 08:59:30 -06:00
Vasil Dimov
96ca537ca4 Fix Bug#59874 Valgrind warning in InnoDB compression code
Add suppressions for a bogus valgrind warnings.
2011-02-04 12:46:47 +02:00
Marko Mäkelä
1129d230f7 Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-02 15:58:01 +02:00
Marko Mäkelä
e67169ee06 Bug #55284 diagnostics: Introduce UNIV_BLOB_LIGHT_DEBUG, enabled by UNIV_DEBUG
btr_rec_get_field_ref_offs(), btr_rec_get_field_ref(): New functions.
Get the pointer to an externally stored field.

btr_cur_set_ownership_of_extern_field(): Assert that the BLOB has not
already been disowned.

btr_store_big_rec_extern_fields(): Rename to
btr_store_big_rec_extern_fields_func() and add the debug parameter
update_in_place. All pointers to externally stored columns in the
record must either be zero or they must be pointers to inherited
columns, owned by this record or an earlier record version. For any
BLOB that is stored, the BLOB pointer must previously have been
zero. When the function completes, all BLOB pointers must be nonzero
and owned by the record.

rb://549 approved by Jimmy Yang
2011-02-02 15:51:08 +02:00
Marko Mäkelä
5dce2df4c2 Non-functional changes (cleanup) made while narrowing down Bug #55284:
row_purge(): Change the return type to void. (The return value always
was DB_SUCCESS.) Remove some local variables.

row_undo_mod_remove_clust_low(): Remove some local variables.

rb://547 approved by Jimmy Yang
2011-02-02 14:12:49 +02:00