1. 07 Jul, 2010 1 commit
  2. 06 Jul, 2010 1 commit
  3. 01 Jul, 2010 1 commit
  4. 30 Jun, 2010 2 commits
    • Marko Mäkelä's avatar
      81d3dadb
    • Marko Mäkelä's avatar
      Correct some comments that were added in the fix of Bug #54358 · 5754382c
      Marko Mäkelä authored
      (READ UNCOMMITTED access failure of off-page DYNAMIC or COMPRESSED columns).
      
      Records that lack incompletely written externally stored columns may
      be accessed by READ UNCOMMITTED transaction even without involving a
      crash during an INSERT or UPDATE operation. I verified this as follows.
      
      (1) added a delay after the mini-transaction for writing the clustered
      index 'stub' record was committed (patch attached)
      (2) started mysqld in gdb, setting breakpoints to the where the
      assertions about READ UNCOMMITTED were added in the bug fix
      (3) invoked ibtest3 --create-options=key_block_size=2
      to create BLOBs in a COMPRESSED table
      (4) invoked the following:
      yes 'set transaction isolation level read uncommitted;
      checksum table blobt3;select sleep(1);'|mysql -uroot test
      (5) noted that one of the breakpoints was triggered
      (return(NULL) in btr_rec_copy_externally_stored_field())
      
      === modified file 'storage/innodb_plugin/row/row0ins.c'
      --- storage/innodb_plugin/row/row0ins.c	2010-06-30 08:17:25 +0000
      +++ storage/innodb_plugin/row/row0ins.c	2010-06-30 08:17:25 +0000
      @@ -2120,6 +2120,7 @@ function_exit:
       		rec_t*	rec;
       		ulint*	offsets;
       		mtr_start(&mtr);
      +		os_thread_sleep(5000000);
       
       		btr_cur_search_to_nth_level(index, 0, entry, PAGE_CUR_LE,
       					    BTR_MODIFY_TREE, &cursor, 0,
      
      === modified file 'storage/innodb_plugin/row/row0upd.c'
      --- storage/innodb_plugin/row/row0upd.c	2010-06-30 08:11:55 +0000
      +++ storage/innodb_plugin/row/row0upd.c	2010-06-30 08:11:55 +0000
      @@ -1763,6 +1763,7 @@ row_upd_clust_rec(
       		rec_offs_init(offsets_);
       
       		mtr_start(mtr);
      +		os_thread_sleep(5000000);
       
       		ut_a(btr_pcur_restore_position(BTR_MODIFY_TREE, pcur, mtr));
       		rec = btr_cur_get_rec(btr_cur);
      5754382c
  5. 29 Jun, 2010 5 commits
    • Marko Mäkelä's avatar
      ChangeLog entry for Bug #54408 · 5a25f408
      Marko Mäkelä authored
      5a25f408
    • Marko Mäkelä's avatar
      Bug#54408: txn rollback after recovery: row0umod.c:673 · c8e48de2
      Marko Mäkelä authored
      dict_table_get_format(index->table)
      
      The REDUNDANT and COMPACT formats store a local 768-byte prefix of
      each externally stored column. No row_ext cache is needed, but we
      initialized one nevertheless. When the BLOB pointer was zero, we would
      ignore the locally stored prefix as well. This triggered an assertion
      failure in row_undo_mod_upd_exist_sec().
      
      row_build(): Allow ext==NULL when a REDUNDANT or COMPACT table
      contains externally stored columns.
      
      row_undo_search_clust_to_pcur(), row_upd_store_row(): Invoke
      row_build() with ext==NULL on REDUNDANT and COMPACT tables.
      
      rb://382 approved by Jimmy Yang
      c8e48de2
    • Marko Mäkelä's avatar
      ChangeLog entry for Bug #54358 · c43070da
      Marko Mäkelä authored
      c43070da
    • Marko Mäkelä's avatar
      Bug#54358: READ UNCOMMITTED access failure of off-page DYNAMIC or COMPRESSED · 7271bcb4
      Marko Mäkelä authored
      columns
      
      When the server crashes after a record stub has been inserted and
      before all its off-page columns have been written, the record will
      contain incomplete off-page columns after crash recovery. Such records
      may only be accessed at the READ UNCOMMITTED isolation level or when
      rolling back a recovered transaction in recv_recovery_rollback_active().
      Skip these records at the READ UNCOMMITTED isolation level.
      
      TODO: Add assertions for checking the above assumptions hold when an
      incomplete BLOB is encountered.
      
      btr_rec_copy_externally_stored_field(): Return NULL if the field is
      incomplete.
      
      row_prebuilt_t::templ_contains_blob: Clarify what "BLOB" means in this
      context. Hint: MySQL BLOBs are not the same as InnoDB BLOBs.
      
      row_sel_store_mysql_rec(): Return FALSE if not all columns could be
      retrieved. Previously this function always returned TRUE.  Assert that
      the record is not delete-marked.
      
      row_sel_push_cache_row_for_mysql(): Return FALSE if not all columns
      could be retrieved.
      
      row_search_for_mysql(): Skip records containing incomplete off-page
      columns. Assert that the transaction isolation level is READ
      UNCOMMITTED.
      
      rb://380 approved by Jimmy Yang
      7271bcb4
    • Jimmy Yang's avatar
      Check in fix for bug #53756: "ALTER TABLE ADD PRIMARY KEY affects · dec24a7d
      Jimmy Yang authored
      crash recovery"
      
      rb://369 approved by Marko
      dec24a7d
  6. 25 Jun, 2010 6 commits
  7. 24 Jun, 2010 5 commits
  8. 23 Jun, 2010 2 commits
  9. 22 Jun, 2010 5 commits
  10. 21 Jun, 2010 2 commits
  11. 18 Jun, 2010 3 commits
  12. 17 Jun, 2010 2 commits
  13. 15 Jun, 2010 1 commit
  14. 14 Jun, 2010 2 commits
  15. 10 Jun, 2010 2 commits