~stewart/drizzle/update-innobase

Viewing all changes in revision 2520.

  • Committer: Stewart Smith
  • Author(s): Marko Mäkelä, Stewart Smith
  • Date: 2010-12-17 07:13:09 UTC
  • Revision ID: stewart@flamingspork.com-20101217071309-kmsjtcw27tmym3rt
Merge Revision revid:marko.makela@oracle.com-20101102072848-uufe0c5xztb51p0m from MySQL InnoDB

Original revid:marko.makela@oracle.com-20101102072848-uufe0c5xztb51p0m

Original Authors: Marko Mkel <marko.makela@oracle.com>
Original commit message:
Bug#57799 READ UNCOMMITTED access failure of off-page DYNAMIC or COMPRESSED
columns again

This is follow-up to Bug #54358. Not all occurrences of the bug were fixed.
We need to check all calls to btr_copy_externally_stored_field_prefix_low()
and do the right thing when the pointer to the off-page column is null
(full of zero bytes).

It turns out that only the call to btr_copy_externally_stored_field_prefix()
in row_sel_sec_rec_is_for_blob() needs to be changed.

For fetching complete off-page columns rather than prefixes, the function
btr_rec_copy_externally_stored_field() already checks if the pointer
is null (all-zero).  Two of its callers (row_merge_copy_blobs() and
row_sel_fetch_columns()) are never executed as READ COMMITTED and can
rightfully assert that the fetch succeeded.  The third caller,
row_sel_store_mysql_rec(), already does the right thing.

The calls in row_upd_ext_fetch() and trx_undo_page_fetch_ext() must
expect that the off-page column exists. Update and rollback are
locking operations, never READ UNCOMMITTED.

expand all expand all

Show diffs side-by-side

added added

removed removed

Lines of Context: