• Marko Mäkelä's avatar
    Merge Bug #54358 comment corrections from mysql-5.1-innodb: · fd7a1118
    Marko Mäkelä authored
    ------------------------------------------------------------
    revno: 3533
    revision-id: marko.makela@oracle.com-20100630093149-wmc37t128gic933v
    parent: marko.makela@oracle.com-20100629131219-pjbkpk5rsqztmw27
    committer: Marko Mäkelä <marko.makela@oracle.com>
    branch nick: 5.1-innodb
    timestamp: Wed 2010-06-30 12:31:49 +0300
    message:
      Correct some comments that were added in the fix of Bug #54358
      (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);
    fd7a1118
btr0cur.c 138 KB