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#57799 | marko.makela | 2 Nov |