List:Commits« Previous MessageNext Message »
From:marko.makela Date:November 2 2010 7:42am
Subject:bzr push into mysql-5.1-innodb branch (marko.makela:3646 to 3648) Bug#57799
View as plain text  
 3648 Marko Mäkelä	2010-11-02
      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.

    modified:
      storage/innodb_plugin/ChangeLog
      storage/innodb_plugin/row/row0sel.c
 3647 Marko Mäkelä	2010-11-02
      White-space corrections in the InnoDB Plugin ChangeLog

    modified:
      storage/innodb_plugin/ChangeLog
 3646 Calvin Sun	2010-10-28
      Bug#52062: Compiler warning in os0file.c on windows 64-bit
      On Windows, the parameter for number of bytes passed into WriteFile()
      and ReadFile() is DWORD. Casting is needed to silence the warning on
      64-bit Windows.
      
      Also, adding several asserts to ensure the variable for number of bytes
      is no more than 32 bits, even on 64-bit Windows.
      
      This is for InnoDB Plugin.
      
      rb://415
      Approved by: Inaam

    modified:
      storage/innodb_plugin/os/os0file.c
=== modified file 'storage/innodb_plugin/ChangeLog'
--- a/storage/innodb_plugin/ChangeLog	revid:calvin.sun@oracle.com-20101028051028-jgd5izeygjfkwmy6
+++ b/storage/innodb_plugin/ChangeLog	revid:marko.makela@stripped2848-uufe0c5xztb51p0m
@@ -1,13 +1,19 @@
+2010-11-02	The InnoDB Team
+
+	* row/row0sel.c:
+	Fix Bug#57799 READ UNCOMMITTED access failure of off-page
+	DYNAMIC or COMPRESSED columns again
+
 2010-10-24	The InnoDB Team
 
 	* row/row0mysql.c
-	Fix Bug #57700 Latching order violation in
+	Fix Bug#57700 Latching order violation in
 	row_truncate_table_for_mysql()
 
 2010-10-20	The InnoDB Team
 
 	* dict/dict0load.c
-	Fix Bug #57616 Sig 11 in dict_load_table() when failed to load
+	Fix Bug#57616 Sig 11 in dict_load_table() when failed to load
 	index or foreign key
 
 2010-10-19	The InnoDB Team
@@ -17,7 +23,7 @@
 	include/ibuf0ibuf.h, include/row0mysql.h,
 	row/row0mysql.c, row/row0sel.c,
 	innodb_bug56680.test, innodb_bug56680.result:
-	Fix Bug #56680 InnoDB may return wrong results from a
+	Fix Bug#56680 InnoDB may return wrong results from a
 	case-insensitive covering index
 
 2010-10-18	The InnoDB Team
@@ -61,7 +67,7 @@
 2010-08-03	The InnoDB Team
 
 	* include/dict0dict.h, include/dict0dict.ic, row/row0mysql.c:
-	Fix bug #54678, InnoDB, TRUNCATE, ALTER, I_S SELECT, crash or deadlock
+	Fix Bug#54678 InnoDB, TRUNCATE, ALTER, I_S SELECT, crash or deadlock
 
 2010-08-03	The InnoDB Team
 
@@ -135,7 +141,7 @@
 
 	* dict/dict0load.c, fil/fil0fil.c:
 	Fix Bug#54658: InnoDB: Warning: allocated tablespace %lu,
-	old maximum was 0 (introduced in Bug #53578 fix)
+	old maximum was 0 (introduced in Bug#53578 fix)
 
 2010-06-16	The InnoDB Team
 

=== modified file 'storage/innodb_plugin/row/row0sel.c'
--- a/storage/innodb_plugin/row/row0sel.c	revid:calvin.sun@stripped-jgd5izeygjfkwmy6
+++ b/storage/innodb_plugin/row/row0sel.c	revid:marko.makela@strippedtb51p0m
@@ -106,6 +106,18 @@ row_sel_sec_rec_is_for_blob(
 	ulint	len;
 	byte	buf[DICT_MAX_INDEX_COL_LEN];
 
+	ut_a(clust_len >= BTR_EXTERN_FIELD_REF_SIZE);
+
+	if (UNIV_UNLIKELY
+	    (!memcmp(clust_field + clust_len - BTR_EXTERN_FIELD_REF_SIZE,
+		     field_ref_zero, BTR_EXTERN_FIELD_REF_SIZE))) {
+		/* The externally stored field was not written yet.
+		This record should only be seen by
+		recv_recovery_rollback_active() or any
+		TRX_ISO_READ_UNCOMMITTED transactions. */
+		return(FALSE);
+	}
+
 	len = btr_copy_externally_stored_field_prefix(buf, sizeof buf,
 						      zip_size,
 						      clust_field, clust_len);

Attachment: [text/bzr-bundle] bzr/marko.makela@oracle.com-20101102072848-uufe0c5xztb51p0m.bundle
Thread
bzr push into mysql-5.1-innodb branch (marko.makela:3646 to 3648) Bug#57799marko.makela2 Nov