List:Commits« Previous MessageNext Message »
From:marko.makela Date:August 21 2012 8:23am
Subject:bzr push into mysql-5.1 branch (marko.makela:3800 to 3801) Bug#12845774
View as plain text  
 3801 Marko Mäkelä	2012-08-21
      Fix regression from Bug#12845774 OPTIMISTIC INSERT/UPDATE USES WRONG
      HEURISTICS FOR COMPRESSED PAGE SIZE
      
      The fix of Bug#12845774 was supposed to skip known-to-fail
      btr_cur_optimistic_insert() calls. There was only one such call, in
      btr_cur_pessimistic_update(). All other callers of
      btr_cur_pessimistic_insert() would release and reacquire the B-tree
      page latch before attempting the pessimistic insert. This would allow
      other threads to restructure the B-tree, allowing (and requiring) the
      insert to succeed as an optimistic (single-page) operation.
      
      Failure to attempt an optimistic insert before a pessimistic one would
      trigger an attempt to split an empty page.
      
      rb:1234 approved by Sunny Bains

    modified:
      storage/innodb_plugin/ibuf/ibuf0ibuf.c
      storage/innodb_plugin/row/row0ins.c
 3800 Mattias Jonsson	2012-08-20
      Bug#13025132 - PARTITIONS USE TOO MUCH MEMORY
      
      pre-push fix, removed unused variable.

    modified:
      sql/ha_partition.cc
=== modified file 'storage/innodb_plugin/ibuf/ibuf0ibuf.c'
--- a/storage/innodb_plugin/ibuf/ibuf0ibuf.c	revid:mattias.jonsson@strippedxt4vfnvji8o4y4jp
+++ b/storage/innodb_plugin/ibuf/ibuf0ibuf.c	revid:marko.makela@strippedwrzksj9l5
@@ -2752,11 +2752,19 @@ ibuf_insert_low(
 
 		root = ibuf_tree_root_get(&mtr);
 
-		err = btr_cur_pessimistic_insert(BTR_NO_LOCKING_FLAG
-						 | BTR_NO_UNDO_LOG_FLAG,
-						 cursor,
-						 ibuf_entry, &ins_rec,
-						 &dummy_big_rec, 0, thr, &mtr);
+		err = btr_cur_optimistic_insert(
+			BTR_NO_LOCKING_FLAG | BTR_NO_UNDO_LOG_FLAG,
+			cursor, ibuf_entry, &ins_rec,
+			&dummy_big_rec, 0, thr, &mtr);
+
+		if (err == DB_FAIL) {
+			err = btr_cur_pessimistic_insert(
+				BTR_NO_LOCKING_FLAG
+				| BTR_NO_UNDO_LOG_FLAG,
+				cursor, ibuf_entry, &ins_rec,
+				&dummy_big_rec, 0, thr, &mtr);
+		}
+
 		if (err == DB_SUCCESS) {
 			/* Update the page max trx id field */
 			page_update_max_trx_id(btr_cur_get_block(cursor), NULL,

=== modified file 'storage/innodb_plugin/row/row0ins.c'
--- a/storage/innodb_plugin/row/row0ins.c	revid:mattias.jonsson@stripped
+++ b/storage/innodb_plugin/row/row0ins.c	revid:marko.makela@oracle.com-20120821074717-762l1trwrzksj9l5
@@ -2179,9 +2179,16 @@ row_ins_index_entry_low(
 
 				goto function_exit;
 			}
-			err = btr_cur_pessimistic_insert(
+
+			err = btr_cur_optimistic_insert(
 				0, &cursor, entry, &insert_rec, &big_rec,
 				n_ext, thr, &mtr);
+
+			if (err == DB_FAIL) {
+				err = btr_cur_pessimistic_insert(
+					0, &cursor, entry, &insert_rec,
+					&big_rec, n_ext, thr, &mtr);
+			}
 		}
 	}
 

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.1 branch (marko.makela:3800 to 3801) Bug#12845774marko.makela21 Aug